Skip to content

Commit 06bda09

Browse files
AbsolucyLemonInTheDarkProfakos
authored
Some minor fixes (#4150)
* Fix runtime in is_valid_z_level (by replacing it with another runtime to narrow things down) * Skip nulls in `/proc/strip_appearance_underlays` * clarify stack trace * better * okay this is safe to do then * get rid of all uses of `throw EXCEPTION()` * debug try/catch for PARSE_LIGHT_COLOR * revert this so i can tm #4229 * resolves some opendream lints includes port of tgstation/tgstation#84656 and partial port of tgstation/tgstation#84648 * Removes stupid listlike var access code (#84648) [Removes all other listlike var accesses](tgstation/tgstation@4c5996b) Also fucking dumpsters an unused proc that allowed for arbitrary variable modifcation. Bad juju This is undefined behavior and errors in later 515 versions. also it's stupid as hell * some more linting fixes * add more info to PARSE_LIGHT_COLOR debug * fix runtime in `/datum/ai_planning_subtree/stare_at_thing/SelectBehaviors` * Prevents persistence from trying to load more engravings than exists (#86065) ## About The Pull Request During initializing persistent wall engravings, the game picked a number between 15 and 25, and attempted to load that many. However, if there were less engravings than that, the loop went on even after the list it was calling `pick_n_take` on was empty, and multiple times it has logged a runtime claiming that the engraving was in an incorrect format when it tried to parse the returned nulls. This PR ensures that the game will not attempt to load more engravings than the amount that exists in the persistence files, ensuring less incorrect error messages during initialization. ## Why It's Good For The Game Less incorrect lines during initialization on maps that have not received enough engravings. ## Changelog Nothing player facing. * no len, only length * hrrrrnnggh colonel, I’m trying to fix runtimes but I'm *dummy thicc* and the clap from my asscheeks keeps alerting runtime.log * revert this for now * e * werfijfrjweuirweufjnrfweuijneruwifjn * qwedfwerfuijhfwerg8yuwerf8yguh * remove enqueue logging, hopefully reducing lists * clean up particle spewer code quite a bit * Rebuild plane masters after client login if switching between 515 and 516 (#87889) This makes `/datum/player_details` properly track BYOND version and build separately, as opposed to just the full version string. Whenever a client logs in, and their BYOND version is 516, while their previous version was 515, or vice versa, it'll set a newly added client var, `rebuild_plane_masters`, to TRUE. During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD (`/datum/hud/proc/client_refresh`), it will check to see if `rebuild_plane_masters` is TRUE - if so, it will set the appropriate `relay_loc` of (based on client BYOND version) of its plane master groups, and rebuild their plane masters. Makes testing stuff across 515 and 516 easier, as your screen won't break when switching between the two. 516 is _still_ in private alpha, so no user-facing changes. * Admin deleting a mob now ghostizes it beforehand, preventing a runtime (#87887) * aeiou * fix addtimer runtime with modsuit construction * clean up some false positive runtimes --------- Co-authored-by: LemonInTheDark <[email protected]> Co-authored-by: Profakos <[email protected]>
1 parent 5c3b1c1 commit 06bda09

File tree

57 files changed

+171
-122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+171
-122
lines changed

code/__DEFINES/dcs/signals/signals_datum.dm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#define COMSIG_PREQDELETED "parent_preqdeleted"
1414
/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
1515
#define COMSIG_QDELETING "parent_qdeleting"
16+
/// Called whenever an admin manually deletes an object, via the "Delete" verb, before qdel() is called: (client/deleting_admin)
17+
#define COMSIG_ADMIN_DELETING "parent_admin_deleting"
1618
/// generic topic handler (usr, href_list)
1719
#define COMSIG_TOPIC "handle_topic"
1820
/// handler for vv_do_topic (usr, href_list)

code/__DEFINES/lighting.dm

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,17 @@ GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX)
9696
#define PARSE_LIGHT_COLOR(source) \
9797
do { \
9898
if (source.light_color != COLOR_WHITE) { \
99-
var/list/color_map = rgb2num(source.light_color); \
100-
source.lum_r = color_map[1] / 255; \
101-
source.lum_g = color_map[2] / 255; \
102-
source.lum_b = color_map[3] / 255; \
99+
try { \
100+
var/list/color_map = rgb2num(source.light_color); \
101+
source.lum_r = color_map[1] / 255; \
102+
source.lum_g = color_map[2] / 255; \
103+
source.lum_b = color_map[3] / 255; \
104+
} catch() { \
105+
stack_trace("[source.source_atom] ([source.source_atom?.type]) had invalid light color [source.light_color || "null"]"); \
106+
source.lum_r = 1; \
107+
source.lum_g = 1; \
108+
source.lum_b = 1; \
109+
}; \
103110
} else { \
104111
source.lum_r = 1; \
105112
source.lum_g = 1; \
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#define LOG_CATEGORY_GAME_LOOC "game-looc"
22
#define LOG_CATEGORY_STORYTELLER "storyteller"
3-
#define LOG_CATEGORY_ENQUEUE "enqueue"
3+
/* #define LOG_CATEGORY_ENQUEUE "enqueue" */

code/__HELPERS/areas.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(list(
147147
* A list of all machinery tied to an area along with the area itself. key=area name,value=list(area,list of machinery)
148148
* we use this to keep track of what areas are affected by the blueprints & what machinery of these areas needs to be reconfigured accordingly
149149
*/
150-
var/area/affected_areas = list()
150+
var/list/area/affected_areas = list()
151151
for(var/turf/the_turf as anything in turfs)
152152
var/area/old_area = the_turf.loc
153153

code/__HELPERS/icons.dm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,6 +1507,8 @@ GLOBAL_LIST_EMPTY(icon_dimensions)
15071507
/proc/strip_appearance_underlays(mutable_appearance/appearance)
15081508
var/base_plane = PLANE_TO_TRUE(appearance.plane)
15091509
for(var/mutable_appearance/underlay as anything in appearance.underlays)
1510+
if(isnull(underlay))
1511+
continue
15101512
if(PLANE_TO_TRUE(underlay.plane) != base_plane)
15111513
appearance.underlays -= underlay
15121514
return appearance

code/__HELPERS/levels.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
* returns TRUE if connection is valid, FALSE otherwise.
1212
*/
1313
/proc/is_valid_z_level(turf/source_loc, turf/checking_loc)
14+
// if either locs are null, then well, it's not valid, is it?
15+
if(isnull(source_loc) || isnull(checking_loc))
16+
return FALSE
1417
// if we're both on "station", regardless of multi-z, we'll pass by.
1518
if(is_station_level(source_loc.z) && is_station_level(checking_loc.z))
1619
return TRUE

code/__HELPERS/logging/debug.dm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,7 @@
6060
#endif
6161
SEND_TEXT(world.log, text)
6262

63+
/*
6364
/proc/log_enqueue(text, list/data)
6465
logger.Log(LOG_CATEGORY_ENQUEUE, text, data)
66+
*/

code/__HELPERS/paths/path.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ GLOBAL_LIST_INIT(can_pass_info_vars, GLOBAL_PROC_REF(can_pass_check_vars))
382382

383383
/datum/can_pass_info/proc/compare_against(datum/can_pass_info/check_against)
384384
for(var/comparable_var in GLOB.can_pass_info_vars)
385-
if(!(vars[comparable_var] ~= check_against[comparable_var]))
385+
if(!(vars[comparable_var] ~= check_against.vars[comparable_var]))
386386
return FALSE
387387
if(!pulling_info != !check_against.pulling_info)
388388
return FALSE

code/__HELPERS/records.dm

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// eww
2+
/proc/overwrite_field_if_available(datum/record/base, datum/record/other, field_name)
3+
if(!istype(base) || !istype(other))
4+
return
5+
if(other.vars[field_name])
6+
base.vars[field_name] = other.vars[field_name]

code/_onclick/click.dm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@
9191

9292
var/list/modifiers = params2list(params)
9393

94+
if(!client?.holder && (isobserver(A) || isaicamera(A)) && A.invisibility > see_invisible)
95+
message_admins("[ADMIN_LOOKUPFLW(src)] clicked on [key_name_admin(A)] ([A?.type]) [ADMIN_FLW(A)], which they should not be able to see!")
96+
log_admin_private("[key_name(src)] clicked on [key_name(A)] ([A?.type]), which they should not be able to see!")
97+
9498
if(client)
9599
client.imode.update_istate(src, modifiers)
96100

code/_onclick/hud/hud.dm

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,16 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
146146

147147
/datum/hud/proc/client_refresh(datum/source)
148148
SIGNAL_HANDLER
149-
RegisterSignal(mymob.client, COMSIG_CLIENT_SET_EYE, PROC_REF(on_eye_change))
150-
on_eye_change(null, null, mymob.client.eye)
149+
var/client/client = mymob.client
150+
if(client.rebuild_plane_masters)
151+
var/new_relay_loc = (client.byond_version > 515) ? "1,1" : "CENTER"
152+
for(var/group_key as anything in master_groups)
153+
var/datum/plane_master_group/group = master_groups[group_key]
154+
group.relay_loc = new_relay_loc
155+
group.rebuild_plane_masters()
156+
client.rebuild_plane_masters = FALSE
157+
RegisterSignal(client, COMSIG_CLIENT_SET_EYE, PROC_REF(on_eye_change))
158+
on_eye_change(null, null, client.eye)
151159

152160
/datum/hud/proc/clear_client(datum/source)
153161
SIGNAL_HANDLER

code/_onclick/hud/new_player.dm

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,11 @@
160160
if(ready)
161161
new_player.ready = PLAYER_READY_TO_PLAY
162162
base_icon_state = "ready"
163-
if(!new_player.client.readied_store)
164-
new_player.client.readied_store = new(new_player)
165-
else
166-
new_player.client.readied_store.ui_interact(new_player)
163+
var/client/new_client = new_player.client
164+
if(new_client)
165+
if(!new_client.readied_store)
166+
new_client.readied_store = new(new_player)
167+
new_client.readied_store.ui_interact(new_player)
167168
else
168169
new_player.ready = PLAYER_NOT_READY
169170
base_icon_state = "not_ready"

code/controllers/subsystem.dm

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108

109109
var/avg_iter_count = 0
110110
var/avg_drift = 0
111-
var/list/enqueue_log = list()
111+
/* var/list/enqueue_log = list() */
112112

113113
//Do not blindly add vars here to the bottom, put it where it goes above
114114
//If your var only has two values, put it in as a flag.
@@ -197,7 +197,7 @@
197197

198198
var/iter_count = 0
199199

200-
enqueue_log.Cut()
200+
/* enqueue_log.Cut() */
201201
for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next)
202202
iter_count++
203203
if(iter_count >= ENQUEUE_SANITY)
@@ -207,25 +207,23 @@
207207
examine_block(span_userdanger("ERROR: [msg]")),
208208
type = MESSAGE_TYPE_DEBUG
209209
)
210-
log_enqueue(msg, list("enqueue_log" = enqueue_log.Copy()))
211-
#if defined(INIT_ORDER_PLEXORA) && !defined(UNIT_TESTS)
210+
/* log_enqueue(msg, list("enqueue_log" = enqueue_log.Copy())) */
212211
SSplexora.mc_alert("[src] has likely entered an infinite loop in enqueue(), we're restarting the MC immediately!")
213-
#endif
214212
stack_trace("enqueue() entered an infinite loop, we're restarting the MC!")
215-
enqueue_log.Cut()
213+
/* enqueue_log.Cut() */
216214
Recreate_MC()
217215
return
218216

219217

220218
queue_node_priority = queue_node.queued_priority
221219
queue_node_flags = queue_node.flags
222220

223-
enqueue_log["[iter_count]"] = list(
221+
/* enqueue_log["[iter_count]"] = list(
224222
"node" = "[queue_node]",
225223
"next" = "[queue_node.queue_next || "(none)"]",
226224
"priority" = queue_node_priority,
227225
"flags" = queue_node_flags,
228-
)
226+
) */
229227

230228
if (queue_node_flags & (SS_TICKER|SS_BACKGROUND) == SS_TICKER)
231229
if ((SS_flags & (SS_TICKER|SS_BACKGROUND)) != SS_TICKER)

code/controllers/subsystem/blackbox.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ SUBSYSTEM_DEF(blackbox)
8787

8888
for(var/player_key in GLOB.player_details)
8989
var/datum/player_details/PD = GLOB.player_details[player_key]
90-
record_feedback("tally", "client_byond_version", 1, PD.byond_version)
90+
record_feedback("tally", "client_byond_version", 1, PD.full_byond_version())
9191

9292
/datum/controller/subsystem/blackbox/Shutdown()
9393
sealed = FALSE

code/controllers/subsystem/persistence/engravings.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
var/successfully_loaded_engravings = 0
2929

30-
for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS))
30+
for(var/iteration in 1 to min(rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS), length(saved_engravings)))
3131
var/engraving = pick_n_take(saved_engravings)
3232
if(!islist(engraving))
3333
stack_trace("something's wrong with the engraving data! one of the saved engravings wasn't a list!")

code/controllers/subsystem/persistence/scars.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client?.prefs.read_preference(/datum/preference/toggle/persistent_scars))
66
continue
77

8-
var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve()
8+
var/mob/living/carbon/human/original_human = ending_human.mind.original_character?.resolve()
99

1010
if(!original_human)
1111
continue

code/controllers/subsystem/spatial_gridmap.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ SUBSYSTEM_DEF(spatial_grid)
234234
. = list()
235235

236236
//technically THIS list only contains lists, but inside those lists are grid cell datums and we can go without a SINGLE var init if we do this
237-
var/list/datum/spatial_grid_cell/grid_level = grids_by_z_level[center_turf.z]
237+
var/list/list/datum/spatial_grid_cell/grid_level = grids_by_z_level[center_turf.z]
238238

239239
switch(type)
240240
if(SPATIAL_GRID_CONTENTS_TYPE_CLIENTS)

code/controllers/subsystem/ticker.dm

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,9 +473,8 @@ SUBSYSTEM_DEF(ticker)
473473
continue
474474
item.post_equip_item(new_player_mob.client?.prefs, new_player_living)
475475

476-
if(new_player_mob.client.readied_store)
477-
if(new_player_mob.client.readied_store.bought_item)
478-
new_player_mob.client.readied_store.finalize_purchase_spawn(new_player_mob, new_player_living)
476+
if(new_player_mob.client?.readied_store?.bought_item)
477+
new_player_mob.client.readied_store.finalize_purchase_spawn(new_player_mob, new_player_living)
479478

480479
CHECK_TICK
481480

code/datums/ai/basic_mobs/basic_subtrees/stare_at_thing.dm

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
/datum/ai_planning_subtree/stare_at_thing
33

44
/datum/ai_planning_subtree/stare_at_thing/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
5-
var/datum/weakref/weak_target = controller.blackboard[BB_STATIONARY_CAUSE]
6-
var/atom/target = weak_target?.resolve()
5+
var/atom/target = controller.blackboard[BB_STATIONARY_CAUSE]
76

87
if(isnull(target)) // No target? Time to locate one using the list we set in this mob's blackboard.
98
var/list/potential_scares = controller.blackboard[BB_STATIONARY_TARGETS]

code/datums/ai/hunting_behavior/hunting_behaviors.dm

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@
9595
var/atom/hunted = controller.blackboard[hunting_target_key]
9696

9797
if(QDELETED(hunted))
98-
//Target is gone for some reason. forget about this task!
99-
controller[hunting_target_key] = null
10098
finish_action(controller, FALSE, hunting_target_key)
10199
else
102100
target_caught(hunter, hunted)

code/datums/cinematics/_cinematic.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155

156156
/// Unlocks a previously locked weakref
157157
/datum/cinematic/proc/unlock_mob(datum/weakref/mob_ref)
158-
var/mob/locked_mob = mob_ref.resolve()
158+
var/mob/locked_mob = mob_ref?.resolve()
159159
if(isnull(locked_mob))
160160
return
161161
REMOVE_TRAIT(locked_mob, TRAIT_NO_TRANSFORM, CINEMATIC_SOURCE)

code/datums/components/_component.dm

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -274,17 +274,17 @@
274274
*/
275275
/datum/proc/GetExactComponent(datum/component/c_type)
276276
RETURN_TYPE(c_type)
277-
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
277+
var/initial_type_mode = c_type::dupe_mode
278+
if(initial_type_mode == COMPONENT_DUPE_ALLOWED || initial_type_mode == COMPONENT_DUPE_SELECTIVE)
278279
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
279-
var/list/dc = _datum_components
280-
if(!dc)
280+
var/list/all_components = _datum_components
281+
if(!all_components)
281282
return null
282-
var/datum/component/C = dc[c_type]
283-
if(C)
284-
if(length(C))
285-
C = C[1]
286-
if(C.type == c_type)
287-
return C
283+
var/datum/component/potential_component
284+
if(length(all_components))
285+
potential_component = all_components[c_type]
286+
if(potential_component?.type == c_type)
287+
return potential_component
288288
return null
289289

290290
/**

code/datums/greyscale/_greyscale_config.dm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,9 @@
276276
for(var/datum/greyscale_layer/layer as anything in group)
277277
var/icon/layer_icon
278278
if(islist(layer))
279+
var/list/layer_list = layer
279280
layer_icon = GenerateLayerGroup(colors, layer, render_steps, new_icon || last_external_icon)
280-
layer = layer[1] // When there are multiple layers in a group like this we use the first one's blend mode
281+
layer = layer_list[1] // When there are multiple layers in a group like this we use the first one's blend mode
281282
else
282283
layer_icon = layer.Generate(colors, render_steps, new_icon || last_external_icon)
283284

code/datums/mind/initialization.dm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
mind.set_current(src)
1212
// There's nowhere else to set this up, mind code makes me depressed
1313
mind.antag_hud = add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/antagonist_hud, "combo_hud", mind)
14+
RegisterSignal(src, COMSIG_ADMIN_DELETING, PROC_REF(ghost_before_admin_delete), override = TRUE)
1415
SEND_SIGNAL(src, COMSIG_MOB_MIND_INITIALIZED, mind)
1516

17+
1618
/mob/living/carbon/mind_initialize()
1719
..()
1820
last_mind = mind
@@ -35,3 +37,8 @@
3537
. = ..()
3638
mind.set_assigned_role(SSjob.GetJobType(/datum/job/personal_ai))
3739
mind.special_role = ""
40+
41+
/// Signal proc for [COMSIG_ADMIN_DELETING], to ghostize a mob beforehand if an admin is manually deleting it.
42+
/mob/proc/ghost_before_admin_delete(datum/source)
43+
SIGNAL_HANDLER
44+
ghostize(can_reenter_corpse = FALSE)

code/game/machinery/telecomms/broadcasting.dm

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,8 @@
182182
radios += independent_radio
183183

184184
for(var/obj/item/radio/called_radio as anything in radios)
185-
if(QDELETED(called_radio))
186-
return
187-
called_radio.on_recieve_message()
185+
if(!QDELETED(called_radio))
186+
called_radio.on_recieve_message()
188187

189188
// From the list of radios, find all mobs who can hear those.
190189
var/list/receive = get_hearers_in_radio_ranges(radios)
@@ -205,9 +204,11 @@
205204
var/rendered = virt.compose_message(virt, language, message, frequency, spans)
206205

207206
for(var/atom/movable/hearer as anything in receive)
208-
if(QDELETED(hearer))
207+
if(isnull(hearer))
209208
stack_trace("null found in the hearers list returned by the spatial grid. this is bad")
210209
continue
210+
else if(QDELING(hearer))
211+
continue
211212
spans -= blacklisted_spans
212213
hearer.Hear(rendered, virt, language, message, frequency, spans, message_mods, message_range = INFINITY)
213214

code/game/objects/items/food/egg.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0)
7777
pre_hatch()
7878
GLOB.chicks_from_eggs++
7979

80-
reagents.expose(hit_atom, TOUCH)
80+
reagents?.expose(hit_atom, TOUCH)
8181

8282
/obj/item/food/egg/attackby(obj/item/item, mob/user, params)
8383
if(istype(item, /obj/item/toy/crayon))

code/modules/admin/topic.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,7 @@
14511451
if(response.body == "[]")
14521452
dat += "<center><b>0 bans detected for [ckey]</b></center>"
14531453
else
1454-
bans = json_decode(response["body"])
1454+
bans = json_decode(response.body)
14551455

14561456
//Ignore bans from non-whitelisted sources, if a whitelist exists
14571457
var/list/valid_sources

code/modules/admin/view_variables/admin_delete.dm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
log_admin("[key_name(usr)] deleted [D] [coords]")
1717
message_admins("[key_name_admin(usr)] deleted [D] [jmp_coords]")
1818
SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
19+
SEND_SIGNAL(D, COMSIG_ADMIN_DELETING, src)
1920
if(isturf(D))
2021
var/turf/T = D
2122
T.ScrapeAway()

code/modules/admin/view_variables/debug_variables.dm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
if(D)
66
if(islist(D))
77
var/index = name
8+
var/list/L = D
89
if (value)
9-
name = D[name] //name is really the index until this line
10+
name = L[name] //name is really the index until this line
1011
else
11-
value = D[name]
12+
value = L[name]
1213
header = "<li style='backgroundColor:white'>([VV_HREF_TARGET_1V(D, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_REMOVE, "-", index)]) "
1314
else
1415
header = "<li style='backgroundColor:white'>([VV_HREF_TARGET_1V(D, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_MASSEDIT, "M", name)]) "

0 commit comments

Comments
 (0)