mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge remote-tracking branch 'upstream/master' into dev-freeze
Conflicts: code/game/objects/structures/crates_lockers/largecrate.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/silicon/ai/ai.dm code/modules/research/circuitprinter.dm
This commit is contained in:
@@ -163,13 +163,12 @@
|
||||
|
||||
command_announcement.Announce(fulltext)
|
||||
|
||||
// Proc: get_unhacked_apcs()
|
||||
// Proc: get_all_apcs()
|
||||
// Parameters: None
|
||||
// Description: Returns a list of APCs that are not yet hacked.
|
||||
/proc/get_unhacked_apcs()
|
||||
// Description: Returns a list of all APCs
|
||||
/proc/get_all_apcs()
|
||||
var/list/H = list()
|
||||
for(var/obj/machinery/power/apc/A in machines)
|
||||
if(!A.hacker)
|
||||
H.Add(A)
|
||||
return H
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
// END RESEARCH DATUMS
|
||||
// BEGIN ABILITY VERBS
|
||||
|
||||
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs())
|
||||
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_all_apcs())
|
||||
set category = "Software"
|
||||
set name = "Basic Encryption Hack"
|
||||
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."
|
||||
|
||||
@@ -14,6 +14,7 @@ var/global/list/cached_icons = list()
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(10,20,30,60)
|
||||
volume = 60
|
||||
unacidable = 0
|
||||
flags = OPENCONTAINER
|
||||
var/paint_type = "red"
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
new /obj/item/stack/material/wood(src)
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/AM in contents)
|
||||
if(AM.simulated) AM.loc = T
|
||||
if(AM.simulated) AM.forceMove(T)
|
||||
user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \
|
||||
"<span class='notice'>You pry open \the [src].</span>", \
|
||||
"<span class='notice'>You hear splitting wood.</span>")
|
||||
|
||||
@@ -401,7 +401,9 @@ var/list/admin_verbs_mentor = list(
|
||||
var/mob/body = mob
|
||||
var/mob/dead/observer/ghost = body.ghostize(1)
|
||||
ghost.admin_ghosted = 1
|
||||
if(body && !body.key)
|
||||
if(body)
|
||||
body.aghosted = ghost
|
||||
if(!body.key)
|
||||
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
||||
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
volume = 5
|
||||
can_be_placed_into = null
|
||||
flags = OPENCONTAINER | NOBLUDGEON
|
||||
unacidable = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
|
||||
return
|
||||
|
||||
@@ -216,6 +216,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
return
|
||||
mind.current.ajourn=0
|
||||
mind.current.key = key
|
||||
mind.current.aghosted = null
|
||||
if(!admin_ghosted)
|
||||
announce_ghost_joinleave(mind, 0, "They now occupy their body again.")
|
||||
return 1
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
if(L == default_language)
|
||||
dat += "<b>[L.name] (:[L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
|
||||
else
|
||||
dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||
dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||
|
||||
src << browse(dat, "window=checklanguage")
|
||||
|
||||
@@ -191,8 +191,8 @@
|
||||
if(href_list["default_lang"] == "reset")
|
||||
set_default_language(null)
|
||||
else
|
||||
var/datum/language/L = all_languages[href_list["default_lang"]]
|
||||
if(L)
|
||||
var/datum/language/L = locate(href_list["default_lang"])
|
||||
if(L && (L in languages))
|
||||
set_default_language(L)
|
||||
check_languages()
|
||||
return 1
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
var/show_ssd
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(istype(H)) show_ssd = H.species.show_ssd
|
||||
if(show_ssd && (!client || !key || player_logged))
|
||||
if(show_ssd && !client && !aghosted)
|
||||
M.visible_message("<span class='notice'>[M] shakes [src] trying to wake [t_him] up!</span>", \
|
||||
"<span class='notice'>You shake [src], but they do not respond... Maybe they have S.S.D?</span>")
|
||||
else if(lying || src.sleeping)
|
||||
|
||||
@@ -918,6 +918,9 @@
|
||||
if(sleeping < 2 && species.show_ssd && (!client || !key || player_logged))
|
||||
sleeping = 2
|
||||
|
||||
//SSD check, if a logged player is awake put them back to sleep!
|
||||
if(species.show_ssd && !client && !aghosted)
|
||||
Sleeping(2)
|
||||
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
|
||||
blinded = 1
|
||||
silent = 0
|
||||
|
||||
@@ -5,6 +5,5 @@
|
||||
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
|
||||
mind.active = 1 //indicates that the mind is currently synced with a client
|
||||
//If they're SSD, remove it so they can wake back up.
|
||||
player_logged = 0
|
||||
update_antag_icons(mind)
|
||||
return .
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/mob/living/Logout()
|
||||
..()
|
||||
if (mind)
|
||||
if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts.
|
||||
//Per BYOND docs key remains set if the player DCs, becomes null if switching bodies.
|
||||
if(!key) //key and mind have become seperated.
|
||||
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
|
||||
//This tags a player as SSD. See appropriate life.dm files for furthering SSD effects such as falling asleep.
|
||||
if(mind.active)
|
||||
player_logged = 1
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if(L == default_language)
|
||||
default_str = " - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a>"
|
||||
else
|
||||
default_str = " - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a>"
|
||||
default_str = " - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a>"
|
||||
|
||||
var/synth = (L in speech_synthesizer_langs)
|
||||
dat += "<b>[L.name] (:[L.key])</b>[synth ? default_str : null]<br/>Speech Synthesizer: <i>[synth ? "YES" : "NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>"
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
|
||||
var/stance_damage = 0 //Whether this mob's ability to stand has been affected
|
||||
|
||||
//SSD var, changed it up some so people can have special things happen for different mobs when SSD.
|
||||
var/player_logged = 0
|
||||
//Indicates if a clientless mob is actually an admin aghosting
|
||||
var/mob/dead/observer/aghosted = null
|
||||
|
||||
var/turf/listed_turf = null //the current turf being examined in the stat panel
|
||||
var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
|
||||
|
||||
@@ -563,6 +563,7 @@
|
||||
adj_drowsy = -3
|
||||
adj_sleepy = -2
|
||||
adj_temp = 25
|
||||
overdose = 45
|
||||
|
||||
glass_icon_state = "hot_coffee"
|
||||
glass_name = "cup of coffee"
|
||||
@@ -572,10 +573,14 @@
|
||||
..()
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
M.make_jittery(5)
|
||||
if(adj_temp > 0)
|
||||
holder.remove_reagent("frostoil", 10 * removed)
|
||||
|
||||
/datum/reagent/drink/coffee/overdose(var/mob/living/carbon/M, var/alien)
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
M.make_jittery(5)
|
||||
|
||||
/datum/reagent/drink/coffee/icecoffee
|
||||
name = "Iced Coffee"
|
||||
id = "icecoffee"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
amount_per_transfer_from_this = 50
|
||||
// Large, but inaccurate. Use a chem dispenser or beaker for accuracy.
|
||||
possible_transfer_amounts = list(50, 100)
|
||||
unacidable = 1
|
||||
|
||||
var/spawn_reagent = null
|
||||
var/label = ""
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
|
||||
var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/New()
|
||||
..()
|
||||
if(isGlass) unacidable = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target as mob, mob/living/user as mob)
|
||||
|
||||
//Creates a shattering noise and replaces the bottle with a broken_bottle
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_state = "glass_empty"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
unacidable = 1 //glass
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
on_reagent_change()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
icon_state = "jar"
|
||||
item_state = "beaker"
|
||||
center_of_mass = list("x"=15, "y"=8)
|
||||
unacidable = 1
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("slime", 50)
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
volume = 60
|
||||
w_class = 2
|
||||
flags = OPENCONTAINER
|
||||
unacidable = 1 //glass doesn't dissolve in acid
|
||||
|
||||
var/label_text = ""
|
||||
|
||||
@@ -219,6 +220,7 @@
|
||||
possible_transfer_amounts = list(10,20,30,60,120)
|
||||
volume = 120
|
||||
flags = OPENCONTAINER
|
||||
unacidable = 0
|
||||
|
||||
attackby(var/obj/D, mob/user as mob)
|
||||
if(isprox(D))
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
item_state = "hypo"
|
||||
icon_state = "hypo"
|
||||
amount_per_transfer_from_this = 5
|
||||
unacidable = 1
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
flags = OPENCONTAINER
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
amount_per_transfer_from_this = 10
|
||||
unacidable = 1 //plastic
|
||||
possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one.
|
||||
var/spray_size = 3
|
||||
var/list/spray_sizes = list(1,3)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
w_class = 1
|
||||
slot_flags = SLOT_EARS
|
||||
sharp = 1
|
||||
unacidable = 1 //glass
|
||||
var/mode = SYRINGE_DRAW
|
||||
var/image/filling //holds a reference to the current filling overlay
|
||||
var/visible_name = "a syringe"
|
||||
|
||||
@@ -137,6 +137,9 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
s["vote"] = config.allow_vote_mode
|
||||
s["ai"] = config.allow_ai
|
||||
s["host"] = host ? host : null
|
||||
|
||||
// This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here.
|
||||
s["players"] = 0
|
||||
s["stationtime"] = worldtime2text()
|
||||
|
||||
if(input["status"] == "2")
|
||||
|
||||
Reference in New Issue
Block a user