Partially ports the GLOB system

This commit is contained in:
Anewbe
2018-08-14 18:14:09 -05:00
parent 2eafa13c96
commit eebb627f00
74 changed files with 448 additions and 154 deletions

View File

@@ -84,3 +84,111 @@
<option value='?_src_=vars;explode=\ref[src]'>Trigger explosion</option>
<option value='?_src_=vars;emp=\ref[src]'>Trigger EM pulse</option>
"}
/datum/proc/get_variables()
. = vars - VV_hidden()
if(!usr || !check_rights(R_ADMIN|R_DEBUG, FALSE))
. -= VV_secluded()
/datum/proc/get_variable_value(varname)
return vars[varname]
/datum/proc/set_variable_value(varname, value)
vars[varname] = value
/datum/proc/get_initial_variable_value(varname)
return initial(vars[varname])
/datum/proc/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0)
return {"
(<a href='?_src_=vars;datumedit=\ref[src];varnameedit=[varname]'>E</a>)
(<a href='?_src_=vars;datumchange=\ref[src];varnamechange=[varname]'>C</a>)
(<a href='?_src_=vars;datummass=\ref[src];varnamemass=[varname]'>M</a>)
[hide_watch ? "" : "(<a href='?_src_=vars;datumwatch=\ref[src];varnamewatch=[varname]'>W</a>)"]
"}
// No mass editing of clients
/client/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0)
return {"
(<a href='?_src_=vars;datumedit=\ref[src];varnameedit=[varname]'>E</a>)
(<a href='?_src_=vars;datumchange=\ref[src];varnamechange=[varname]'>C</a>)
[hide_watch ? "" : "(<a href='?_src_=vars;datumwatch=\ref[src];varnamewatch=[varname]'>W</a>)"]
"}
// These methods are all procs and don't use stored lists to avoid VV exploits
// The following vars cannot be viewed by anyone
/datum/proc/VV_hidden()
return list()
// The following vars can only be viewed by R_ADMIN|R_DEBUG
/datum/proc/VV_secluded()
return list()
/datum/configuration/VV_secluded()
return vars
// The following vars cannot be edited by anyone
/datum/proc/VV_static()
return list("parent_type")
/atom/VV_static()
return ..() + list("bound_x", "bound_y", "bound_height", "bound_width", "bounds", "step_x", "step_y", "step_size")
/client/VV_static()
return ..() + list("holder", "prefs")
/datum/admins/VV_static()
return vars
// The following vars require R_DEBUG to edit
/datum/proc/VV_locked()
return list("vars", "virus", "viruses", "cuffed")
/client/VV_locked()
return list("vars", "mob")
/mob/VV_locked()
return ..() + list("client")
// The following vars require R_FUN|R_DEBUG to edit
/datum/proc/VV_icon_edit_lock()
return list()
/atom/VV_icon_edit_lock()
return ..() + list("icon", "icon_state", "overlays", "underlays")
// The following vars require R_SPAWN|R_DEBUG to edit
/datum/proc/VV_ckey_edit()
return list()
/mob/VV_ckey_edit()
return list("key", "ckey")
/client/VV_ckey_edit()
return list("key", "ckey")
/datum/proc/may_edit_var(var/user, var/var_to_edit)
if(!user)
return FALSE
if(!(var_to_edit in vars))
to_chat(user, "<span class='warning'>\The [src] does not have a var '[var_to_edit]'</span>")
return FALSE
if(var_to_edit in VV_static())
return FALSE
if((var_to_edit in VV_secluded()) && !check_rights(R_ADMIN|R_DEBUG, FALSE, C = user))
return FALSE
if((var_to_edit in VV_locked()) && !check_rights(R_DEBUG, C = user))
return FALSE
if((var_to_edit in VV_ckey_edit()) && !check_rights(R_SPAWN|R_DEBUG, C = user))
return FALSE
if((var_to_edit in VV_icon_edit_lock()) && !check_rights(R_FUN|R_DEBUG, C = user))
return FALSE
return TRUE
/proc/forbidden_varedit_object_types()
return list(
/datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea.,
/obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering,
/datum/feedback_variable //Prevents people messing with feedback gathering
)

View File

@@ -254,4 +254,4 @@
if(master.first == src)
master.first = null
if(next && !next.gc_destroyed)
qdel_null(next)
QDEL_NULL(next)

View File

@@ -8,7 +8,7 @@
pockets.max_storage_space = ITEMSIZE_COST_SMALL * 2
/obj/item/clothing/suit/storage/Destroy()
qdel_null(pockets)
QDEL_NULL(pockets)
return ..()
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)

View File

@@ -124,7 +124,7 @@
watching_mob = user
moved_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition)
dir_set_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition)
GLOB.dir_set_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition)
destroyed_event.register(watching_mob, src, /obj/machinery/station_map/proc/stopWatching)
update_use_power(2)
@@ -153,7 +153,7 @@
spawn(5) //we give it time to fade out
M.client.images -= holomap_datum.station_map
moved_event.unregister(watching_mob, src)
dir_set_event.unregister(watching_mob, src)
GLOB.dir_set_event.unregister(watching_mob, src)
destroyed_event.unregister(watching_mob, src)
watching_mob = null
update_use_power(1)

View File

@@ -246,7 +246,7 @@
on_data_written()
/obj/item/integrated_circuit/output/video_camera/Destroy()
qdel_null(camera)
QDEL_NULL(camera)
return ..()
/obj/item/integrated_circuit/output/video_camera/proc/set_camera_status(var/status)

View File

@@ -146,8 +146,8 @@
if(isrobot(loc))
var/mob/living/silicon/robot/borg = loc
borg.mmi = null
qdel_null(radio)
qdel_null(brainmob)
QDEL_NULL(radio)
QDEL_NULL(brainmob)
return ..()
/obj/item/device/mmi/radio_enabled

View File

@@ -208,14 +208,14 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/Destroy()
ai_list -= src
qdel_null(announcement)
qdel_null(eyeobj)
qdel_null(psupply)
qdel_null(aiPDA)
qdel_null(aiCommunicator)
qdel_null(aiMulti)
qdel_null(aiRadio)
qdel_null(aiCamera)
QDEL_NULL(announcement)
QDEL_NULL(eyeobj)
QDEL_NULL(psupply)
QDEL_NULL(aiPDA)
QDEL_NULL(aiCommunicator)
QDEL_NULL(aiMulti)
QDEL_NULL(aiRadio)
QDEL_NULL(aiCamera)
hack = null
return ..()

View File

@@ -13,7 +13,7 @@
if(mind && mind.current == src)
spellremove(src)
ghostize()
qdel_null(plane_holder)
QDEL_NULL(plane_holder)
..()
return QDEL_HINT_HARDDEL_NOW

View File

@@ -11,7 +11,7 @@
my_mob = this_guy
//It'd be nice to lazy init these but some of them are important to just EXIST. Like without ghost planemaster, you can see ghosts. Go figure.
// 'Utility' planes
plane_masters[VIS_FULLBRIGHT] = new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects)
plane_masters[VIS_LIGHTING] = new /obj/screen/plane_master/lighting //Lighting system (but different!)
@@ -44,7 +44,7 @@
/datum/plane_holder/Destroy()
my_mob = null
qdel_null_list(plane_masters) //Goodbye my children, be free
QDEL_NULL_LIST(plane_masters) //Goodbye my children, be free
return ..()
/datum/plane_holder/proc/set_vis(var/which = null, var/state = FALSE)

View File

@@ -110,7 +110,7 @@
/obj/structure/hoist/Destroy()
if(hoistee)
release_hoistee()
qdel_null(src.source_hook)
QDEL_NULL(src.source_hook)
return ..()
/obj/effect/hoist_hook/Destroy()
@@ -139,7 +139,7 @@
desc += " It looks broken, and the clamp has retracted back into the hoist. Seems like you'd have to re-deploy it to get it to work again."
if(hoistee)
release_hoistee()
qdel_null(source_hook)
QDEL_NULL(source_hook)
/obj/structure/hoist/ex_act(severity)
switch(severity)

View File

@@ -29,7 +29,7 @@
return QDEL_HINT_QUEUE
/mob/Destroy()
qdel_null(shadow)
QDEL_NULL(shadow)
. = ..()
/mob/zshadow/examine(mob/user, distance, infix, suffix)

View File

@@ -1,3 +1,5 @@
GLOBAL_DATUM_INIT(nanomanager, /datum/nanomanager, new) // NanoManager, the manager for Nano UIs.
// This is the window/UI manager for Nano UI
// There should only ever be one (global) instance of nanomanger
/datum/nanomanager

View File

@@ -55,7 +55,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
brainmob.client.screen.len = null //clear the hud
/obj/item/organ/internal/brain/Destroy()
qdel_null(brainmob)
QDEL_NULL(brainmob)
. = ..()
/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H)

View File

@@ -30,7 +30,7 @@
default_apply_parts()
/obj/machinery/power/tesla_coil/Destroy()
qdel_null(wires)
QDEL_NULL(wires)
return ..()
/obj/machinery/power/tesla_coil/RefreshParts()

View File

@@ -31,9 +31,9 @@
/obj/item/weapon/gun/magnetic/Destroy()
processing_objects.Remove(src)
qdel_null(cell)
qdel_null(loaded)
qdel_null(capacitor)
QDEL_NULL(cell)
QDEL_NULL(loaded)
QDEL_NULL(capacitor)
. = ..()
/obj/item/weapon/gun/magnetic/get_cell()

View File

@@ -20,7 +20,7 @@
return ..()
/obj/item/projectile/arc/Destroy()
qdel_null(shadow)
QDEL_NULL(shadow)
return ..()
/obj/item/projectile/arc/Bump(atom/A, forced=0)

View File

@@ -42,7 +42,7 @@
return ..()
/obj/machinery/shield_gen/Destroy()
qdel_null_list(field)
QDEL_NULL_LIST(field)
return ..()
/obj/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user)

View File

@@ -50,7 +50,7 @@
//spawn the cell you want in each vehicle
/obj/vehicle/Destroy()
qdel_null(riding_datum)
QDEL_NULL(riding_datum)
return ..()
//BUCKLE HOOKS