mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
149 lines
5.6 KiB
Plaintext
149 lines
5.6 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_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/add_source
|
|
if(ispath(result, /datum/component))
|
|
var/datum/component/comp_path = result
|
|
if(initial(comp_path.dupe_mode) == COMPONENT_DUPE_SOURCES)
|
|
add_source = tgui_input_text(usr, "Enter a source for the component", "Add Component", "ADMIN-ABUSE")
|
|
if(isnull(add_source))
|
|
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, add_source)
|
|
else
|
|
datumname = "element"
|
|
target._AddElement(lst)
|
|
log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].")
|
|
message_admins("<span class='notice'>[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)].</span>")
|
|
|
|
if(href_list[VV_HK_MODIFY_GREYSCALE])
|
|
if(!check_rights(NONE))
|
|
return
|
|
var/datum/greyscale_modify_menu/menu = new(target, usr, SSgreyscale.configurations, vv_mode = TRUE)
|
|
menu.Unlock()
|
|
menu.ui_interact(usr)
|
|
|
|
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_CALLPROC])
|
|
usr.client.callproc_datum(target)
|