mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-29 19:11:51 +00:00
* Cleans up/renames as private some internal var definitions, removes some fucked uses of internal list vars (#75769) ## About The Pull Request [Improves the documentation of DCS lists, removes old list of callback docs that no longer apply](c3821d9f5f) [Adds a second signal register to decal rotating, adds a trait to objects under a tile. STOP DIRECTLY READING HIDDEN LISTS I SWEAR TO GOD](6b3f97a76a) [Removes direct reads of the timer list, they were redundant mostly](14fcd9f8a6) [Please stop directly reading/modifying the traits list to ensure your dna rot follows the brain](ec0e5237ec) [Marks internal datum lists as well internal with _](57c6577ff6) [57c6577](57c6577ff6) Does the same to _clear_signal_refs() in hopes of keeping people from touching it ## Why It's Good For The Game They pissed me off. Users should not be touching these lists, especially in ways that make assumptions about their structure and are thus prone to breaking if that ever changes. Most of these are close to zero cost changes, using a wrapper to solve the problem, or just yeeting it Two aren't, Decals with a direction have gained a second signal register on init, and things that sit underfloor (cables/pipes) now get a trait when inserted there. This should have a minimal impact on memory/init time, bugging @ Mothblocks about it just in case * Cleans up/renames as private some internal var definitions, removes some fucked uses of internal list vars * fix --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: ghost sheep <sheepwiththemask@gmail.com>
137 lines
5.3 KiB
Plaintext
137 lines
5.3 KiB
Plaintext
//Not using datum.vv_do_topic for very basic/low level debug things, incase the datum's vv_do_topic is runtiming/whatnot.
|
|
/client/proc/vv_do_basic(datum/target, href_list)
|
|
var/target_var = GET_VV_VAR_TARGET
|
|
if(check_rights(R_VAREDIT))
|
|
if(target_var)
|
|
if(href_list[VV_HK_BASIC_EDIT])
|
|
if(!modify_variables(target, target_var, 1))
|
|
return
|
|
switch(target_var)
|
|
if("name")
|
|
vv_update_display(target, "name", "[target]")
|
|
if("dir")
|
|
var/atom/A = target
|
|
if(istype(A))
|
|
vv_update_display(target, "dir", dir2text(A.dir) || A.dir)
|
|
if("ckey")
|
|
var/mob/living/L = target
|
|
if(istype(L))
|
|
vv_update_display(target, "ckey", L.ckey || "No ckey")
|
|
if("real_name")
|
|
var/mob/living/L = target
|
|
if(istype(L))
|
|
vv_update_display(target, "real_name", L.real_name || "No real name")
|
|
|
|
if(href_list[VV_HK_BASIC_CHANGE])
|
|
modify_variables(target, target_var, 0)
|
|
if(href_list[VV_HK_BASIC_MASSEDIT])
|
|
cmd_mass_modify_object_variables(target, target_var)
|
|
if(check_rights(R_ADMIN, FALSE))
|
|
if(href_list[VV_HK_EXPOSE])
|
|
var/value = vv_get_value(VV_CLIENT)
|
|
if (value["class"] != VV_CLIENT)
|
|
return
|
|
var/client/C = value["value"]
|
|
if (!C)
|
|
return
|
|
if(!target)
|
|
to_chat(usr, span_warning("The object you tried to expose to [C] no longer exists (nulled or hard-deled)"), confidential = TRUE)
|
|
return
|
|
message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a <a href='?_src_=vars;datumrefresh=[REF(target)]'>VV window</a>")
|
|
log_admin("Admin [key_name(usr)] Showed [key_name(C)] a VV window of a [target]")
|
|
to_chat(C, "[holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window", confidential = TRUE)
|
|
C.debug_variables(target)
|
|
if(check_rights(R_DEBUG))
|
|
if(href_list[VV_HK_DELETE])
|
|
usr.client.admin_delete(target)
|
|
if (isturf(target)) // show the turf that took its place
|
|
usr.client.debug_variables(target)
|
|
return
|
|
|
|
if(href_list[VV_HK_MARK])
|
|
usr.client.mark_datum(target)
|
|
if(href_list[VV_HK_TAG])
|
|
usr.client.tag_datum(target)
|
|
if(href_list[VV_HK_ADDCOMPONENT])
|
|
if(!check_rights(NONE))
|
|
return
|
|
var/list/names = list()
|
|
var/list/componentsubtypes = sort_list(subtypesof(/datum/component), GLOBAL_PROC_REF(cmp_typepaths_asc))
|
|
names += "---Components---"
|
|
names += componentsubtypes
|
|
names += "---Elements---"
|
|
names += sort_list(subtypesof(/datum/element), GLOBAL_PROC_REF(cmp_typepaths_asc))
|
|
var/result = tgui_input_list(usr, "Choose a component/element to add", "Add Component", names)
|
|
if(isnull(result))
|
|
return
|
|
if(!usr || result == "---Components---" || result == "---Elements---")
|
|
return
|
|
if(QDELETED(src))
|
|
to_chat(usr, "That thing doesn't exist anymore!", confidential = TRUE)
|
|
return
|
|
var/list/lst = get_callproc_args()
|
|
if(!lst)
|
|
return
|
|
var/datumname = "error"
|
|
lst.Insert(1, result)
|
|
if(result in componentsubtypes)
|
|
datumname = "component"
|
|
target._AddComponent(lst)
|
|
else
|
|
datumname = "element"
|
|
target._AddElement(lst)
|
|
log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(target)].")
|
|
message_admins(span_notice("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(target)]."))
|
|
if(href_list[VV_HK_REMOVECOMPONENT] || href_list[VV_HK_MASS_REMOVECOMPONENT])
|
|
if(!check_rights(NONE))
|
|
return
|
|
var/mass_remove = href_list[VV_HK_MASS_REMOVECOMPONENT]
|
|
var/list/components = list()
|
|
for(var/datum/component/component in target.GetComponents(/datum/component))
|
|
components += component.type
|
|
var/list/names = list()
|
|
names += "---Components---"
|
|
if(length(components))
|
|
names += sort_list(components, GLOBAL_PROC_REF(cmp_typepaths_asc))
|
|
names += "---Elements---"
|
|
// We have to list every element here because there is no way to know what element is on this object without doing some sort of hack.
|
|
names += sort_list(subtypesof(/datum/element), GLOBAL_PROC_REF(cmp_typepaths_asc))
|
|
var/path = tgui_input_list(usr, "Choose a component/element to remove. All elements listed here may not be on the datum.", "Remove element", names)
|
|
if(isnull(path))
|
|
return
|
|
if(!usr || path == "---Components---" || path == "---Elements---")
|
|
return
|
|
if(QDELETED(src))
|
|
to_chat(usr, "That thing doesn't exist anymore!")
|
|
return
|
|
var/list/targets_to_remove_from = list(target)
|
|
if(mass_remove)
|
|
var/method = vv_subtype_prompt(target.type)
|
|
targets_to_remove_from = get_all_of_type(target.type, method)
|
|
|
|
if(alert(usr, "Are you sure you want to mass-delete [path] on [target.type]?", "Mass Remove Confirmation", "Yes", "No") == "No")
|
|
return
|
|
|
|
for(var/datum/target_to_remove_from as anything in targets_to_remove_from)
|
|
if(ispath(path, /datum/element))
|
|
var/list/lst = get_callproc_args()
|
|
if(!lst)
|
|
lst = list()
|
|
lst.Insert(1, path)
|
|
target._RemoveElement(lst)
|
|
else
|
|
var/list/components_actual = target_to_remove_from.GetComponents(path)
|
|
for(var/to_delete in components_actual)
|
|
qdel(to_delete)
|
|
|
|
message_admins(span_notice("[key_name_admin(usr)] has [mass_remove? "mass" : ""] removed [path] component from [mass_remove? target.type : key_name_admin(target)]."))
|
|
if(href_list[VV_HK_MODIFY_GREYSCALE])
|
|
if(!check_rights(NONE))
|
|
return
|
|
var/datum/greyscale_modify_menu/menu = new(target, usr, SSgreyscale.configurations)
|
|
menu.Unlock()
|
|
menu.ui_interact(usr)
|
|
if(href_list[VV_HK_CALLPROC])
|
|
usr.client.callproc_datum(target)
|
|
|