/datum/admins/var/datum/partmod_holder/part_modifier = null var/list/default_organ_paths = list("head" = /obj/item/organ/head, "skull" = /obj/item/skull, "brain" = /obj/item/organ/brain, "left_eye" = /obj/item/organ/eye, "right_eye" = /obj/item/organ/eye, "chest" = /obj/item/organ/chest, "heart" = /obj/item/organ/heart, "left_lung" = /obj/item/organ/lung, "right_lung" = /obj/item/organ/lung, "butt" = /obj/item/clothing/head/butt, "liver" = /obj/item/organ/liver, "stomach" = /obj/item/organ/stomach, "intestines" = /obj/item/organ/intestines, "pancreas" = /obj/item/organ/pancreas, "spleen" = /obj/item/organ/spleen, "appendix" = /obj/item/organ/appendix, "left_kidney" = /obj/item/organ/kidney, "right_kidney" = /obj/item/organ/kidney) var/list/default_limb_paths = list("l_arm" = /obj/item/parts/human_parts/arm/left, "r_arm" = /obj/item/parts/human_parts/arm/right, "l_leg" = /obj/item/parts/human_parts/leg/left, "r_leg" = /obj/item/parts/human_parts/leg/right) /client/proc/modify_parts(var/mob/living/carbon/human/target as mob) set category = "Special Verbs" admin_only if (!istype(target)) return if (!target.limbs) boutput(src, "Mob limb holder is broken.") return if (!target.organHolder) boutput(src, "Mob organ holder is broken.") return if (!src.holder.part_modifier) src.holder.part_modifier = new src.holder.part_modifier.show_window(target, src) /datum/partmod_holder Topic(href, href_list) ..() if (!href_list["action"] || !usr) return usr_admin_only switch (href_list["action"]) // refresh if ("refresh") var/mob/living/carbon/human/H = locate(href_list["target"]) if (!H) return src.show_window(H, usr) // view vars if ("view_vars") if (!usr.client || !(usr.client.holder && usr.client.holder.level >= LEVEL_PA)) boutput(usr, "Error: you must be a Primary Administrator or higher to view and edit vars.") return var/obj/O = locate(href_list["target"]) if (!O) boutput(usr, "Error: invalid target.") return usr.client.debug_variables(O) // sever limbs if ("sever_limb") var/datum/human_limbs/limbs = locate(href_list["target"]) var/target_limb = href_list["part"] if (!limbs || !target_limb || !limbs.holder) boutput(usr, "Error: invalid target limb(s).") return if (limbs.sever(target_limb, usr)) // returns 1 when at least one limb is severed message_admins("[key_name(usr)] severed [key_name(limbs.holder)]'s limb(s): [uppertext(target_limb)]") src.show_window(limbs.holder, usr) // replace limbs if ("replace_limb") var/datum/human_limbs/limbs = locate(href_list["target"]) var/target_limb = href_list["part"] if (!limbs || !target_limb || !limbs.holder) boutput(usr, "Error: invalid target limb(s).") return var/new_type = get_one_match(input("Type path", "Type path", "[ispath(default_limb_paths[target_limb]) ? default_limb_paths[target_limb] : /obj/item/parts/human_parts]"), /obj) if (!new_type) return if (!ispath(new_type, /obj/item)) if (!(usr.client && usr.client.holder && usr.client.holder.level >= LEVEL_PA)) boutput(usr, "You need to be at least a Primary Admin to give people limbs that aren't /obj/item things!") return if (alert(usr, "Giving someone an arm that isn't an /obj/item WILL cause runtimes! Runtimes are bad! Be sure you want to do this!", "WARNING", "OK", "Cancel") == "Cancel") return if (limbs.replace_with(target_limb, new_type, usr)) // returns 1 or greater when at least one limb is replaced message_admins("[key_name(usr)] replaced [key_name(limbs.holder)]'s limb(s): [uppertext(target_limb)] (new type: [new_type])") src.show_window(limbs.holder, usr) // replace all limbs if ("replace_all_limbs") var/datum/human_limbs/limbs = locate(href_list["target"]) if (!limbs || !limbs.holder) boutput(usr, "Error: invalid target.") return limbs.create() logTheThing("admin", usr, limbs.holder, "replaced all of %target%'s missing limbs") message_admins("[key_name(usr)] replaced all of [key_name(limbs.holder)]'s missing limbs") limbs.holder.set_body_icon_dirty() src.show_window(limbs.holder, usr) // randomise limb if ("randomise_limb") var/datum/human_limbs/limbs = locate(href_list["target"]) var/target_limb = href_list["part"] if(target_limb == "both_arms") var/count = 0 if(limbs.replace_with("l_arm", pick(typesof(/obj/item/parts/human_parts/arm/left) - /obj/item/parts/human_parts/arm/left/item), usr)) count++ if(limbs.replace_with("r_arm", pick(typesof(/obj/item/parts/human_parts/arm/right) - /obj/item/parts/human_parts/arm/right/item), usr)) count++ if(count > 0) message_admins("[key_name(usr)] randomised [count > 1 ? "both" : "one"] of [key_name(limbs.holder)]'s arms. New arms: [limbs.l_arm.type], [limbs.r_arm.type]") else if(target_limb == "both_legs") var/count = 0 if(limbs.replace_with("l_leg", pick(typesof(/obj/item/parts/human_parts/leg/left)), usr)) count++ if(limbs.replace_with("r_leg", pick(typesof(/obj/item/parts/human_parts/leg/right)), usr)) count++ if(count > 0) message_admins("[key_name(usr)] randomised [count > 1 ? "both" : "one"] of [key_name(limbs.holder)]'s legs. New legs: [limbs.l_leg.type], [limbs.r_leg.type]") else if (!limbs || !target_limb || !limbs.holder || !ispath(default_limb_paths[target_limb])) boutput(usr, "Error: invalid target limb(s).") return var/targetPath = default_limb_paths[target_limb] var/new_type = pick(typesof(targetPath) - text2path("[targetPath]/item")) if (!new_type) return if (limbs.replace_with(target_limb, new_type, usr)) // returns 1 or greater when at least one limb is replaced message_admins("[key_name(usr)] randomised [key_name(limbs.holder)]'s limb: [uppertext(target_limb)] (new type: [new_type])") src.show_window(limbs.holder, usr) // randomise all limbs if ("randomise_all_limbs") var/datum/human_limbs/limbs = locate(href_list["target"]) if (!limbs || !limbs.holder) boutput(usr, "Error: invalid target.") return var/count = 0 if(limbs.replace_with("l_arm", pick(typesof(/obj/item/parts/human_parts/arm/left) - /obj/item/parts/human_parts/arm/left/item), usr)) count++ if(limbs.replace_with("r_arm", pick(typesof(/obj/item/parts/human_parts/arm/right) - /obj/item/parts/human_parts/arm/right/item), usr)) count++ if(limbs.replace_with("l_leg", pick(typesof(/obj/item/parts/human_parts/leg/left)), usr)) count++ if(limbs.replace_with("r_leg", pick(typesof(/obj/item/parts/human_parts/leg/right)), usr)) count++ if(count > 0) message_admins("[key_name(usr)] randomised [count] of [key_name(limbs.holder)]'s limbs. New limbs: [limbs.l_arm.type], [limbs.r_arm.type], [limbs.l_leg.type], [limbs.r_leg.type]") // drop organs if ("drop_organ") var/datum/organHolder/organs = locate(href_list["target"]) var/target_organ = href_list["part"] if (!organs || !target_organ || !organs.donor) boutput(usr, "Error: invalid target organ(s).") return if (target_organ == "all" && alert(usr, "Are you sure you want to make [organs.donor] drop every single organ? This will kill them!", "Confirmation", "Yes", "No") == "No") return if (organs.drop_organ(target_organ, null)) // returns with the organ when at least one organ is dropped logTheThing("admin", usr, organs.donor, "made %target% drop their organ(s): [uppertext(target_organ)]") message_admins("[key_name(usr)] made [key_name(organs.donor)] drop their organ(s): [uppertext(target_organ)]") src.show_window(organs.donor, usr) // replace organs if ("replace_organ") var/datum/organHolder/organs = locate(href_list["target"]) var/target_organ = href_list["part"] if (!organs || !target_organ || !organs.donor) boutput(usr, "Error: invalid target organ(s).") return var/new_type = get_one_match(input("Type path", "Type path", "[ispath(default_organ_paths[target_organ]) ? default_organ_paths[target_organ] : /obj/item/organ]"), /obj) if (!new_type) return if (!ispath(new_type, /obj/item)) if (!(usr.client && usr.client.holder && usr.client.holder.level >= LEVEL_PA)) boutput(usr, "You need to be at least a Primary Admin to give people organs that aren't /obj/item things!") return if (alert(usr, "Giving someone an organ that isn't an /obj/item WILL cause runtimes! Runtimes are bad! Be sure you want to do this!", "WARNING", "OK", "Cancel") == "Cancel") return var/obj/item/I = new new_type(organs.donor) if (organs.receive_organ(I, target_organ, 0.0, 1)) // returns 1 if replace was successful logTheThing("admin", usr, organs.donor, "replaced %target%'s [uppertext(target_organ)] with [new_type]") message_admins("[key_name(usr)] replaced [key_name(organs.donor)]'s organ(s): [uppertext(target_organ)] (new type: [new_type])") else qdel(I) // ugly :/ src.show_window(organs.donor, usr) // replace all organs if ("replace_all_organs") var/datum/organHolder/organs = locate(href_list["target"]) if (!organs || !organs.donor) boutput(usr, "Error: invalid target.") return organs.create_organs() logTheThing("admin", usr, organs.donor, "replaced all of %target%'s missing organs") message_admins("[key_name(usr)] replaced all of [key_name(organs.donor)]'s missing organs") organs.donor.set_body_icon_dirty() src.show_window(organs.donor, usr) proc/show_window(var/mob/living/carbon/human/target as mob, var/mob/user) if (!istype(target) || !user) return if (!target.limbs) if (alert(user, "[target]'s limb holder is broken, recreate?", "Error", "Yes", "No") == "Yes") target.limbs = new(target) else return if (!target.organHolder) if (alert(user, "[target]'s organ holder is broken, recreate?", "Error", "Yes", "No") == "Yes") target.organHolder = new(target) else return var/datum/human_limbs/limbs = target.limbs var/datum/organHolder/organs = target.organHolder var/see_vars = 0 if (ismob(user) && user.client && user.client.holder && user.client.holder.level >= LEVEL_PA) see_vars = 1 else if (isclient(user)) var/client/C = user if (C.holder && C.holder.level >= LEVEL_PA) see_vars = 1 else if (usr && usr.client && usr.client.holder && usr.client.holder.level >= LEVEL_PA) // ONE OF YOU HAS TO EXIST see_vars = 1 var/HTML = {"

Part Modifier: [see_vars ? "[target]" : "[target]"]

Refresh
[see_vars ? "" : null] [(see_vars) ? "[limbs.l_arm ? "" : ""]" : null] [(see_vars) ? "[limbs.r_arm ? "" : ""]" : null] [(see_vars) ? "[limbs.l_leg ? "" : ""]" : null] [(see_vars) ? "[limbs.r_leg ? "" : ""]" : null] [see_vars ? "" : null] [see_vars ? "" : null] [see_vars ? "" : null]
Limb Name Type Sever New RandomVars
Left Arm [limbs.l_arm ? limbs.l_arm : "None"] [limbs.l_arm ? limbs.l_arm.type : "None"] \[X\] \[X\] \[X\]\[X\]None
Right Arm [limbs.r_arm ? limbs.r_arm : "None"] [limbs.r_arm ? limbs.r_arm.type : "None"] \[X\] \[X\] \[X\]\[X\]None
Left Leg [limbs.l_leg ? limbs.l_leg : "None"] [limbs.l_leg ? limbs.l_leg.type : "None"] \[X\] \[X\] \[X\]\[X\]None
Right Leg [limbs.r_leg ? limbs.r_leg : "None"] [limbs.r_leg ? limbs.r_leg.type : "None"] \[X\] \[X\] \[X\]\[X\]None
Both Arms N/A N/A \[X\] \[X\] \[X\]N/A
Both Legs N/A N/A \[X\] \[X\] \[X\]N/A
All Limbs N/A N/A \[X\] \[X\] \[X\]\[X\]

[see_vars ? "" : null] [(see_vars) ? "[organs.skull ? "" : ""]" : null] [(see_vars) ? "[organs.skull ? "" : ""]" : null] [(see_vars) ? "[organs.brain ? "" : ""]" : null] [(see_vars) ? "[organs.left_eye ? "" : ""]" : null] [(see_vars) ? "[organs.right_eye ? "" : ""]" : null] [(see_vars) ? "[organs.chest ? "" : ""]" : null] [(see_vars) ? "[organs.heart ? "" : ""]" : null] [(see_vars) ? "[organs.left_lung ? "" : ""]" : null] [(see_vars) ? "[organs.right_lung ? "" : ""]" : null] [(see_vars) ? "[organs.butt ? "" : ""]" : null] --------------------------------- [(see_vars) ? "[organs.left_kidney ? "" : ""]" : null] [(see_vars) ? "[organs.right_kidney ? "" : ""]" : null] [(see_vars) ? "[organs.liver ? "" : ""]" : null] [(see_vars) ? "[organs.stomach ? "" : ""]" : null] [(see_vars) ? "[organs.intestines ? "" : ""]" : null] [(see_vars) ? "[organs.spleen ? "" : ""]" : null] [(see_vars) ? "[organs.pancreas ? "" : ""]" : null] [(see_vars) ? "[organs.appendix ? "" : ""]" : null] ------------------------------------ [see_vars ? "" : null]
Organ Name Type Drop NewVars
Head [organs.head ? organs.head : "None"] [organs.head ? organs.head.type : "None"] \[X\] \[X\]\[X\]None
Skull [organs.skull ? organs.skull : "None"] [organs.skull ? organs.skull.type : "None"] \[X\] \[X\]\[X\]None
Brain [organs.brain ? organs.brain : "None"] [organs.brain ? organs.brain.type : "None"] \[X\] \[X\]\[X\]None
Left Eye [organs.left_eye ? organs.left_eye : "None"] [organs.left_eye ? organs.left_eye.type : "None"] \[X\] \[X\]\[X\]None
Right Eye [organs.right_eye ? organs.right_eye : "None"] [organs.right_eye ? organs.right_eye.type : "None"] \[X\] \[X\]\[X\]None
Chest [organs.chest ? organs.chest : "None"] [organs.chest ? organs.chest.type : "None"] \[X\] \[X\]\[X\]None
Heart [organs.heart ? organs.heart : "None"] [organs.heart ? organs.heart.type : "None"] \[X\] \[X\]\[X\]None
Left Lung [organs.left_lung ? organs.left_lung : "None"] [organs.left_lung ? organs.left_lung.type : "None"] \[X\] \[X\]\[X\]None
Right Lung [organs.right_lung ? organs.right_lung : "None"] [organs.right_lung ? organs.right_lung.type : "None"] \[X\] \[X\]\[X\]None
Butt [organs.butt ? organs.butt : "None"] [organs.butt ? organs.butt.type : "None"] \[X\] \[X\]\[X\]None
Left Kidney [organs.left_kidney ? organs.left_kidney : "None"] [organs.left_kidney ? organs.left_kidney.type : "None"] \[X\] \[X\]\[X\]None
Right Kidney [organs.right_kidney ? organs.right_kidney : "None"] [organs.right_kidney ? organs.right_kidney.type : "None"] \[X\] \[X\]\[X\]None
Liver [organs.liver ? organs.liver : "None"] [organs.liver ? organs.liver.type : "None"] \[X\] \[X\]\[X\]None
Stomach [organs.stomach ? organs.stomach : "None"] [organs.stomach ? organs.stomach.type : "None"] \[X\] \[X\]\[X\]None
Intestines [organs.intestines ? organs.intestines : "None"] [organs.intestines ? organs.intestines.type : "None"] \[X\] \[X\]\[X\]None
Spleen [organs.spleen ? organs.spleen : "None"] [organs.spleen ? organs.spleen.type : "None"] \[X\] \[X\]\[X\]None
Pancreas [organs.pancreas ? organs.pancreas : "None"] [organs.pancreas ? organs.pancreas.type : "None"] \[X\] \[X\]\[X\]None
Appendix [organs.appendix ? organs.appendix : "None"] [organs.appendix ? organs.appendix.type : "None"] \[X\] \[X\]\[X\]None
All Organs N/A N/A \[X\] \[X\]\[X\]
"} user.Browse(HTML,"window=part_mod_[target.ckey ? target.ckey : target];size=680x680")