Hotfixes for March 3, 2017 (#260)

* fixes sterile mask box

* fixes admin map templates

https://github.com/tgstation/tgstation/pull/24581

* syndicate beacon refactor

https://github.com/tgstation/tgstation/pull/24612

* singularity tracking

https://github.com/tgstation/tgstation/pull/24609

* puddle description

https://github.com/tgstation/tgstation/pull/24601

* aux base landing fix

https://github.com/tgstation/tgstation/pull/24594

* comms console cooldown

https://github.com/tgstation/tgstation/pull/24579

* cult fixes + pronouns

https://github.com/tgstation/tgstation/pull/24590

* minebots now check for pressure

https://github.com/tgstation/tgstation/pull/24604

* fixes a very annoying spawn

https://github.com/tgstation/tgstation/pull/24588

* fixes false positive AI cheat check

https://github.com/tgstation/tgstation/pull/24558
mso is bae

* Fixes abductor surgery designs

https://github.com/tgstation/tgstation/pull/24593

* Allows transit space shuttle repairs

https://github.com/tgstation/tgstation/pull/24582

* fixes indentation error
This commit is contained in:
TalkingCactus
2017-03-03 15:15:42 -05:00
committed by GitHub
parent 8abcb9859b
commit 97327d2beb
18 changed files with 79 additions and 59 deletions
+1
View File
@@ -11,6 +11,7 @@ var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacon
var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons.
var/global/list/nuke_list = list()
var/global/list/alarmdisplay = list() //list of all machines or programs that can display station alerts
var/global/list/singularities = list() //list of all singularities on the station (actually technically all engines)
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
+4 -3
View File
@@ -42,9 +42,10 @@
if(istype(loc, /obj/item/device/aicard) && (pixel_turf in view(client.view, loc)))
turf_visible = TRUE
else
log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])")
message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))")
send2irc("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))")
if (pixel_turf.obscured)
log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])")
message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))")
send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))")
return
var/list/modifiers = params2list(params)
@@ -62,7 +62,7 @@
T.ratvar_act(1)
var/dir_to_step_in = pick(cardinal)
if(!prey)
for(var/obj/singularity/narsie/N in poi_list)
for(var/obj/singularity/narsie/N in singularities)
if(N.z == z)
prey = N
break
+1 -1
View File
@@ -34,7 +34,7 @@
user << "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>"
user.Dizzy(120)
else
user << "<span class='cultlarge'>\"One of Ratvar's toys is trying to play with things [user.gender == FEMALE ? "s" : ""]he shouldn't. Cute.\"</span>"
user << "<span class='cultlarge'>\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\"</span>"
user << "<span class='userdanger'>A horrible force yanks at your arm!</span>"
user.emote("scream")
user.apply_damage(30, BRUTE, pick("l_arm", "r_arm"))
@@ -22,6 +22,7 @@
/obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M)
if(istype(M, /mob/living/simple_animal/hostile/construct/builder))
if(obj_integrity < max_integrity)
M.changeNext_move(CLICK_CD_MELEE)
obj_integrity = min(max_integrity, obj_integrity + 5)
Beam(M, icon_state="sendbeam", time=4)
M.visible_message("<span class='danger'>[M] repairs \the <b>[src]</b>.</span>", \
+12 -7
View File
@@ -35,6 +35,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/stat_msg1
var/stat_msg2
/obj/machinery/computer/communications/proc/checkCCcooldown()
var/obj/item/weapon/circuitboard/computer/communications/CM = circuit
if(CM.lastTimeUsed + 600 > world.time)
return FALSE
return TRUE
/obj/machinery/computer/communications/New()
shuttle_caller_list += src
@@ -264,11 +269,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
// OMG CENTCOM LETTERHEAD
if("MessageCentcomm")
if(src.authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
return
var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "")
if(!input || !(usr in view(1,src)))
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
return
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Centcomm_announce(input, usr)
@@ -280,12 +285,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
// OMG SYNDICATE ...LETTERHEAD
if("MessageSyndicate")
if((src.authenticated==2) && (src.emagged))
if(CM.lastTimeUsed + 600 > world.time)
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "")
if(!input || !(usr in view(1,src)))
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
return
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Syndicate_announce(input, usr)
@@ -301,11 +306,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("nukerequest") //When there's no other way
if(src.authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
if(!checkCCcooldown())
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
return
var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","")
if(!input || !(usr in view(1,src)))
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
return
Nuke_request(input, usr)
usr << "<span class='notice'>Request sent.</span>"
@@ -687,4 +692,4 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
/obj/machinery/computer/communications/proc/overrideCooldown()
var/obj/item/weapon/circuitboard/computer/communications/CM = circuit
CM.lastTimeUsed = 0
CM.lastTimeUsed = 0
+16 -9
View File
@@ -11,6 +11,8 @@
density = 1
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
stat = 0
verb_say = "states"
var/cooldown = 0
var/active = 0
var/icontype = "beacon"
@@ -20,18 +22,17 @@
if(surplus() < 1500)
if(user) user << "<span class='notice'>The connected wire doesn't have enough current.</span>"
return
for(var/obj/singularity/singulo in world)
for(var/obj/singularity/singulo in singularities)
if(singulo.z == z)
singulo.target = src
icon_state = "[icontype]1"
active = 1
machines |= src
if(user)
user << "<span class='notice'>You activate the beacon.</span>"
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
for(var/obj/singularity/singulo in world)
for(var/obj/singularity/singulo in singularities)
if(singulo.target == src)
singulo.target = null
icon_state = "[icontype]0"
@@ -81,12 +82,18 @@
//stealth direct power usage
/obj/machinery/power/singularity_beacon/process()
if(!active)
return PROCESS_KILL
return
if(surplus() > 1500)
add_load(1500)
if(cooldown <= world.time)
cooldown = world.time + 100
for(var/obj/singularity/singulo in singularities)
if(singulo.z == z)
say("The [singulo] is now [get_dist(src,singulo)] standard lengths away to the [dir2text(get_dir(src,singulo))]")
else
if(surplus() > 1500)
add_load(1500)
else
Deactivate()
Deactivate()
say("Insufficient charge detected - powering down")
/obj/machinery/power/singularity_beacon/syndicate
@@ -120,4 +127,4 @@
/obj/item/device/sbeacondrop/powersink
desc = "A label on it reads: <i>Warning: Activating this device will send a power draining device to your location</i>."
droptype = /obj/item/device/powersink
origin_tech = "bluespace=4;syndicate=5"
origin_tech = "bluespace=4;syndicate=5"
+1 -4
View File
@@ -156,10 +156,7 @@
//BubbleWrap END
if (src && usr.machine==src) //do not reopen closed window
spawn( 0 )
src.interact(usr)
return
return
addtimer(CALLBACK(src, /atom/.proc/interact, usr), 0)
/obj/item/stack/proc/building_checks(datum/stack_recipe/R, multiplier)
if (src.get_amount() < R.req_amount*multiplier)
@@ -147,7 +147,7 @@
/obj/item/weapon/storage/box/masks
name = "box of sterile masks"
desc = "This box contains sterile medical masks."
icon_state = "sterile"
illustration = "sterile"
/obj/item/weapon/storage/box/masks/New()
..()
@@ -520,6 +520,7 @@
/obj/structure/sink/puddle //splishy splashy ^_^
name = "puddle"
desc = "A puddle used for washing one's hands and face."
icon_state = "puddle"
/obj/structure/sink/puddle/attack_hand(mob/M)
+4 -2
View File
@@ -18,7 +18,7 @@
/turf/open/space/Initialize()
icon_state = SPACE_ICON_STATE
air = space_gas
if(initialized)
stack_trace("Warning: [src]([type]) initialized multiple times!")
initialized = TRUE
@@ -60,9 +60,11 @@
/turf/open/space/attack_paw(mob/user)
return src.attack_hand(user)
/turf/open/space/attackby(obj/item/C, mob/user, params)
/turf/open/space/attackby(obj/item/C, mob/user, area_restriction)
..()
if(istype(C, /obj/item/stack/rods))
if(area_restriction && !istype(get_area(src), area_restriction))
return
var/obj/item/stack/rods/R = C
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src)
+3 -3
View File
@@ -57,9 +57,9 @@
AM.loc = T
AM.newtonian_move(dir)
//Overwrite because we dont want people building rods in space.
/turf/open/space/transit/attackby()
return
//Overwrite because we dont want people building rods
/turf/open/space/transit/attackby(obj/item/C, mob/user)
..(C, user, /area/shuttle)
/turf/open/space/transit/Initialize()
..()
@@ -35,7 +35,7 @@
usr << "Bad map file: [map]"
return
var/datum/map_template/M = new(map=map, rename="[map]")
var/datum/map_template/M = new(map, "[map]")
if(M.preload_size(map))
usr << "Map template '[map]' ready to place ([M.width]x[M.height])"
SSmapping.map_templates[M.name] = M
+12 -8
View File
@@ -302,19 +302,16 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove()
if(!Mport)
user << "<span class='warning'>This station is not equipped with an approprite mining shuttle. Please contact Nanotrasen Support.</span>"
return
var/search_radius = max(Mport.width, Mport.height)*0.5
var/list/landing_areas = get_areas_in_range(search_radius, landing_spot)
for(var/area/shuttle/auxillary_base/AB in landing_areas) //You land NEAR the base, not IN it.
user << "<span class='warning'>The mining shuttle must not land within the mining base itself.</span>"
SSshuttle.stationary.Remove(Mport)
qdel(Mport)
return
var/obj/docking_port/mobile/mining_shuttle
var/list/landing_turfs = list() //List of turfs where the mining shuttle may land.
for(var/S in SSshuttle.mobile)
var/obj/docking_port/mobile/MS = S
if(MS.id != "mining")
continue
mining_shuttle = MS
landing_turfs = mining_shuttle.return_ordered_turfs(x,y,z,dir)
break
if(!mining_shuttle) //Not having a mining shuttle is a map issue
user << "<span class='warning'>No mining shuttle signal detected. Please contact Nanotrasen Support.</span>"
@@ -322,6 +319,13 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove()
qdel(Mport)
return
for(var/L in landing_turfs) //You land NEAR the base, not IN it.
if(istype(get_area(L), /area/shuttle/auxillary_base))
user << "<span class='warning'>The mining shuttle must not land within the mining base itself.</span>"
SSshuttle.stationary.Remove(Mport)
qdel(Mport)
return
if(!mining_shuttle.canDock(Mport))
user << "<span class='warning'>Unable to secure a valid docking zone. Please try again in an open area near, but not within the aux. mining base.</span>"
SSshuttle.stationary.Remove(Mport)
@@ -331,7 +335,7 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove()
aux_base_console.set_mining_mode() //Lets the colony park the shuttle there, now that it has a dock.
user << "<span class='notice'>Mining shuttle calibration successful! Shuttle interface available at base console.</span>"
anchored = 1 //Locks in place to mark the landing zone.
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
/obj/structure/mining_shuttle_beacon/proc/clear_cooldown()
anti_spam_cd = 0
@@ -319,7 +319,7 @@ field_generator power level display
//I want to avoid using global variables.
spawn(1)
var/temp = 1 //stops spam
for(var/obj/singularity/O in world)
for(var/obj/singularity/O in singularities)
if(O.last_warning && temp)
if((world.time - O.last_warning) > 50) //to stop message-spam
temp = 0
@@ -36,6 +36,7 @@
..()
START_PROCESSING(SSobj, src)
poi_list |= src
singularities |= src
for(var/obj/machinery/power/singularity_beacon/singubeacon in machines)
if(singubeacon.active)
target = singubeacon
@@ -45,6 +46,7 @@
/obj/singularity/Destroy()
STOP_PROCESSING(SSobj, src)
poi_list.Remove(src)
singularities.Remove(src)
return ..()
/obj/singularity/Move(atom/newloc, direct)
@@ -138,7 +138,6 @@
iconF = "flight_on"
add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
//Casing
/obj/item/ammo_casing/energy/kinetic
projectile_type = /obj/item/projectile/kinetic
@@ -152,17 +151,6 @@
var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc
KA.modify_projectile(BB)
var/turf/proj_turf = get_turf(BB)
if(!isturf(proj_turf))
return
var/datum/gas_mixture/environment = proj_turf.return_air()
var/pressure = environment.return_pressure()
if(pressure > 50)
BB.name = "weakened [BB.name]"
var/obj/item/projectile/kinetic/K = BB
K.damage *= K.pressure_decrease
//Projectiles
/obj/item/projectile/kinetic
name = "kinetic force"
@@ -178,6 +166,17 @@
var/mob_aoe = 0
var/list/hit_overlays = list()
/obj/item/projectile/kinetic/prehit(atom/target)
var/turf/target_turf = get_turf(target)
if(!isturf(target_turf))
return
var/datum/gas_mixture/environment = target_turf.return_air()
var/pressure = environment.return_pressure()
if(pressure > 50)
name = "weakened [name]"
damage = damage * pressure_decrease
. = ..()
/obj/item/projectile/kinetic/on_range()
strike_thing()
..()
@@ -119,7 +119,7 @@
name = "Alien Scalpel"
desc = "An advanced scalpel obtained through Abductor technology."
id = "alien_scalpel"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/scalpel/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
@@ -129,7 +129,7 @@
name = "Alien Hemostat"
desc = "An advanced hemostat obtained through Abductor technology."
id = "alien_hemostat"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/hemostat/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
@@ -139,7 +139,7 @@
name = "Alien Retractor"
desc = "An advanced retractor obtained through Abductor technology."
id = "alien_retractor"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/retractor/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
@@ -149,7 +149,7 @@
name = "Alien Circular Saw"
desc = "An advanced surgical saw obtained through Abductor technology."
id = "alien_saw"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/circular_saw/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
@@ -159,7 +159,7 @@
name = "Alien Drill"
desc = "An advanced drill obtained through Abductor technology."
id = "alien_drill"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/surgicaldrill/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
@@ -169,7 +169,7 @@
name = "Alien Cautery"
desc = "An advanced cautery obtained through Abductor technology."
id = "alien_cautery"
req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3)
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/weapon/cautery/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)