Upstream fix mirror spree (#7362)

* tgstation/tgstation#39025 - Fixes nukeop eshield not being buyable

* tgstation/tgstation#39011 - [s] Adds missing logging to the staff of storms

* tgstation/tgstation#38980 - Corrects a stat error in the Nuke Ops uplink

* tgstation/tgstation#38988 - Fixes blob victory.

* tgstation/tgstation#38990 - Allow players to un-ignore previously ignored popups for ghostroles, and ignore notifications with no ignore button

needs tgui recompile

* tgstation/tgstation#38994 - Fix timer bug

* TGUI recompile

* tgstation/tgstation#39035 - Fixes navigation computers.

* tgstation/tgstation#39043 - Fixes minor genetics scanner runtime

* tgstation/tgstation#39044 - Fixes burgers icons

* tgstation/tgstation#39055 - Fixes porta_turret and decal shuttle rotations

* tgstation/tgstation#39063 - Stops extinguishers from cooling turfs to absolute zero

* tgstation/tgstation#38967 - Fixes smuggler's satchel init typo

* tgstation/tgstation#38931 - Fixes pulse rifles exploding structures in nullspace and that sort of thing
This commit is contained in:
deathride58
2018-07-20 06:40:39 -04:00
committed by kevinz000
parent c82e341278
commit f1739cb482
28 changed files with 172 additions and 57 deletions
@@ -123,8 +123,9 @@ GLOBAL_LIST_EMPTY(blob_nodes)
else
L.fully_heal()
for(var/V in GLOB.the_station_areas)
var/area/A = V
for(var/area/A in GLOB.sortedAreas)
if(!(A.type in GLOB.the_station_areas))
continue
if(!A.blob_allowed)
continue
A.color = blob_reagent_datum.color
@@ -15,7 +15,7 @@
. = ..()
var/area/A = get_area(src)
if(A && construct_type)
notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_CONSTRUCT)
GLOB.poi_list += src
LAZYADD(GLOB.mob_spawners[name], src)
@@ -118,7 +118,7 @@
if(INGREDIENTS_STACKPLUSTOP)
filling.pixel_x = rand(-1,1)
filling.pixel_y = 2 * ingredients.len - 1
if(overlays)
if(overlays && overlays.len >= ingredients.len) //remove the old top if it exists
overlays -= overlays[ingredients.len]
var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top")
TOP.pixel_y = 2 * ingredients.len + 3
@@ -766,7 +766,7 @@
notify_ghosts("[user] is raising [user.p_their()] [src], calling for your help!",
enter_link="<a href=?src=[REF(src)];orbit=1>(Click to help)</a>",
source = user, action=NOTIFY_ORBIT)
source = user, action=NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPECTRAL_BLADE)
summon_cooldown = world.time + 600
@@ -0,0 +1,49 @@
/mob/dead/observer/verb/show_notificationprefs()
set category = "Ghost"
set name = "Notification preferences"
set desc = "Notification preferences"
var/datum/notificationpanel/panel = new(usr)
panel.ui_interact(usr)
/datum/notificationpanel
var/client/user
/datum/notificationpanel/New(user)
if (ismob(user))
var/mob/M = user
if (!M.client)
CRASH("Ghost role notification panel attempted to open to a mob without a client")
src.user = M.client
else
src.user = user
/datum/notificationpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "notificationpanel", "Notification Preferences", 700, 700, master_ui, state)
ui.open()
/datum/notificationpanel/ui_data(mob/user)
. = list()
.["ignore"] = list()
for(var/key in GLOB.poll_ignore_desc)
.["ignore"] += list(list(
"key" = key,
"enabled" = (user.ckey in GLOB.poll_ignore[key]),
"desc" = GLOB.poll_ignore_desc[key]
))
/datum/notificationpanel/ui_act(action, params)
if(..())
return
switch (action)
if ("toggle_ignore")
var/key = params["key"]
if (key && islist(GLOB.poll_ignore[key]))
GLOB.poll_ignore[key] ^= list(user.ckey)
. = TRUE
+1 -1
View File
@@ -36,7 +36,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade)
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN)
if(!newlymade)
GLOB.posibrain_notify_cooldown = world.time + askDelay
@@ -21,7 +21,7 @@
. = ..()
var/area/A = get_area(src)
if(A)
notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE)
GLOB.poi_list |= src
if(isnull(possible_seasonal_hats))
build_seasonal_hats()
@@ -188,10 +188,14 @@ Difficulty: Medium
"<span class='notice'>You hold [src] skyward, dispelling the storm!</span>")
playsound(user, 'sound/magic/staff_change.ogg', 200, 0)
A.wind_down()
log_game("[user] ([key_name(user)]) has dispelled a storm at [AREACOORD(user_turf)]")
return
else
A = new storm_type(list(user_turf.z))
A.name = "staff storm"
log_game("[user] ([key_name(user)]) has summoned [A] at [AREACOORD(user_turf)]")
if (is_special_character(user))
message_admins("[A] has been summoned in [ADMIN_VERBOSEJMP(user_turf)] by [user] ([key_name_admin(user)], a non-antagonist")
A.area_type = user_area.type
A.telegraph_duration = 100
A.end_duration = 100
+3 -1
View File
@@ -375,11 +375,13 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/mob/proc/reagent_check(datum/reagent/R) // utilized in the species code
return 1
/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/mutable_appearance/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE, ignore_mapload = TRUE) //Easy notification of ghosts.
/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/mutable_appearance/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE, ignore_mapload = TRUE, ignore_key) //Easy notification of ghosts.
if(ignore_mapload && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load
return
for(var/mob/dead/observer/O in GLOB.player_list)
if(O.client)
if (ignore_key && O.ckey in GLOB.poll_ignore[ignore_key])
continue
to_chat(O, "<span class='ghostalert'>[message][(enter_link) ? " [enter_link]" : ""]</span>")
if(ghost_sound)
SEND_SOUND(O, sound(ghost_sound))
@@ -140,7 +140,7 @@
if(hotspot && !isspaceturf(T))
if(T.air)
var/datum/gas_mixture/G = T.air
G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0)
G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),TCMB)
G.react(src)
qdel(hotspot)
var/obj/effect/acid/A = (locate(/obj/effect/acid) in T)
+1 -1
View File
@@ -31,7 +31,7 @@
if(jammed)
to_chat(user, "<span class='warning'>The Syndicate is jamming the console!</span>")
return
if(!shuttle_port)
if(!shuttle_port && !SSshuttle.getShuttle(shuttleId))
to_chat(user,"<span class='warning'>Warning: Shuttle connection severed!</span>")
return
return ..()
+5 -2
View File
@@ -25,8 +25,6 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
pixel_x = oldPY
pixel_y = (oldPX*(-1))
SEND_SIGNAL(src, COMSIG_ATOM_ROTATE, rotation, params)
/************************************Turf rotate procs************************************/
/turf/closed/mineral/shuttleRotate(rotation, params)
@@ -111,3 +109,8 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
if(cyclelinkeddir)
cyclelinkeddir = angle2dir(rotation+dir2angle(cyclelinkeddir))
cyclelinkairlock()
/obj/machinery/porta_turret/shuttleRotate(rotation, params)
. = ..()
if(wall_turret_direction && (params & ROTATE_DIR))
wall_turret_direction = turn(wall_turret_direction,rotation)
+3 -3
View File
@@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/smg
name = "C-20r Submachine Gun"
desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \
20-round magazine and is compatible with suppressors."
24-round magazine and is compatible with suppressors."
item = /obj/item/gun/ballistic/automatic/c20r
cost = 10
surplus = 40
@@ -496,7 +496,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/smg
name = ".45 SMG Magazine"
desc = "An additional 20-round .45 magazine suitable for use with the C-20r submachine gun. \
desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun. \
These bullets pack a lot of punch that can knock most targets down, but do limited overall damage."
item = /obj/item/ammo_box/magazine/smgm45
cost = 3
@@ -1134,7 +1134,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 20
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/shield
/datum/uplink_item/device_tools/bananashield
name = "Bananium Energy Shield"
desc = "A clown's most powerful defensive weapon, this personal shield provides near immunity to ranged energy attacks \
by bouncing them back at the ones who fired them. It can also be thrown to bounce off of people, slipping them, \