mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 06:58:30 +01:00
Merge branch 'master' into Viro-Update-1
This commit is contained in:
@@ -43,7 +43,7 @@
|
||||
/datum/ColorMate/tgui_state(mob/user)
|
||||
return GLOB.tgui_conscious_state
|
||||
|
||||
/datum/ColorMate/tgui_data()
|
||||
/datum/ColorMate/tgui_data(mob/user)
|
||||
. = list()
|
||||
.["activemode"] = active_mode
|
||||
.["matrixcolors"] = list(
|
||||
@@ -69,7 +69,7 @@
|
||||
.["item"] = list()
|
||||
.["item"]["name"] = inserted.name
|
||||
.["item"]["sprite"] = icon2base64(get_flat_icon(inserted,dir=SOUTH,no_anim=TRUE))
|
||||
.["item"]["preview"] = icon2base64(build_preview())
|
||||
.["item"]["preview"] = icon2base64(build_preview(user))
|
||||
else
|
||||
.["item"] = null
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
return TRUE
|
||||
|
||||
/// Produces the preview image of the item, used in the UI, the way the color is not stacking is a sin.
|
||||
/datum/ColorMate/proc/build_preview()
|
||||
/datum/ColorMate/proc/build_preview(mob/user)
|
||||
if(inserted) //sanity
|
||||
var/list/cm
|
||||
switch(active_mode)
|
||||
@@ -178,17 +178,17 @@
|
||||
text2num(color_matrix_last[11]),
|
||||
text2num(color_matrix_last[12]),
|
||||
)
|
||||
if(!check_valid_color(cm, usr))
|
||||
if(!check_valid_color(cm, user))
|
||||
return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE)
|
||||
|
||||
if(COLORMATE_TINT)
|
||||
if(!check_valid_color(activecolor, usr))
|
||||
if(!check_valid_color(activecolor, user))
|
||||
return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE)
|
||||
|
||||
if(COLORMATE_HSV)
|
||||
cm = color_matrix_hsv(build_hue, build_sat, build_val)
|
||||
color_matrix_last = cm
|
||||
if(!check_valid_color(cm, usr))
|
||||
if(!check_valid_color(cm, user))
|
||||
return get_flat_icon(inserted, dir=SOUTH, no_anim=TRUE)
|
||||
|
||||
var/cur_color = inserted.color
|
||||
|
||||
@@ -452,26 +452,25 @@
|
||||
data["crafting_recipes"] = crafting_recipes
|
||||
return data
|
||||
|
||||
/datum/component/personal_crafting/tgui_act(action, params)
|
||||
/datum/component/personal_crafting/tgui_act(action, params, datum/tgui/ui)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(action)
|
||||
if("make")
|
||||
var/mob/user = usr
|
||||
var/datum/crafting_recipe/TR = locate(params["recipe"]) in GLOB.crafting_recipes
|
||||
busy = TRUE
|
||||
tgui_interact(user)
|
||||
var/atom/movable/result = construct_item(user, TR)
|
||||
tgui_interact(ui.user)
|
||||
var/atom/movable/result = construct_item(ui.user, TR)
|
||||
if(!istext(result)) //We made an item and didn't get a fail message
|
||||
if(ismob(user) && isitem(result)) //In case the user is actually possessing a non mob like a machine
|
||||
user.put_in_hands(result)
|
||||
if(ismob(ui.user) && isitem(result)) //In case the user is actually possessing a non mob like a machine
|
||||
ui.user.put_in_hands(result)
|
||||
else
|
||||
result.forceMove(user.drop_location())
|
||||
to_chat(user, span_notice("[TR.name] constructed."))
|
||||
TR.on_craft_completion(user, result)
|
||||
result.forceMove(ui.user.drop_location())
|
||||
to_chat(ui.user, span_notice("[TR.name] constructed."))
|
||||
TR.on_craft_completion(ui.user, result)
|
||||
else
|
||||
to_chat(user, span_warning("Construction failed[result]"))
|
||||
to_chat(ui.user, span_warning("Construction failed[result]"))
|
||||
busy = FALSE
|
||||
if("toggle_recipes")
|
||||
display_craftable_only = !display_craftable_only
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(prob(15/D.permeability_mod))
|
||||
return
|
||||
|
||||
if(nutrition > 300 && prob(nutrition/10))
|
||||
if(nutrition > 300 && prob(nutrition/50))
|
||||
return
|
||||
|
||||
var/list/zone_weights = list(
|
||||
@@ -178,16 +178,13 @@
|
||||
return FALSE
|
||||
|
||||
var/disease = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease))
|
||||
var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", "Characters", human_mob_list)
|
||||
|
||||
var/datum/disease/D = new disease
|
||||
|
||||
if(isnull(D) || isnull(H))
|
||||
return FALSE
|
||||
|
||||
if(H.stat == DEAD)
|
||||
return FALSE
|
||||
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
|
||||
var/cures_found = 0
|
||||
for(var/C_id in cures)
|
||||
if(affected_mob.reagents.has_reagent(C_id))
|
||||
if(affected_mob.bloodstr.has_reagent(C_id) || affected_mob.ingested.has_reagent(C_id))
|
||||
cures_found++
|
||||
|
||||
if(needs_all_cures && cures_found < length(cures))
|
||||
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
if((spread_flags & SPECIAL || spread_flags & NON_CONTAGIOUS || spread_flags & BLOOD) && !force_spread)
|
||||
return
|
||||
|
||||
if(affected_mob.reagents.has_reagent("spaceacilin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/10)))
|
||||
if(affected_mob.bloodstr.has_reagent("spaceacillin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/50)))
|
||||
return
|
||||
|
||||
var/spread_range = 1
|
||||
|
||||
@@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
|
||||
|
||||
GLOBAL_LIST_INIT(advance_cures, list(
|
||||
"sodiumchloride", "sugar", "orangejuice",
|
||||
"spaceacilin", "glucose", "ethanol",
|
||||
"spaceacillin", "glucose", "ethanol",
|
||||
"leporazine", "impedrezene", "hepanephrodaxon",
|
||||
"silver", "gold"
|
||||
))
|
||||
@@ -16,6 +16,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
spread_text = "Unknown"
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
|
||||
var/s_processing = FALSE
|
||||
var/list/symptoms = list()
|
||||
var/id = ""
|
||||
|
||||
@@ -36,7 +37,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
return
|
||||
|
||||
/datum/disease/advance/Destroy()
|
||||
if(processing)
|
||||
if(s_processing)
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
S.End(src)
|
||||
return ..()
|
||||
@@ -46,8 +47,8 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
return FALSE
|
||||
if(symptoms && length(symptoms))
|
||||
|
||||
if(!processing)
|
||||
processing = TRUE
|
||||
if(!s_processing)
|
||||
s_processing = TRUE
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
S.Start(src)
|
||||
|
||||
@@ -368,7 +369,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
for(var/datum/disease/advance/AD in active_diseases)
|
||||
AD.Refresh()
|
||||
|
||||
H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
H = tgui_input_list(usr, "Choose infectee", "Infectees", human_mob_list)
|
||||
|
||||
if(isnull(H))
|
||||
return FALSE
|
||||
|
||||
@@ -10,7 +10,8 @@ Coughing
|
||||
Low Level.
|
||||
|
||||
BONUS
|
||||
Will force the affected mob to drop small items!
|
||||
Will force the affected mob to drop small items.
|
||||
Small spread if not wearing a mask
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
@@ -36,4 +37,6 @@ BONUS
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I && I.w_class == ITEMSIZE_SMALL)
|
||||
M.drop_item()
|
||||
if(!M.wear_mask) // Small spread if not wearing a mask
|
||||
A.spread(2)
|
||||
return
|
||||
|
||||
@@ -33,7 +33,7 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = (sqrtor0(20+A.totalStageSpeed())*(1+rand()))
|
||||
var/get_damage = max(0, (sqrtor0(20+A.totalStageSpeed())*(1+rand())))
|
||||
M.adjustToxLoss(-get_damage)
|
||||
return TRUE
|
||||
|
||||
@@ -144,7 +144,7 @@ Bonus
|
||||
level = 5
|
||||
|
||||
/datum/symptom/heal/dna/Heal(var/mob/living/carbon/M, var/datum/disease/advance/A)
|
||||
var/amt_healed = (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand()))
|
||||
M.apply_damage(-amt_healed, CLONE)
|
||||
var/amt_healed = max(0, (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand())))
|
||||
M.adjustBrainLoss(-amt_healed)
|
||||
M.radiation = max(M.radiation - 3, 0)
|
||||
return TRUE
|
||||
|
||||
@@ -30,14 +30,14 @@ Bonus
|
||||
var/mob/living/M = A.affected_mob
|
||||
|
||||
if(A.stage >= 3)
|
||||
M.slurring = min(0, M.slurring-4)
|
||||
M.druggy = min(0, M.druggy-4)
|
||||
M.slurring = max(0, M.slurring-4)
|
||||
M.druggy = max(0, M.druggy-4)
|
||||
M.reagents.remove_reagent("ethanol", 3)
|
||||
if(A.stage >= 4)
|
||||
M.drowsyness = min(0, M.drowsyness-4)
|
||||
M.drowsyness = max(0, M.drowsyness-4)
|
||||
if(M.reagents.has_reagent("bliss"))
|
||||
M.reagents.del_reagent("bliss")
|
||||
M.hallucination = min(0, M.hallucination-4)
|
||||
M.hallucination = max(0, M.hallucination-4)
|
||||
if(A.stage >= 5)
|
||||
if(M.reagents.get_reagent_amount("alkysine") < 10)
|
||||
M.reagents.add_reagent("alkysine", 5)
|
||||
|
||||
@@ -34,8 +34,10 @@ Bonus
|
||||
M.emote("sniff")
|
||||
else
|
||||
M.emote("sneeze")
|
||||
A.spread(5)
|
||||
if(prob(30))
|
||||
if(!M.wear_mask) // Spread only if they're not covering their face
|
||||
A.spread(5)
|
||||
|
||||
if(prob(30) && !M.wear_mask) // Same for mucus
|
||||
var/obj/effect/decal/cleanable/mucus/icky = new(get_turf(M))
|
||||
icky.viruses |= A.Copy()
|
||||
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
max_stages = 3
|
||||
spread_text = "Airborne"
|
||||
spread_flags = AIRBORNE
|
||||
cure_text = "Rest & Spaceacilin"
|
||||
cures = list("spaceacilin")
|
||||
cure_text = "Rest & Spaceacillin"
|
||||
cures = list("spaceacillin", "chicken_soup")
|
||||
needs_all_cures = FALSE
|
||||
agent = "XY-rhinovirus"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
|
||||
permeability_mod = 0.5
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
name = "The Flu"
|
||||
max_stages = 3
|
||||
spread_text = "Airborne"
|
||||
cure_text = "Spaceacilin"
|
||||
cures = list("spaceacilin")
|
||||
cure_text = "Spaceacillin"
|
||||
cures = list("spaceacillin", "chicken_soup")
|
||||
needs_all_cures = FALSE
|
||||
cure_chance = 10
|
||||
agent = "H13N1 flu virion"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
stage_prob = 2
|
||||
spread_text = "Blood and close contact"
|
||||
spread_flags = BLOOD
|
||||
cure_text = "Spaceacilin"
|
||||
cure_text = "Spaceacillin"
|
||||
agent = "Chimera cells"
|
||||
cures = list("spaceacilin")
|
||||
cures = list("spaceacillin")
|
||||
cure_chance = 10
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
desc = "If left untreated, subject will become a xenochimera upon perishing."
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
Stack End Detector.
|
||||
Can detect if a given code stack has exited, used by the mc for stack overflow detection.
|
||||
|
||||
**/
|
||||
/datum/stack_end_detector
|
||||
var/datum/weakref/_WF
|
||||
var/datum/stack_canary/_canary
|
||||
|
||||
/datum/stack_end_detector/New()
|
||||
_canary = new()
|
||||
_WF = WEAKREF(_canary)
|
||||
|
||||
/** Prime the stack overflow detector.
|
||||
Store the return value of this proc call in a proc level var.
|
||||
Can only be called once.
|
||||
**/
|
||||
/datum/stack_end_detector/proc/prime_canary()
|
||||
if (!_canary)
|
||||
CRASH("Prime_canary called twice")
|
||||
. = _canary
|
||||
_canary = null
|
||||
|
||||
/// Returns true if the stack is still going. Calling before the canary has been primed also returns true
|
||||
/datum/stack_end_detector/proc/check()
|
||||
return !!_WF.resolve()
|
||||
|
||||
/// Stack canary. Will go away if the stack it was primed by is ended by byond for return or stack overflow reasons.
|
||||
/datum/stack_canary
|
||||
|
||||
/// empty proc to avoid warnings about unused variables. Call this proc on your canary in the stack it's watching.
|
||||
/datum/stack_canary/proc/use_variable()
|
||||
@@ -5,7 +5,6 @@
|
||||
gloves = /obj/item/clothing/gloves/black
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
head = /obj/item/clothing/head/chaplain_hood
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/monocle
|
||||
suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie
|
||||
r_pocket = /obj/item/bikehorn
|
||||
@@ -15,6 +14,10 @@
|
||||
id_type = /obj/item/card/id/syndicate/station_access
|
||||
id_pda_assignment = "Tunnel Clown!"
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/masked_killer
|
||||
name = "Masked Killer"
|
||||
uniform = /obj/item/clothing/under/overalls
|
||||
@@ -22,13 +25,16 @@
|
||||
gloves = /obj/item/clothing/gloves/sterile/latex
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
head = /obj/item/clothing/head/welding
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/monocle
|
||||
suit = /obj/item/clothing/suit/storage/apron
|
||||
l_pocket = /obj/item/material/knife/tacknife
|
||||
r_pocket = /obj/item/surgical/scalpel
|
||||
r_hand = /obj/item/material/twohanded/fireaxe
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H)
|
||||
var/victim = get_mannequin(H.ckey)
|
||||
for(var/obj/item/carried_item in H.get_equipped_items(TRUE))
|
||||
@@ -39,7 +45,6 @@
|
||||
uniform = /obj/item/clothing/under/suit_jacket{ starting_accessories=list(/obj/item/clothing/accessory/wcoat) }
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
gloves = /obj/item/clothing/gloves/black
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
l_pocket = /obj/item/melee/energy/sword
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
@@ -49,6 +54,10 @@
|
||||
pda_slot = slot_belt
|
||||
pda_type = /obj/item/pda/heads
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/professional/post_equip(var/mob/living/carbon/human/H)
|
||||
var/obj/item/storage/secure/briefcase/sec_briefcase = new(H)
|
||||
for(var/obj/item/briefcase_item in sec_briefcase)
|
||||
|
||||
@@ -4,24 +4,30 @@
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
head = /obj/item/clothing/head/beret/centcom/officer
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
glasses = /obj/item/clothing/glasses/omnihud/all
|
||||
id_type = /obj/item/card/id/centcom
|
||||
pda_type = /obj/item/pda/centcom
|
||||
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/job/emergency_responder
|
||||
name = OUTFIT_JOB_NAME("Emergency Responder")
|
||||
uniform = /obj/item/clothing/under/ert
|
||||
shoes = /obj/item/clothing/shoes/boots/swat
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
id_type = /obj/item/card/id/centcom/ERT
|
||||
pda_type = /obj/item/pda/centcom
|
||||
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/job/emergency_responder/post_equip(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
ert.add_antagonist(H.mind)
|
||||
|
||||
@@ -2,4 +2,6 @@
|
||||
name = "Military Uniform"
|
||||
hierarchy_type = /decl/hierarchy/outfit/military
|
||||
|
||||
l_ear = /obj/item/radio/headset
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
@@ -29,7 +29,6 @@
|
||||
/decl/hierarchy/outfit/soviet_soldier/admiral
|
||||
name = "Soviet admiral"
|
||||
head = /obj/item/clothing/head/hgpiratecap
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch
|
||||
suit = /obj/item/clothing/suit/hgpirate
|
||||
|
||||
@@ -37,10 +36,13 @@
|
||||
id_type = /obj/item/card/id/centcom //station
|
||||
id_pda_assignment = "Admiral"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
/decl/hierarchy/outfit/merchant
|
||||
name = "Merchant"
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/radio/headset
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
id_slot = slot_wear_id
|
||||
id_type = /obj/item/card/id/civilian //merchant
|
||||
@@ -48,6 +50,10 @@
|
||||
pda_type = /obj/item/pda/chef //cause I like the look
|
||||
id_pda_assignment = "Merchant"
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
|
||||
/decl/hierarchy/outfit/merchant/vox
|
||||
name = "Merchant - Vox"
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots/toeless
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
uniform = /obj/item/clothing/under/rank/centcom
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
l_ear = /obj/item/radio/headset/heads/hop
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
|
||||
id_slot = slot_wear_id
|
||||
@@ -11,6 +10,10 @@
|
||||
pda_slot = slot_r_store
|
||||
pda_type = /obj/item/pda/heads
|
||||
|
||||
headset = /obj/item/radio/headset/heads/hop
|
||||
headset_alt = /obj/item/radio/headset/heads/hop
|
||||
headset_earbud = /obj/item/radio/headset/heads/hop
|
||||
|
||||
/decl/hierarchy/outfit/nanotrasen/representative
|
||||
name = "Nanotrasen representative"
|
||||
belt = /obj/item/clipboard
|
||||
@@ -19,14 +22,20 @@
|
||||
/decl/hierarchy/outfit/nanotrasen/officer
|
||||
name = "Nanotrasen officer"
|
||||
head = /obj/item/clothing/head/beret/centcom/officer
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
belt = /obj/item/gun/energy
|
||||
id_pda_assignment = "NanoTrasen Navy Officer"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
/decl/hierarchy/outfit/nanotrasen/captain
|
||||
name = "Nanotrasen captain"
|
||||
uniform = /obj/item/clothing/under/rank/centcom_captain
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
head = /obj/item/clothing/head/beret/centcom/captain
|
||||
belt = /obj/item/gun/energy
|
||||
id_pda_assignment = "NanoTrasen Navy Captain"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
uniform = /obj/item/clothing/under/solgov/utility/army/urban
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
r_pocket = /obj/item/ammo_magazine/m95
|
||||
l_pocket = /obj/item/ammo_magazine/m95
|
||||
l_hand = /obj/item/ammo_magazine/m95
|
||||
@@ -15,6 +14,10 @@
|
||||
suit = /obj/item/clothing/suit/armor/combat/USDF
|
||||
belt = /obj/item/storage/belt/security/tactical
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/USDF/Marine/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s military ID Card"
|
||||
@@ -29,7 +32,6 @@
|
||||
name = "USDF officer"
|
||||
head = /obj/item/clothing/head/dress/army/command
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
uniform = /obj/item/clothing/under/solgov/mildress/army/command
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
belt = /obj/item/gun/projectile/revolver/consul
|
||||
@@ -38,6 +40,10 @@
|
||||
r_hand = /obj/item/clothing/accessory/holster/hip
|
||||
l_hand = /obj/item/clothing/accessory/tie/black
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/USDF/Officer/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s military ID Card"
|
||||
@@ -51,7 +57,6 @@
|
||||
/decl/hierarchy/outfit/solcom/representative
|
||||
name = "SolCom Representative"
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
uniform = /obj/item/clothing/under/suit_jacket/navy
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
l_pocket = /obj/item/pen/blue
|
||||
@@ -59,6 +64,10 @@
|
||||
r_hand = /obj/item/pda/centcom
|
||||
l_hand = /obj/item/clipboard
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/solcom/representative/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s SolCom ID Card"
|
||||
@@ -74,7 +83,6 @@
|
||||
head = /obj/item/clothing/head/helmet/combat/imperial
|
||||
shoes =/obj/item/clothing/shoes/leg_guard/combat/imperial
|
||||
gloves = /obj/item/clothing/gloves/arm_guard/combat/imperial
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
uniform = /obj/item/clothing/under/imperial
|
||||
mask = /obj/item/clothing/mask/gas/imperial
|
||||
suit = /obj/item/clothing/suit/armor/combat/imperial
|
||||
@@ -86,12 +94,15 @@
|
||||
l_hand = /obj/item/shield/energy/imperial
|
||||
suit_store = /obj/item/gun/energy/imperial
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/syndicate
|
||||
|
||||
/decl/hierarchy/outfit/imperial/officer
|
||||
name = "Imperial officer"
|
||||
head = /obj/item/clothing/head/helmet/combat/imperial/centurion
|
||||
shoes = /obj/item/clothing/shoes/leg_guard/combat/imperial
|
||||
gloves = /obj/item/clothing/gloves/arm_guard/combat/imperial
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
uniform = /obj/item/clothing/under/imperial
|
||||
mask = /obj/item/clothing/mask/gas/imperial
|
||||
suit = /obj/item/clothing/suit/armor/combat/imperial/centurion
|
||||
@@ -102,6 +113,10 @@
|
||||
l_hand = /obj/item/shield/energy/imperial
|
||||
suit_store = /obj/item/gun/energy/imperial
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/syndicate
|
||||
|
||||
/*
|
||||
SOUTHERN CROSS OUTFITS
|
||||
Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead goes in lockers. Keep this in mind if editing.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Special ops - Officer"
|
||||
uniform = /obj/item/clothing/under/syndicate/combat
|
||||
suit = /obj/item/clothing/suit/armor/swat/officer
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch
|
||||
mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
||||
head = /obj/item/clothing/head/beret //deathsquad
|
||||
@@ -16,6 +15,10 @@
|
||||
id_desc = "Special operations ID."
|
||||
id_pda_assignment = "Special Operations Officer"
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/spec_op_officer/space
|
||||
name = "Special ops - Officer in space"
|
||||
suit = /obj/item/clothing/suit/armor/swat //obj/item/clothing/suit/space/void/swat
|
||||
@@ -29,7 +32,6 @@
|
||||
uniform = /obj/item/clothing/under/ert
|
||||
shoes = /obj/item/clothing/shoes/boots/swat
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
belt = /obj/item/gun/energy/gun
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
@@ -37,6 +39,10 @@
|
||||
id_slot = slot_wear_id
|
||||
id_type = /obj/item/card/id/centcom/ERT
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/death_command
|
||||
name = "Spec ops - Death commando"
|
||||
|
||||
@@ -55,7 +61,6 @@
|
||||
name = "Spec ops - Mercenary"
|
||||
uniform = /obj/item/clothing/under/syndicate
|
||||
shoes = /obj/item/clothing/shoes/boots/combat
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
belt = /obj/item/storage/belt/security
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
@@ -66,4 +71,8 @@
|
||||
id_type = /obj/item/card/id/syndicate
|
||||
id_pda_assignment = "Mercenary"
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/alt/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/earbud/syndicate
|
||||
|
||||
flags = OUTFIT_HAS_BACKPACK
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/decl/hierarchy/outfit/wizard
|
||||
uniform = /obj/item/clothing/under/color/lightpurple
|
||||
shoes = /obj/item/clothing/shoes/sandal
|
||||
l_ear = /obj/item/radio/headset
|
||||
r_pocket = /obj/item/teleportation_scroll
|
||||
l_hand = /obj/item/staff
|
||||
r_hand = /obj/item/spellbook
|
||||
@@ -9,6 +8,10 @@
|
||||
backpack_contents = list(/obj/item/storage/box = 1)
|
||||
hierarchy_type = /decl/hierarchy/outfit/wizard
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
|
||||
/decl/hierarchy/outfit/wizard/blue
|
||||
name = "Wizard - Blue"
|
||||
head = /obj/item/clothing/head/wizard
|
||||
|
||||
@@ -95,6 +95,13 @@
|
||||
containername = "Chicken crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_pack/hydro/turkey
|
||||
name = "Turkey crate"
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/animal/turkey
|
||||
containername = "Turkey crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_pack/hydro/seeds
|
||||
name = "Seeds crate"
|
||||
contains = list(
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
///like normal callbacks but they also record their creation time for measurement purposes
|
||||
///they also require the same usr/user that made the callback to both still exist and to still have a client in order to execute
|
||||
/datum/callback/verb_callback
|
||||
///the tick this callback datum was created in. used for testing latency
|
||||
var/creation_time = 0
|
||||
|
||||
/datum/callback/verb_callback/New(thingtocall, proctocall, ...)
|
||||
creation_time = DS2TICKS(world.time)
|
||||
. = ..()
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
/datum/callback/verb_callback/Invoke(...)
|
||||
var/mob/our_user = user?.resolve()
|
||||
if(QDELETED(our_user) || isnull(our_user.client))
|
||||
return
|
||||
var/mob/temp = usr
|
||||
. = ..()
|
||||
usr = temp
|
||||
|
||||
/datum/callback/verb_callback/InvokeAsync(...)
|
||||
var/mob/our_user = user?.resolve()
|
||||
if(QDELETED(our_user) || isnull(our_user.client))
|
||||
return
|
||||
var/mob/temp = usr
|
||||
. = ..()
|
||||
usr = temp
|
||||
#endif
|
||||
+11
-12
@@ -153,24 +153,23 @@
|
||||
data["status"] = status
|
||||
return data
|
||||
|
||||
/datum/wires/tgui_act(action, list/params)
|
||||
/datum/wires/tgui_act(action, list/params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
var/mob/user = usr
|
||||
if(!interactable(user))
|
||||
if(!interactable(ui.user))
|
||||
return
|
||||
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
var/obj/item/I = ui.user.get_active_hand()
|
||||
var/color = lowertext(params["wire"])
|
||||
holder.add_hiddenprint(user)
|
||||
holder.add_hiddenprint(ui.user)
|
||||
|
||||
switch(action)
|
||||
// Toggles the cut/mend status.
|
||||
if("cut")
|
||||
// if(!I.has_tool_quality(TOOL_WIRECUTTER) && !user.can_admin_interact())
|
||||
if(!istype(I) || !I.has_tool_quality(TOOL_WIRECUTTER))
|
||||
to_chat(user, span_warning("You need wirecutters!"))
|
||||
to_chat(ui.user, span_warning("You need wirecutters!"))
|
||||
return
|
||||
|
||||
playsound(holder, I.usesound, 20, 1)
|
||||
@@ -181,7 +180,7 @@
|
||||
if("pulse")
|
||||
// if(!I.has_tool_quality(TOOL_MULTITOOL) && !user.can_admin_interact())
|
||||
if(!istype(I) || !I.has_tool_quality(TOOL_MULTITOOL))
|
||||
to_chat(user, span_warning("You need a multitool!"))
|
||||
to_chat(ui.user, span_warning("You need a multitool!"))
|
||||
return
|
||||
|
||||
playsound(holder, 'sound/weapons/empty.ogg', 20, 1)
|
||||
@@ -189,7 +188,7 @@
|
||||
|
||||
// If they pulse the electrify wire, call interactable() and try to shock them.
|
||||
if(get_wire(color) == WIRE_ELECTRIFY)
|
||||
interactable(user)
|
||||
interactable(ui.user)
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -198,18 +197,18 @@
|
||||
if(is_attached(color))
|
||||
var/obj/item/O = detach_assembly(color)
|
||||
if(O)
|
||||
user.put_in_hands(O)
|
||||
ui.user.put_in_hands(O)
|
||||
return TRUE
|
||||
|
||||
if(!istype(I, /obj/item/assembly/signaler))
|
||||
to_chat(user, span_warning("You need a remote signaller!"))
|
||||
to_chat(ui.user, span_warning("You need a remote signaller!"))
|
||||
return
|
||||
|
||||
if(user.unEquip(I))
|
||||
if(ui.user.unEquip(I))
|
||||
attach_assembly(color, I)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, span_warning("[I] is stuck to your hand!"))
|
||||
to_chat(ui.user, span_warning("[I] is stuck to your hand!"))
|
||||
|
||||
/**
|
||||
* Proc called to determine if the user can see wire define information, such as "Contraband", "Door Bolts", etc.
|
||||
|
||||
Reference in New Issue
Block a user