mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
-Adds simplemob radio. A "headset" that can be used and listened on by simplemobs. Adminspawn the item, shove it into your mob's contents, and link a reference to the item into the mob's mob_radio var. Additional keys can be added same way as regular headsets before "implanting" into the mob. -Adds leap/pounce verb for simplemobs. Essentially a copy of how the dogborg pounce works. -Couple fixes to borg/animal pounces. (makes the pounce "animation" reset to default_y instead of hardcoded crap. Also disables spin on simplemobs when pouncing. Unfun maybe, but that var can always be toggled ingame to get the sick ninja moves) -Adds adminbus switch to enable abuse mode on trasheater. (only skips the whitelist, blacklist still applies) -Fixes a bunch of icon updates on the vorecode. Humanmobs no longer get forced canary runtiming mob icon updates, and the existing mob icon updates are no longer simplemob exclusive (and thus broken for pAIs and such) -Earlyports a fix for mobs wandering off when grabbed. -Earlyports a fix for adding verbs to mobs via varedit. (Was utterly broken for anything that wasn't STRICTLY a root type of human, robot, or AI. Also now works for simplemobs as well.)
525 lines
16 KiB
Plaintext
525 lines
16 KiB
Plaintext
//DO NOT ADD MORE TO THIS FILE.
|
|
//Use vv_do_topic()!
|
|
/client/proc/view_var_Topic(href, href_list, hsrc)
|
|
if((usr.client != src) || !src.holder)
|
|
return
|
|
var/datum/target = locate(href_list["target"])
|
|
if(target)
|
|
target.vv_do_topic(href_list)
|
|
|
|
if(href_list["Vars"])
|
|
debug_variables(locate(href_list["Vars"]))
|
|
|
|
//~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records).
|
|
else if(href_list["rename"])
|
|
if(!check_rights(R_VAREDIT)) return
|
|
|
|
var/mob/M = locate(href_list["rename"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
var/new_name = sanitize(input(usr,"What would you like to name this mob?","Input a name",M.real_name) as text|null, MAX_NAME_LEN)
|
|
if( !new_name || !M ) return
|
|
|
|
message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].")
|
|
M.fully_replace_character_name(M.real_name,new_name)
|
|
href_list["datumrefresh"] = href_list["rename"]
|
|
|
|
else if(href_list["varnameedit"] && href_list["datumedit"])
|
|
if(!check_rights(R_VAREDIT)) return
|
|
|
|
var/D = locate(href_list["datumedit"])
|
|
if(!istype(D,/datum) && !istype(D,/client))
|
|
usr << "This can only be used on instances of types /client or /datum"
|
|
return
|
|
|
|
modify_variables(D, href_list["varnameedit"], 1)
|
|
|
|
else if(href_list["varnamechange"] && href_list["datumchange"])
|
|
if(!check_rights(R_VAREDIT)) return
|
|
|
|
var/D = locate(href_list["datumchange"])
|
|
if(!istype(D,/datum) && !istype(D,/client))
|
|
usr << "This can only be used on instances of types /client or /datum"
|
|
return
|
|
|
|
modify_variables(D, href_list["varnamechange"], 0)
|
|
|
|
else if(href_list["varnamemass"] && href_list["datummass"])
|
|
if(!check_rights(R_VAREDIT)) return
|
|
|
|
var/atom/A = locate(href_list["datummass"])
|
|
if(!istype(A))
|
|
usr << "This can only be used on instances of type /atom"
|
|
return
|
|
|
|
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
|
|
|
|
else if(href_list["mob_player_panel"])
|
|
if(!check_rights(0)) return
|
|
|
|
var/mob/M = locate(href_list["mob_player_panel"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
src.holder.show_player_panel(M)
|
|
href_list["datumrefresh"] = href_list["mob_player_panel"]
|
|
|
|
else if(href_list["give_spell"])
|
|
if(!check_rights(R_ADMIN|R_FUN)) return
|
|
|
|
var/mob/M = locate(href_list["give_spell"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
src.give_spell(M)
|
|
href_list["datumrefresh"] = href_list["give_spell"]
|
|
|
|
else if(href_list["give_modifier"])
|
|
if(!check_rights(R_ADMIN|R_FUN|R_DEBUG))
|
|
return
|
|
|
|
var/mob/living/M = locate(href_list["give_modifier"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob/living"
|
|
return
|
|
|
|
src.admin_give_modifier(M)
|
|
href_list["datumrefresh"] = href_list["give_modifier"]
|
|
|
|
else if(href_list["give_disease2"])
|
|
if(!check_rights(R_ADMIN|R_FUN)) return
|
|
|
|
var/mob/M = locate(href_list["give_disease2"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
src.give_disease2(M)
|
|
href_list["datumrefresh"] = href_list["give_spell"]
|
|
|
|
else if(href_list["godmode"])
|
|
if(!check_rights(R_REJUVINATE)) return
|
|
|
|
var/mob/M = locate(href_list["godmode"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
src.cmd_admin_godmode(M)
|
|
href_list["datumrefresh"] = href_list["godmode"]
|
|
|
|
else if(href_list["gib"])
|
|
if(!check_rights(0)) return
|
|
|
|
var/mob/M = locate(href_list["gib"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
src.cmd_admin_gib(M)
|
|
|
|
else if(href_list["build_mode"])
|
|
if(!check_rights(R_BUILDMODE)) return
|
|
|
|
var/mob/M = locate(href_list["build_mode"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
togglebuildmode(M)
|
|
href_list["datumrefresh"] = href_list["build_mode"]
|
|
|
|
else if(href_list["drop_everything"])
|
|
if(!check_rights(R_DEBUG|R_ADMIN)) return
|
|
|
|
var/mob/M = locate(href_list["drop_everything"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
if(usr.client)
|
|
usr.client.cmd_admin_drop_everything(M)
|
|
|
|
else if(href_list["direct_control"])
|
|
if(!check_rights(0)) return
|
|
|
|
var/mob/M = locate(href_list["direct_control"])
|
|
if(!istype(M))
|
|
usr << "This can only be used on instances of type /mob"
|
|
return
|
|
|
|
if(usr.client)
|
|
usr.client.cmd_assume_direct_control(M)
|
|
|
|
else if(href_list["make_skeleton"])
|
|
if(!check_rights(R_FUN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["make_skeleton"])
|
|
if(!istype(H))
|
|
usr << "This can only be used on instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
H.ChangeToSkeleton()
|
|
href_list["datumrefresh"] = href_list["make_skeleton"]
|
|
|
|
else if(href_list["delall"])
|
|
if(!check_rights(R_DEBUG|R_SERVER))
|
|
return
|
|
|
|
var/obj/O = locate(href_list["delall"])
|
|
if(!isobj(O))
|
|
to_chat(usr, "This can only be used on instances of type /obj")
|
|
return
|
|
|
|
var/action_type = alert("Strict type ([O.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel")
|
|
if(action_type == "Cancel" || !action_type)
|
|
return
|
|
|
|
if(alert("Are you really sure you want to delete all objects of type [O.type]?",,"Yes","No") != "Yes")
|
|
return
|
|
|
|
if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes")
|
|
return
|
|
|
|
var/O_type = O.type
|
|
switch(action_type)
|
|
if("Strict type")
|
|
var/i = 0
|
|
for(var/obj/Obj in world)
|
|
if(Obj.type == O_type)
|
|
i++
|
|
qdel(Obj)
|
|
CHECK_TICK
|
|
if(!i)
|
|
to_chat(usr, "No objects of this type exist")
|
|
return
|
|
log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
|
|
message_admins("<span class='notice'>[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) </span>")
|
|
if("Type and subtypes")
|
|
var/i = 0
|
|
for(var/obj/Obj in world)
|
|
if(istype(Obj,O_type))
|
|
i++
|
|
qdel(Obj)
|
|
CHECK_TICK
|
|
if(!i)
|
|
to_chat(usr, "No objects of this type exist")
|
|
return
|
|
log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
|
|
message_admins("<span class='notice'>[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) </span>")
|
|
|
|
else if(href_list["rotatedatum"])
|
|
if(!check_rights(0)) return
|
|
|
|
var/atom/A = locate(href_list["rotatedatum"])
|
|
if(!istype(A))
|
|
usr << "This can only be done to instances of type /atom"
|
|
return
|
|
|
|
switch(href_list["rotatedir"])
|
|
if("right") A.set_dir(turn(A.dir, -45))
|
|
if("left") A.set_dir(turn(A.dir, 45))
|
|
href_list["datumrefresh"] = href_list["rotatedatum"]
|
|
|
|
else if(href_list["makemonkey"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["makemonkey"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
|
|
|
|
else if(href_list["makerobot"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
|
|
|
|
else if(href_list["makealien"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["makealien"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
holder.Topic(href, list("makealien"=href_list["makealien"]))
|
|
|
|
else if(href_list["makeai"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["makeai"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
holder.Topic(href, list("makeai"=href_list["makeai"]))
|
|
|
|
else if(href_list["setspecies"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/human/H = locate(href_list["setspecies"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
|
return
|
|
|
|
var/new_species = input("Please choose a new species.","Species",null) as null|anything in all_species
|
|
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
if(H.set_species(new_species))
|
|
usr << "Set species of [H] to [H.species]."
|
|
else
|
|
usr << "Failed! Something went wrong."
|
|
|
|
else if(href_list["addlanguage"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/H = locate(href_list["addlanguage"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob"
|
|
return
|
|
|
|
var/new_language = input("Please choose a language to add.","Language",null) as null|anything in all_languages
|
|
|
|
if(!new_language)
|
|
return
|
|
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
if(H.add_language(new_language))
|
|
usr << "Added [new_language] to [H]."
|
|
else
|
|
usr << "Mob already knows that language."
|
|
|
|
else if(href_list["remlanguage"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/H = locate(href_list["remlanguage"])
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob"
|
|
return
|
|
|
|
if(!H.languages.len)
|
|
usr << "This mob knows no languages."
|
|
return
|
|
|
|
var/datum/language/rem_language = input("Please choose a language to remove.","Language",null) as null|anything in H.languages
|
|
|
|
if(!rem_language)
|
|
return
|
|
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
if(H.remove_language(rem_language.name))
|
|
usr << "Removed [rem_language] from [H]."
|
|
else
|
|
usr << "Mob doesn't know that language."
|
|
|
|
else if(href_list["addverb"])
|
|
if(!check_rights(R_DEBUG)) return
|
|
|
|
var/mob/living/H = locate(href_list["addverb"])
|
|
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob/living"
|
|
return
|
|
var/list/possibleverbs = list()
|
|
possibleverbs += "Cancel" // One for the top...
|
|
possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb)
|
|
if(istype(H,/mob/living/carbon/human))
|
|
possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc)
|
|
if(istype(H,/mob/living/silicon/robot))
|
|
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb)
|
|
if(istype(H,/mob/living/silicon/ai))
|
|
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
|
|
if(istype(H,/mob/living/simple_mob))
|
|
possibleverbs += typesof(/mob/living/simple_mob/proc,/mob/living/simple_mob/verb) //VOREStation edit, Apparently polaris simplemobs have no verbs at all.
|
|
possibleverbs -= H.verbs
|
|
possibleverbs += "Cancel" // ...And one for the bottom
|
|
|
|
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
if(!verb || verb == "Cancel")
|
|
return
|
|
else
|
|
H.verbs += verb
|
|
|
|
else if(href_list["remverb"])
|
|
if(!check_rights(R_DEBUG)) return
|
|
|
|
var/mob/H = locate(href_list["remverb"])
|
|
|
|
if(!istype(H))
|
|
usr << "This can only be done to instances of type /mob"
|
|
return
|
|
var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs
|
|
if(!H)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
if(!verb)
|
|
return
|
|
else
|
|
H.verbs -= verb
|
|
|
|
else if(href_list["addorgan"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/M = locate(href_list["addorgan"])
|
|
if(!istype(M))
|
|
usr << "This can only be done to instances of type /mob/living/carbon"
|
|
return
|
|
|
|
var/new_organ = input("Please choose an organ to add.","Organ",null) as null|anything in typesof(/obj/item/organ)-/obj/item/organ
|
|
if(!new_organ) return
|
|
|
|
if(!M)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
if(locate(new_organ) in M.internal_organs)
|
|
usr << "Mob already has that organ."
|
|
return
|
|
|
|
new new_organ(M)
|
|
|
|
|
|
else if(href_list["remorgan"])
|
|
if(!check_rights(R_SPAWN)) return
|
|
|
|
var/mob/living/carbon/M = locate(href_list["remorgan"])
|
|
if(!istype(M))
|
|
usr << "This can only be done to instances of type /mob/living/carbon"
|
|
return
|
|
|
|
var/obj/item/organ/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs
|
|
|
|
if(!M)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
if(!(locate(rem_organ) in M.internal_organs))
|
|
usr << "Mob does not have that organ."
|
|
return
|
|
|
|
usr << "Removed [rem_organ] from [M]."
|
|
rem_organ.removed()
|
|
qdel(rem_organ)
|
|
|
|
else if(href_list["fix_nano"])
|
|
if(!check_rights(R_DEBUG)) return
|
|
|
|
var/mob/H = locate(href_list["fix_nano"])
|
|
|
|
if(!istype(H) || !H.client)
|
|
usr << "This can only be done on mobs with clients"
|
|
return
|
|
|
|
SSnanoui.send_resources(H.client)
|
|
|
|
usr << "Resource files sent"
|
|
H << "Your NanoUI Resource files have been refreshed"
|
|
|
|
log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ")
|
|
|
|
else if(href_list["regenerateicons"])
|
|
if(!check_rights(0)) return
|
|
|
|
var/mob/M = locate(href_list["regenerateicons"])
|
|
if(!ismob(M))
|
|
usr << "This can only be done to instances of type /mob"
|
|
return
|
|
M.regenerate_icons()
|
|
|
|
else if(href_list["adjustDamage"] && href_list["mobToDamage"])
|
|
if(!check_rights(R_DEBUG|R_ADMIN|R_FUN)) return
|
|
|
|
var/mob/living/L = locate(href_list["mobToDamage"])
|
|
if(!istype(L)) return
|
|
|
|
var/Text = href_list["adjustDamage"]
|
|
|
|
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
|
|
|
|
if(!L)
|
|
usr << "Mob doesn't exist anymore"
|
|
return
|
|
|
|
switch(Text)
|
|
if("brute") L.adjustBruteLoss(amount)
|
|
if("fire") L.adjustFireLoss(amount)
|
|
if("toxin") L.adjustToxLoss(amount)
|
|
if("oxygen")L.adjustOxyLoss(amount)
|
|
if("brain") L.adjustBrainLoss(amount)
|
|
if("clone") L.adjustCloneLoss(amount)
|
|
else
|
|
usr << "You caused an error. DEBUG: Text:[Text] Mob:[L]"
|
|
return
|
|
|
|
if(amount != 0)
|
|
log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [L]")
|
|
message_admins("<span class='notice'>[key_name(usr)] dealt [amount] amount of [Text] damage to [L]</span>")
|
|
href_list["datumrefresh"] = href_list["mobToDamage"]
|
|
else if(href_list["expose"])
|
|
if(!check_rights(R_ADMIN, FALSE))
|
|
return
|
|
var/thing = locate(href_list["expose"])
|
|
if(!thing) //Do NOT QDELETED check!
|
|
return
|
|
var/value = vv_get_value(VV_CLIENT)
|
|
if (value["class"] != VV_CLIENT)
|
|
return
|
|
var/client/C = value["value"]
|
|
if (!C)
|
|
return
|
|
var/prompt = alert("Do you want to grant [C] access to view this VV window? (they will not be able to edit or change anysrc nor open nested vv windows unless they themselves are an admin)", "Confirm", "Yes", "No")
|
|
if (prompt != "Yes")
|
|
return
|
|
if(!thing)
|
|
to_chat(usr, "<span class='warning'>The object you tried to expose to [C] no longer exists (GC'd)</span>")
|
|
return
|
|
message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a <a href='?_src_=vars;datumrefresh=\ref[thing]'>VV window</a>")
|
|
log_admin("Admin [key_name(usr)] Showed [key_name(C)] a VV window of a [src]")
|
|
to_chat(C, "[holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window")
|
|
C.debug_variables(thing)
|
|
|
|
if(href_list["datumrefresh"])
|
|
var/datum/DAT = locate(href_list["datumrefresh"])
|
|
if(istype(DAT, /datum) || istype(DAT, /client))
|
|
debug_variables(DAT)
|
|
|