mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 02:57:48 +01:00
Merge branch 'master' into hook-kill-v10-final-ultimate-final
This commit is contained in:
@@ -292,7 +292,7 @@
|
||||
if(!reactor.has_overloaded)
|
||||
reactor.overload(containment_failure)
|
||||
else
|
||||
log_debug("Depot: [src] called activate_self_destruct with no reactor.");
|
||||
log_debug("Depot: [src] called activate_self_destruct with no reactor.")
|
||||
message_admins("<span class='adminnotice'>Syndicate Depot lacks reactor to initiate self-destruct. Must be destroyed manually.</span>")
|
||||
updateicon()
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
loc.handle_atom_del(src)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
LAZYCLEARLIST(client_mobs_in_contents)
|
||||
loc = null
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
|
||||
@@ -118,17 +118,15 @@
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
eject_occupant()
|
||||
|
||||
eject_occupant(usr)
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/dna_scannernew/Destroy()
|
||||
eject_occupant()
|
||||
eject_occupant(null, TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/eject_occupant()
|
||||
go_out()
|
||||
/obj/machinery/dna_scannernew/proc/eject_occupant(user, force)
|
||||
go_out(user, force)
|
||||
for(var/obj/O in src)
|
||||
if(!istype(O,/obj/item/circuitboard/clonescanner) && \
|
||||
!istype(O,/obj/item/stock_parts) && \
|
||||
@@ -271,15 +269,15 @@
|
||||
|
||||
occupant.notify_ghost_cloning(source = src)
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/go_out()
|
||||
/obj/machinery/dna_scannernew/proc/go_out(mob/user, force)
|
||||
if(!occupant)
|
||||
to_chat(usr, "<span class='warning'>The scanner is empty!</span>")
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The scanner is empty!</span>")
|
||||
return
|
||||
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>The scanner is locked!</span>")
|
||||
if(locked && !force)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The scanner is locked!</span>")
|
||||
return
|
||||
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
icon_state = "scanner_open"
|
||||
@@ -489,7 +487,7 @@
|
||||
occupantData["uniqueIdentity"] = connected.occupant.dna.uni_identity
|
||||
occupantData["structuralEnzymes"] = connected.occupant.dna.struc_enzymes
|
||||
occupantData["radiationLevel"] = connected.occupant.radiation
|
||||
data["occupant"] = occupantData;
|
||||
data["occupant"] = occupantData
|
||||
|
||||
data["isBeakerLoaded"] = connected.beaker ? 1 : 0
|
||||
data["beakerLabel"] = null
|
||||
@@ -751,7 +749,7 @@
|
||||
return TRUE
|
||||
|
||||
if(href_list["ejectOccupant"])
|
||||
connected.eject_occupant()
|
||||
connected.eject_occupant(usr)
|
||||
return TRUE
|
||||
|
||||
// Transfer Buffer Management
|
||||
|
||||
@@ -46,7 +46,6 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
var/datum/mind/blob = pick(possible_blobs)
|
||||
infected_crew += blob
|
||||
blob.special_role = SPECIAL_ROLE_BLOB
|
||||
update_blob_icons_added(blob)
|
||||
blob.restricted_roles = restricted_jobs
|
||||
log_game("[key_name(blob)] has been selected as a Blob")
|
||||
possible_blobs -= blob
|
||||
@@ -152,6 +151,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
greet_blob(blob)
|
||||
update_blob_icons_added(blob)
|
||||
|
||||
if(SSshuttle)
|
||||
SSshuttle.emergencyNoEscape = 1
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life()
|
||||
..()
|
||||
var/obj/item/organ/internal/eyes/E = owner.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(owner.eye_blind || owner.eye_blurry || (BLINDNESS in owner.mutations) || (NEARSIGHTED in owner.mutations) || (E.damage > 0))
|
||||
if(owner.eye_blind || owner.eye_blurry || (BLINDNESS in owner.mutations) || (NEARSIGHTED in owner.mutations) || (E && E.damage > 0))
|
||||
owner.reagents.add_reagent("oculine", 1)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat()
|
||||
|
||||
@@ -363,6 +363,10 @@
|
||||
to_chat(S, "<span class='warning'>This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/structure/spacepoddoor/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting this energy field would overload us. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
var/isonshuttle = istype(loc, /area/shuttle)
|
||||
for(var/turf/T in range(1, src))
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(loc == summoner)
|
||||
if(toggle)
|
||||
a_intent = INTENT_HARM
|
||||
hud_used.action_intent.icon_state = a_intent;
|
||||
hud_used.action_intent.icon_state = a_intent
|
||||
speed = 0
|
||||
damage_transfer = 0.7
|
||||
if(adminseal)
|
||||
@@ -76,7 +76,7 @@
|
||||
toggle = FALSE
|
||||
else
|
||||
a_intent = INTENT_HELP
|
||||
hud_used.action_intent.icon_state = a_intent;
|
||||
hud_used.action_intent.icon_state = a_intent
|
||||
speed = 1
|
||||
damage_transfer = 1
|
||||
if(adminseal)
|
||||
|
||||
@@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
/datum/objective/assassinate/check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 1
|
||||
if(issilicon(target.current) || isbrain(target.current)) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
|
||||
return 1
|
||||
@@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
/datum/objective/maroon/check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 1
|
||||
if(!target.current.ckey)
|
||||
return 1
|
||||
@@ -168,7 +168,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
if(!target) //If it's a free objective.
|
||||
return 1
|
||||
if(target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 0
|
||||
if(issilicon(target.current))
|
||||
return 0
|
||||
@@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return 0
|
||||
if(isbrain(owner.current))
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == DEAD || iszombie(owner))
|
||||
if(!owner.current || owner.current.stat == DEAD)
|
||||
return 0
|
||||
if(SSticker.force_ending) //This one isn't their fault, so lets just assume good faith
|
||||
return 1
|
||||
@@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Die a glorious death."
|
||||
|
||||
/datum/objective/die/check_completion()
|
||||
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current) || iszombie(owner))
|
||||
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
|
||||
return 1
|
||||
if(issilicon(owner.current) && owner.current != owner.original)
|
||||
return 1
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
/datum/controller/subsystem/ticker/proc/scoreboard()
|
||||
|
||||
//Thresholds for Score Ratings
|
||||
#define SINGULARITY_DESERVES_BETTER -3500
|
||||
#define SINGULARITY_FODDER -3000
|
||||
#define ALL_FIRED -2500
|
||||
#define WASTE_OF_OXYGEN -2000
|
||||
#define HEAP_OF_SCUM -1500
|
||||
#define LAB_MONKEYS -1000
|
||||
#define UNDESIREABLES -500
|
||||
#define SERVANTS_OF_SCIENCE 500
|
||||
#define GOOD_BUNCH 1000
|
||||
#define MACHINE_THIRTEEN 1500
|
||||
#define PROMOTIONS_FOR_EVERYONE 2000
|
||||
#define AMBASSADORS_OF_DISCOVERY 3000
|
||||
#define PRIDE_OF_SCIENCE 4000
|
||||
#define NANOTRANSEN_FINEST 5000
|
||||
|
||||
//Print a list of antagonists to the server log
|
||||
var/list/total_antagonists = list()
|
||||
//Look into all mobs in world, dead or alive
|
||||
@@ -93,15 +109,14 @@
|
||||
|
||||
|
||||
// Bonus Modifiers
|
||||
//var/traitorwins = score_traitorswon
|
||||
var/deathpoints = GLOB.score_deadcrew * 25 //done
|
||||
var/researchpoints = GLOB.score_researchdone * 30
|
||||
var/eventpoints = GLOB.score_eventsendured * 50
|
||||
var/escapoints = GLOB.score_escapees * 25 //done
|
||||
var/harvests = GLOB.score_stuffharvested * 5 //done
|
||||
var/harvests = GLOB.score_stuffharvested * 5
|
||||
var/shipping = GLOB.score_stuffshipped * 5
|
||||
var/mining = GLOB.score_oremined * 2 //done
|
||||
var/meals = GLOB.score_meals * 5 //done, but this only counts cooked meals, not drinks served
|
||||
var/mining = GLOB.score_oremined * 2 //done, might want polishing
|
||||
var/meals = GLOB.score_meals * 5
|
||||
var/power = GLOB.score_powerloss * 20
|
||||
var/messpoints
|
||||
if(GLOB.score_mess != 0)
|
||||
@@ -121,13 +136,9 @@
|
||||
GLOB.score_crewscore += 2500
|
||||
GLOB.score_powerbonus = 1
|
||||
|
||||
if(GLOB.score_mess == 0)
|
||||
GLOB.score_crewscore += 3000
|
||||
GLOB.score_messbonus = 1
|
||||
|
||||
|
||||
GLOB.score_crewscore += meals
|
||||
if(GLOB.score_allarrested)
|
||||
if(GLOB.score_allarrested) // This only seems to be implemented for Rev and Nukies. -DaveKorhal
|
||||
GLOB.score_crewscore *= 3 // This needs to be here for the bonus to be applied properly
|
||||
|
||||
|
||||
@@ -177,26 +188,19 @@
|
||||
|
||||
dat += {"
|
||||
<b><u>General Statistics</u></b><br>
|
||||
<u>The Good:</u><br>
|
||||
|
||||
<b>Useful Items Shipped:</b> [GLOB.score_stuffshipped] ([GLOB.score_stuffshipped * 5] Points)<br>
|
||||
<b>Hydroponics Harvests:</b> [GLOB.score_stuffharvested] ([GLOB.score_stuffharvested * 5] Points)<br>
|
||||
<b>Ore Mined:</b> [GLOB.score_oremined] ([GLOB.score_oremined * 2] Points)<br>
|
||||
<b>Refreshments Prepared:</b> [GLOB.score_meals] ([GLOB.score_meals * 5] Points)<br>
|
||||
<b>Research Completed:</b> [GLOB.score_researchdone] ([GLOB.score_researchdone * 30] Points)<br>"}
|
||||
<u>The Good</u><br>
|
||||
<b>Ore Mined:</b> [GLOB.score_oremined] ([GLOB.score_oremined * 2] Points)<br>"}
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_ENDGAME) dat += "<b>Shuttle Escapees:</b> [GLOB.score_escapees] ([GLOB.score_escapees * 25] Points)<br>"
|
||||
dat += {"<b>Random Events Endured:</b> [GLOB.score_eventsendured] ([GLOB.score_eventsendured * 50] Points)<br>
|
||||
<b>Whole Station Powered:</b> [GLOB.score_powerbonus ? "Yes" : "No"] ([GLOB.score_powerbonus * 2500] Points)<br>
|
||||
<b>Ultra-Clean Station:</b> [GLOB.score_mess ? "No" : "Yes"] ([GLOB.score_messbonus * 3000] Points)<br><br>
|
||||
<U>The bad:</U><br>
|
||||
dat += {"
|
||||
<b>Whole Station Powered:</b> [GLOB.score_powerbonus ? "Yes" : "No"] ([GLOB.score_powerbonus * 2500] Points)<br><br>
|
||||
|
||||
<U>The Bad</U><br>
|
||||
<b>Dead bodies on Station:</b> [GLOB.score_deadcrew] (-[GLOB.score_deadcrew * 25] Points)<br>
|
||||
<b>Uncleaned Messes:</b> [GLOB.score_mess] (-[GLOB.score_mess] Points)<br>
|
||||
<b>Station Power Issues:</b> [GLOB.score_powerloss] (-[GLOB.score_powerloss * 20] Points)<br>
|
||||
<b>Rampant Diseases:</b> [GLOB.score_disease] (-[GLOB.score_disease * 30] Points)<br>
|
||||
<b>AI Destroyed:</b> [GLOB.score_deadaipenalty ? "Yes" : "No"] (-[GLOB.score_deadaipenalty * 250] Points)<br><br>
|
||||
<U>The Weird</U><br>
|
||||
|
||||
<U>The Weird</U><br>
|
||||
<b>Food Eaten:</b> [GLOB.score_foodeaten] bites/sips<br>
|
||||
<b>Times a Clown was Abused:</b> [GLOB.score_clownabuse]<br><br>
|
||||
"}
|
||||
@@ -218,22 +222,36 @@
|
||||
|
||||
var/score_rating = "The Aristocrats!"
|
||||
switch(GLOB.score_crewscore)
|
||||
if(-99999 to -50000) score_rating = "Even the Singularity Deserves Better"
|
||||
if(-49999 to -5000) score_rating = "Singularity Fodder"
|
||||
if(-4999 to -1000) score_rating = "You're All Fired"
|
||||
if(-999 to -500) score_rating = "A Waste of Perfectly Good Oxygen"
|
||||
if(-499 to -250) score_rating = "A Wretched Heap of Scum and Incompetence"
|
||||
if(-249 to -100) score_rating = "Outclassed by Lab Monkeys"
|
||||
if(-99 to -21) score_rating = "The Undesirables"
|
||||
if(-20 to 20) score_rating = "Ambivalently Average"
|
||||
if(21 to 99) score_rating = "Not Bad, but Not Good"
|
||||
if(100 to 249) score_rating = "Skillful Servants of Science"
|
||||
if(250 to 499) score_rating = "Best of a Good Bunch"
|
||||
if(500 to 999) score_rating = "Lean Mean Machine Thirteen"
|
||||
if(1000 to 4999) score_rating = "Promotions for Everyone"
|
||||
if(5000 to 9999) score_rating = "Ambassadors of Discovery"
|
||||
if(10000 to 49999) score_rating = "The Pride of Science Itself"
|
||||
if(50000 to INFINITY) score_rating = "Nanotrasen's Finest"
|
||||
if(-99999 to SINGULARITY_DESERVES_BETTER) score_rating = "Even the Singularity Deserves Better"
|
||||
if(SINGULARITY_DESERVES_BETTER+1 to SINGULARITY_FODDER) score_rating = "Singularity Fodder"
|
||||
if(SINGULARITY_FODDER+1 to ALL_FIRED) score_rating = "You're All Fired"
|
||||
if(ALL_FIRED+1 to WASTE_OF_OXYGEN) score_rating = "A Waste of Perfectly Good Oxygen"
|
||||
if(WASTE_OF_OXYGEN+1 to HEAP_OF_SCUM) score_rating = "A Wretched Heap of Scum and Incompetence"
|
||||
if(HEAP_OF_SCUM+1 to LAB_MONKEYS) score_rating = "Outclassed by Lab Monkeys"
|
||||
if(LAB_MONKEYS+1 to UNDESIREABLES) score_rating = "The Undesirables"
|
||||
if(UNDESIREABLES+1 to SERVANTS_OF_SCIENCE-1) score_rating = "Ambivalently Average"
|
||||
if(SERVANTS_OF_SCIENCE to GOOD_BUNCH-1) score_rating = "Skillful Servants of Science"
|
||||
if(GOOD_BUNCH to MACHINE_THIRTEEN-1) score_rating = "Best of a Good Bunch"
|
||||
if(MACHINE_THIRTEEN to PROMOTIONS_FOR_EVERYONE-1) score_rating = "Lean Mean Machine Thirteen"
|
||||
if(PROMOTIONS_FOR_EVERYONE to AMBASSADORS_OF_DISCOVERY-1) score_rating = "Promotions for Everyone"
|
||||
if(AMBASSADORS_OF_DISCOVERY to PRIDE_OF_SCIENCE-1) score_rating = "Ambassadors of Discovery"
|
||||
if(PRIDE_OF_SCIENCE to NANOTRANSEN_FINEST-1) score_rating = "The Pride of Science Itself"
|
||||
if(NANOTRANSEN_FINEST to INFINITY) score_rating = "Nanotrasen's Finest"
|
||||
|
||||
dat += "<b><u>RATING:</u></b> [score_rating]"
|
||||
src << browse(dat, "window=roundstats;size=500x600")
|
||||
|
||||
#undef SINGULARITY_DESERVES_BETTER
|
||||
#undef SINGULARITY_FODDER
|
||||
#undef ALL_FIRED
|
||||
#undef WASTE_OF_OXYGEN
|
||||
#undef HEAP_OF_SCUM
|
||||
#undef LAB_MONKEYS
|
||||
#undef UNDESIREABLES
|
||||
#undef SERVANTS_OF_SCIENCE
|
||||
#undef GOOD_BUNCH
|
||||
#undef MACHINE_THIRTEEN
|
||||
#undef PROMOTIONS_FOR_EVERYONE
|
||||
#undef AMBASSADORS_OF_DISCOVERY
|
||||
#undef PRIDE_OF_SCIENCE
|
||||
#undef NANOTRANSEN_FINEST
|
||||
|
||||
@@ -153,6 +153,9 @@
|
||||
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
|
||||
state = SCREWED_CORE
|
||||
if(GLASS_CORE)
|
||||
var/area/R = get_area(src)
|
||||
message_admins("[key_name_admin(usr)] has completed an AI core in [R]: [ADMIN_COORDJMP(loc)].")
|
||||
log_game("[key_name(usr)] has completed an AI core in [R]: [COORD(loc)].")
|
||||
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
|
||||
if(!brain)
|
||||
var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes"
|
||||
|
||||
@@ -52,7 +52,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
|
||||
//This is used to keep track of opened positions for jobs to allow instant closing
|
||||
//Assoc array: "JobName" = (int)<Opened Positions>
|
||||
var/list/opened_positions = list();
|
||||
var/list/opened_positions = list()
|
||||
|
||||
/obj/machinery/computer/card/proc/is_centcom()
|
||||
return istype(src, /obj/machinery/computer/card/centcom)
|
||||
|
||||
@@ -424,8 +424,6 @@
|
||||
else
|
||||
return menu_state
|
||||
|
||||
/proc/enable_prison_shuttle(var/mob/user);
|
||||
|
||||
/proc/call_shuttle_proc(var/mob/user, var/reason)
|
||||
if(GLOB.sent_strike_team == 1)
|
||||
to_chat(user, "<span class='warning'>Central Command will not allow the shuttle to be called. Consider all contracts terminated.</span>")
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
occupantData["toxLoss"] = occupant.getToxLoss()
|
||||
occupantData["fireLoss"] = occupant.getFireLoss()
|
||||
occupantData["bodyTemperature"] = occupant.bodytemperature
|
||||
data["occupant"] = occupantData;
|
||||
data["occupant"] = occupantData
|
||||
|
||||
data["cellTemperature"] = round(air_contents.temperature)
|
||||
data["cellTemperatureStatus"] = "good"
|
||||
|
||||
@@ -192,10 +192,10 @@ About the new airlock wires panel:
|
||||
return wires.IsIndexCut(wireIndex)
|
||||
|
||||
/obj/machinery/door/airlock/proc/canAIControl()
|
||||
return ((aiControlDisabled!=1) && (!isAllPowerLoss()));
|
||||
return ((aiControlDisabled!=1) && (!isAllPowerLoss()))
|
||||
|
||||
/obj/machinery/door/airlock/proc/canAIHack()
|
||||
return ((aiControlDisabled==1) && (!hackProof) && (!isAllPowerLoss()));
|
||||
return ((aiControlDisabled==1) && (!hackProof) && (!isAllPowerLoss()))
|
||||
|
||||
/obj/machinery/door/airlock/proc/arePowerSystemsOn()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
|
||||
@@ -195,7 +195,7 @@ GLOBAL_LIST_EMPTY(holopads)
|
||||
for(var/mob/living/silicon/ai/AI in GLOB.ai_list)
|
||||
if(!AI.client)
|
||||
continue
|
||||
to_chat(AI, "<span class='info'>Your presence is requested at <a href='?src=\ref[AI];jumptoholopad=[UID()]'>\the [area]</a>.</span>")
|
||||
to_chat(AI, "<span class='info'>Your presence is requested at <a href='?src=[AI.UID()];jumptoholopad=[UID()]'>\the [area]</a>.</span>")
|
||||
else
|
||||
temp = "A request for AI presence was already sent recently.<br>"
|
||||
temp += "<a href='?src=[UID()];mainmenu=1'>Main Menu</a>"
|
||||
|
||||
@@ -59,7 +59,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
|
||||
var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements
|
||||
var/msgVerified = "" //Will contain the name of the person who varified it
|
||||
var/msgStamped = "" //If a message is stamped, this will contain the stamp name
|
||||
var/message = "";
|
||||
var/message = ""
|
||||
var/recipient = ""; //the department which will be receiving the message
|
||||
var/priority = -1 ; //Priority of the message being sent
|
||||
light_range = 0
|
||||
|
||||
@@ -20,6 +20,12 @@
|
||||
account = null
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/slot_machine/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
default_unfasten_wrench(user, I)
|
||||
|
||||
/obj/machinery/slot_machine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
|
||||
@@ -77,11 +77,10 @@
|
||||
update_icon()
|
||||
try_detonate(TRUE)
|
||||
//Counter terrorists win
|
||||
else if(!active || defused)
|
||||
if(defused && (payload in src))
|
||||
else if(defused)
|
||||
active = FALSE
|
||||
if(payload in src)
|
||||
payload.defuse()
|
||||
countdown.stop()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/machinery/syndicatebomb/New()
|
||||
wires = new(src)
|
||||
|
||||
@@ -306,7 +306,7 @@ GLOBAL_LIST_EMPTY(tcomms_machines)
|
||||
if(is_admin(R) && !R.get_preference(CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
|
||||
continue
|
||||
|
||||
if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
|
||||
if(isnewplayer(R)) // we don't want new players to hear messages. rare but generates runtimes.
|
||||
continue
|
||||
|
||||
// --- Can understand the speech ---
|
||||
|
||||
@@ -1134,7 +1134,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/foamedmetal/attack_alien(mob/living/carbon/alien/humanoid/M)
|
||||
M.visible_message("<span class='danger'>[M] tears apart \the [src]!</span>");
|
||||
M.visible_message("<span class='danger'>[M] tears apart \the [src]!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if(..())
|
||||
return
|
||||
if(!R.allow_rename)
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>");
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>")
|
||||
return 0
|
||||
R.notify_ai(3, R.name, heldname)
|
||||
R.name = heldname
|
||||
@@ -196,7 +196,7 @@
|
||||
if(R.emagged)
|
||||
return
|
||||
if(R.weapons_unlock)
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>");
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>")
|
||||
return
|
||||
R.emagged = 1
|
||||
return TRUE
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
if(amount < 1) // Just in case a stack's amount ends up fractional somehow
|
||||
var/oldsrc = src
|
||||
src = null //dont kill proc after del()
|
||||
src = null //dont kill proc after qdel()
|
||||
usr.unEquip(oldsrc, 1)
|
||||
qdel(oldsrc)
|
||||
if(istype(O, /obj/item))
|
||||
|
||||
@@ -31,6 +31,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
var/smoketime = 150
|
||||
var/chem_volume = 60
|
||||
var/list/list_reagents = list("nicotine" = 40)
|
||||
var/first_puff = TRUE // the first puff is a bit more reagents ingested
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
@@ -194,8 +195,9 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
if(is_being_smoked) // if it's being smoked, transfer reagents to the mob
|
||||
var/mob/living/carbon/C = loc
|
||||
for (var/datum/reagent/R in reagents.reagent_list)
|
||||
reagents.trans_id_to(C, R.id, max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
reagents.trans_id_to(C, R.id, first_puff ? 1 : max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem
|
||||
first_puff = FALSE
|
||||
if(!reagents.total_volume) // There were reagents, but now they're gone
|
||||
to_chat(C, "<span class='notice'>Your [name] loses its flavor.</span>")
|
||||
else // else just remove some of the reagents
|
||||
@@ -377,6 +379,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
to_chat(user, "<span class='notice'>You refill the pipe with tobacco.</span>")
|
||||
reagents.add_reagent("nicotine", chem_volume)
|
||||
smoketime = initial(smoketime)
|
||||
first_puff = TRUE
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers))
|
||||
|
||||
@@ -121,19 +121,6 @@
|
||||
desc = "A sleek, sturdy box"
|
||||
icon_state = "box_of_doom"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/romerol
|
||||
name = "Romerol Kit"
|
||||
desc = "A box containing a deadly virus capable of reanimating dead as zombies."
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
can_hold = list(/obj/item/reagent_containers/glass/bottle/romerol,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/dropper)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/romerol/New()
|
||||
..()
|
||||
new /obj/item/reagent_containers/glass/bottle/romerol(src)
|
||||
new /obj/item/reagent_containers/syringe(src)
|
||||
new /obj/item/reagent_containers/dropper(src)
|
||||
return
|
||||
|
||||
/obj/item/storage/box/syndie_kit/space
|
||||
name = "Boxed Space Suit and Helmet"
|
||||
can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/item/tank/emergency_oxygen/syndi, /obj/item/clothing/mask/gas/syndicate)
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/closet/attack_ai(mob/user)
|
||||
if(isrobot(user) && Adjacent(user)) //Robots can open/close it, but not the AI
|
||||
if(isrobot(user) && Adjacent(user) && !istype(user.loc, /obj/machinery/atmospherics)) //Robots can open/close it, but not the AI
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/closet/relaymove(mob/user)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
food_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
break
|
||||
if(!success)
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/reagent_containers/food/drinks))
|
||||
@@ -51,7 +51,7 @@
|
||||
drink_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
break
|
||||
if(!success)
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
entry += " - <font color='gray'>Observing</font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
else if(istype(C.mob, /mob/new_player))
|
||||
else if(isnewplayer(C.mob))
|
||||
entry += " - <font color='green'>New Player</font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
if(isobserver(C.mob))
|
||||
msg += " - Observing"
|
||||
else if(istype(C.mob,/mob/new_player))
|
||||
else if(isnewplayer(C.mob))
|
||||
msg += " - Lobby"
|
||||
else
|
||||
msg += " - Playing"
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
if(isobserver(C.mob))
|
||||
modmsg += " - Observing"
|
||||
else if(istype(C.mob,/mob/new_player))
|
||||
else if(isnewplayer(C.mob))
|
||||
modmsg += " - Lobby"
|
||||
else
|
||||
modmsg += " - Playing"
|
||||
|
||||
+1
-1
@@ -242,7 +242,7 @@ GLOBAL_VAR_INIT(world_topic_spam_protect_time, world.timeofday)
|
||||
if(!C)
|
||||
return "No client with that name on server"
|
||||
|
||||
del(C)
|
||||
qdel(C)
|
||||
|
||||
return "Kick Successful"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user