Merge remote-tracking branch 'citadel/master' into backend_sync

This commit is contained in:
silicons
2021-06-16 19:04:07 -07:00
31 changed files with 528 additions and 395 deletions
+1 -1
View File
@@ -532,7 +532,7 @@
// /datum/component/storage signals
#define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool.
#define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" //(obj/item/inserting, mob/user, silent, force) - returns bool
#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force) - returns bool.
#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" //(mob/show_to, force, trigger_on_found) - returns bool.
#define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from" //(mob/hide_from) - returns bool
#define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all" //returns bool
#define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state" //(newstate)
@@ -52,7 +52,7 @@
/datum/crafting_recipe/armwraps
name = "Armwraps"
result = /obj/item/clothing/gloves/fingerless/pugilist
result = /obj/item/clothing/gloves/fingerless/pugilist/crafted
time = 60
tools = list(TOOL_WIRECUTTER)
reqs = list(/obj/item/stack/sheet/cloth = 4,
+1 -1
View File
@@ -159,7 +159,7 @@
/datum/component/embedded/proc/jostleCheck()
var/mob/living/carbon/victim = parent
var/damage = weapon.w_class * pain_mult
var/damage = weapon.w_class * jostle_pain_mult
var/pain_chance_current = jostle_chance
if(victim.m_intent == MOVE_INTENT_WALK || !(victim.mobility_flags & MOBILITY_STAND))
pain_chance_current *= 0.5
@@ -37,7 +37,7 @@
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
@@ -81,7 +81,7 @@
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
+23 -10
View File
@@ -271,20 +271,20 @@
var/turf/T = get_turf(A)
var/list/things = contents()
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE)
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE, mob/user)
var/atom/real_location = real_location()
for(var/obj/item/I in things)
things -= I
if(I.loc != real_location)
continue
remove_from_storage(I, target)
if(trigger_on_found && I.on_found())
if(trigger_on_found && user && (user.active_storage != src) && I.on_found(user))
return FALSE
remove_from_storage(I, target)
if(TICK_CHECK)
progress.update(progress.goal - length(things))
return TRUE
@@ -429,7 +429,7 @@
return FALSE
// this must come before the screen objects only block, dunno why it wasn't before
if(over_object == M)
user_show_to_mob(M)
user_show_to_mob(M, trigger_on_found = TRUE)
return
if(isrevenant(M))
RevenantThrow(over_object, M, source)
@@ -448,15 +448,28 @@
return
A.add_fingerprint(M)
/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE)
/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE, trigger_on_found = FALSE)
var/atom/A = parent
if(!istype(M))
return FALSE
A.add_fingerprint(M)
if(!force && (check_locked(null, M) || !M.CanReach(parent, view_only = TRUE)))
return FALSE
if(trigger_on_found)
if(check_on_found(M))
return
ui_show(M)
/**
* Check if we should trigger on_found()
* If this returns TRUE, it means an on_found() returned TRUE and immediately broke the chain.
* In most contexts, this should mean to stop.
*/
/datum/component/storage/proc/check_on_found(mob/user)
for(var/obj/item/I in contents())
if(I.on_found(user))
return TRUE
/datum/component/storage/proc/mousedrop_receive(datum/source, atom/movable/O, mob/M)
if(isitem(O))
var/obj/item/I = O
@@ -579,8 +592,8 @@
/datum/component/storage/proc/show_to_ghost(datum/source, mob/dead/observer/M)
return user_show_to_mob(M, TRUE)
/datum/component/storage/proc/signal_show_attempt(datum/source, mob/showto, force = FALSE)
return user_show_to_mob(showto, force)
/datum/component/storage/proc/signal_show_attempt(datum/source, mob/showto, force = FALSE, trigger_on_found = TRUE)
return user_show_to_mob(showto, force, trigger_on_found = trigger_on_found)
/datum/component/storage/proc/on_check()
return TRUE
@@ -649,7 +662,7 @@
if(A.loc == user)
. = COMPONENT_NO_ATTACK_HAND
if(!check_locked(source, user, TRUE))
ui_show(user)
user_show_to_mob(user, trigger_on_found = TRUE)
A.do_jiggle()
/datum/component/storage/proc/signal_on_pickup(datum/source, mob/user)
@@ -679,7 +692,7 @@
var/atom/A = parent
if(!quickdraw)
A.add_fingerprint(user)
user_show_to_mob(user)
user_show_to_mob(user, trigger_on_found = TRUE)
if(rustle_sound)
playsound(A, "rustle", 50, 1, -5)
return TRUE
+98
View File
@@ -207,3 +207,101 @@
if(!key_valid)
GLOB.topic_status_cache = .
/datum/world_topic/jsonstatus
keyword = "jsonstatus"
/datum/world_topic/jsonstatus/Run(list/input, addr)
. = list()
.["mode"] = "hidden" // GLOB.master_mode - woops we don't want people to know if there's secret/extended :)
.["round_id"] = "[GLOB.round_id]"
.["players"] = GLOB.clients.len
var/list/adm = get_admin_counts()
var/list/presentmins = adm["present"]
var/list/afkmins = adm["afk"]
.["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho
.["security_level"] = "[NUM2SECLEVEL(GLOB.security_level)]"
.["round_duration"] = WORLDTIME2TEXT("hh:mm:ss")
.["map"] = SSmapping.config.map_name
return json_encode(.)
/datum/world_topic/jsonplayers
keyword = "jsonplayers"
/datum/world_topic/jsonplayers/Run(list/input, addr)
. = list()
for(var/client/C in GLOB.clients)
if(C.holder?.fakekey)
. += C.holder.fakekey
continue
. += C.key
return json_encode(.)
/datum/world_topic/jsonmanifest
keyword = "jsonmanifest"
/datum/world_topic/jsonmanifest/Run(list/input, addr)
var/list/command = list()
var/list/security = list()
var/list/engineering = list()
var/list/medical = list()
var/list/science = list()
var/list/cargo = list()
var/list/civilian = list()
var/list/misc = list()
for(var/datum/data/record/R in GLOB.data_core.general)
var/name = R.fields["name"]
var/rank = R.fields["rank"]
var/real_rank = rank // make_list_rank(R.fields["real_rank"])
if(real_rank in GLOB.security_positions)
security[name] = rank
else if(real_rank in GLOB.engineering_positions)
engineering[name] = rank
else if(real_rank in GLOB.medical_positions)
medical[name] = rank
else if(real_rank in GLOB.science_positions)
science[name] = rank
else if(real_rank in GLOB.supply_positions)
cargo[name] = rank
else if(real_rank in GLOB.civilian_positions)
civilian[name] = rank
else
misc[name] = rank
// mixed departments, /datum/department when
if(real_rank in GLOB.command_positions)
command[name] = rank
. = list()
.["Command"] = command
.["Security"] = security
.["Engineering"] = engineering
.["Medical"] = medical
.["Science"] = science
.["Cargo"] = cargo
.["Civilian"] = civilian
.["Misc"] = misc
return json_encode(.)
/datum/world_topic/jsonrevision
keyword = "jsonrevision"
/datum/world_topic/jsonrevision/Run(list/input, addr)
var/datum/getrev/revdata = GLOB.revdata
var/list/data = list(
"date" = copytext(revdata.date, 1, 11),
"dd_version" = world.byond_version,
"dd_build" = world.byond_build,
"dm_version" = DM_VERSION,
"dm_build" = DM_BUILD,
"revision" = revdata.commit,
"round_id" = "[GLOB.round_id]",
"testmerge_base_url" = "[CONFIG_GET(string/githuburl)]/pull/"
)
if (revdata.testmerge.len)
for (var/datum/tgs_revision_information/test_merge/TM in revdata.testmerge)
data["testmerges"] += list(list(
"id" = TM.number,
"desc" = TM.title,
"author" = TM.author
))
return json_encode(data)
+2
View File
@@ -800,6 +800,8 @@
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
if(STR == src_object)
return
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
stoplag(1)
qdel(progress)
+1 -1
View File
@@ -386,7 +386,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress)))
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress, TRUE, user)))
stoplag(1)
qdel(progress)
@@ -6,7 +6,7 @@
holder.marked_datum = D
vv_update_display(D, "marked", VV_MSG_MARKED)
/client/proc/mark_datum_mapview(datum/D as mob|obj|turf|area in view(view))
/client/proc/mark_datum_mapview(datum/D in world)
set category = "Debug"
set name = "Mark Object"
mark_datum(D)
@@ -76,6 +76,18 @@
if(!silent)
to_chat(user, "<span class='warning'>With [src] off of your arms, you feel less ready to punch things.</span>")
/obj/item/clothing/gloves/fingerless/pugilist/crafted
unique_reskin = list("Short" = "armwraps",
"Extended" = "armwraps_extended"
)
/obj/item/clothing/gloves/fingerless/pugilist/crafted/reskin_obj(mob/M)
. = ..()
if(icon_state == "armwraps_extended")
item_state = "armwraps_extended"
else
return
/obj/item/clothing/gloves/fingerless/pugilist/chaplain
name = "armwraps of unyielding resolve"
desc = "A series of armwraps, soaked in holy water. Makes you pretty keen to smite evil magic users."