Merge pull request #8971 from PolarisSS13/revert-8942-fixrobonotclearing

Revert "fixes a memory leak with mannequins and the issue that then comes with fixing it"
This commit is contained in:
Atermonera
2023-02-26 16:41:05 -08:00
committed by GitHub
9 changed files with 15 additions and 102 deletions
+9 -7
View File
@@ -23,6 +23,8 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER)
#define all_genders_text_list list("Male","Female","Plural","Neuter")
var/global/list/mannequins_
// Times that players are allowed to respawn ("ckey" = world.time)
GLOBAL_LIST_EMPTY(respawn_timers)
@@ -102,13 +104,13 @@ var/global/list/string_slot_flags = list(
"holster" = SLOT_HOLSTER
)
GLOBAL_LIST_EMPTY(mannequins)
/proc/get_mannequin(var/ckey = "NULL")
var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey]
if(!istype(M))
GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin(null)
M = GLOB.mannequins[ckey]
return M
/proc/get_mannequin(var/ckey)
if(!mannequins_)
mannequins_ = new()
. = mannequins_[ckey]
if(!.)
. = new/mob/living/carbon/human/dummy/mannequin()
mannequins_[ckey] = .
//////////////////////////
/////Initial Building/////
@@ -373,9 +373,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/status = pref.organ_data[name]
var/obj/item/organ/external/O = character.organs_by_name[name]
if(O)
if(status == null)
O.derobotize()
else if(status == "amputated")
if(status == "amputated")
O.remove_rejuv()
else if(status == "cyborg")
if(pref.rlimb_data[name])
@@ -385,15 +383,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
for(var/name in list(O_HEART,O_EYES,O_VOICE,O_LUNGS,O_LIVER,O_KIDNEYS,O_SPLEEN,O_STOMACH,O_INTESTINE,O_BRAIN))
var/status = pref.organ_data[name]
if(!status)
continue
var/obj/item/organ/I = character.internal_organs_by_name[name]
if(istype(I, /obj/item/organ/internal/brain))
var/obj/item/organ/external/E = character.get_organ(I.parent_organ)
if(E.robotic < ORGAN_ASSISTED)
continue
if(I)
if(status == null)
I.derobotize()
else if(status == "assisted")
if(status == "assisted")
I.mechassist()
else if(status == "mechanical")
I.robotize()
@@ -40,13 +40,6 @@
if(dead_icon)
dead_icon = "[initial(dead_icon)]_prosthetic"
/obj/item/organ/internal/derobotize()
. = ..()
if (!.) return
name = initial(name)
icon_state = initial(icon_state)
dead_icon = initial(dead_icon)
/obj/item/organ/internal/mechassist()
..()
name = "assisted [initial(name)]"
-6
View File
@@ -52,12 +52,6 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
/obj/item/organ/internal/brain/robotize()
replace_self_with(/obj/item/organ/internal/mmi_holder/posibrain)
/obj/item/organ/internal/brain/derobotize()
if (ispath(owner?.species?.has_organ?[O_BRAIN], /obj/item/organ/internal/brain))
replace_self_with(owner.species.has_organ[O_BRAIN])
else
replace_self_with(/obj/item/organ/internal/brain)
/obj/item/organ/internal/brain/mechassist()
replace_self_with(/obj/item/organ/internal/mmi_holder)
-4
View File
@@ -12,10 +12,6 @@
name = "optical sensor"
verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
/obj/item/organ/internal/eyes/derobotize()
. = ..()
verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color
/obj/item/organ/internal/eyes/robot
name = "optical sensor"
-5
View File
@@ -24,11 +24,6 @@
..()
standard_pulse_level = PULSE_NONE
/obj/item/organ/internal/heart/derobotize()
. = ..()
if (!.) return
standard_pulse_level = initial(standard_pulse_level)
/obj/item/organ/internal/heart/grey
icon_state = "heart_grey-on"
dead_icon = "heart_grey-off"
+1 -12
View File
@@ -274,9 +274,7 @@ var/global/list/organ_cache = list()
handle_organ_mod_special()
if(!ignore_prosthetic_prefs && owner && owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name)
var/status = owner.client.prefs.organ_data[organ_tag]
if(status == null)
derobotize()
else if(status == "assisted")
if(status == "assisted")
mechassist()
else if(status == "mechanical")
robotize()
@@ -341,15 +339,6 @@ var/global/list/organ_cache = list()
src.status &= ~ORGAN_BLEEDING
src.status &= ~ORGAN_CUT_AWAY
/obj/item/organ/proc/derobotize()
if (robotic < ORGAN_ROBOT)
return FALSE//already flesh
robotic = ORGAN_FLESH
min_bruised_damage = initial(min_bruised_damage)
min_broken_damage = initial(min_broken_damage)
butcherable = initial(butcherable)
return TRUE
/obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc
robotize()
robotic = ORGAN_ASSISTED
+1 -44
View File
@@ -480,9 +480,7 @@ This function completely restores a damaged organ to perfect condition.
if(owner && !ignore_prosthetic_prefs)
if(owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name)
var/status = owner.client.prefs.organ_data[organ_tag]
if(status == null)
derobotize()
else if(status == "amputated")
if(status == "amputated")
remove_rejuv()
else if(status == "cyborg")
var/robodata = owner.client.prefs.rlimb_data[organ_tag]
@@ -1152,47 +1150,6 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.refresh_modular_limb_verbs()
return 1
/obj/item/organ/external/derobotize(var/restore_organs = TRUE)
. = ..()
if (!.) return
var/obj/item/organ/external/parent = owner?.organs_by_name[parent_organ]
if (parent && parent.robotic) return FALSE
var/datum/robolimb/R = all_robolimbs[model]
if (R)
brute_mod /= R.robo_brute_mod
burn_mod /= R.robo_burn_mod
else
brute_mod = initial(brute_mod)
burn_mod = initial(burn_mod)
model = null
force_icon = initial(force_icon)
name = initial(name)
desc = initial(desc)
dislocated = initial(dislocated)
cannot_break = initial(cannot_break)
drop_sound = initial(drop_sound)
pickup_sound = initial(pickup_sound)
if (restore_organs && LAZYLEN(owner?.species?.has_organ))
for(var/obj/item/organ/thing in internal_organs)
if(istype(thing))
if (!(thing.organ_tag in owner.species.has_organ) && !istype(thing, /obj/item/organ/internal/brain))
internal_organs -= thing
owner.internal_organs_by_name[thing.organ_tag] = null
owner.internal_organs_by_name -= thing.organ_tag
owner.internal_organs.Remove(thing)
qdel(thing)
else
thing.derobotize()
for (var/organ_area in owner.species.has_organ)
if (owner.internal_organs_by_name[organ_area])
continue
var/obj/item/organ/internal/organtype = owner.species.has_organ[organ_area]
if (initial(organtype.parent_organ) == organ_tag)
owner.internal_organs_by_name[organ_area] = new organtype(owner, TRUE)
while(null in owner.internal_organs)
owner.internal_organs -= null
owner.refresh_modular_limb_verbs()
/obj/item/organ/external/proc/mutate()
if(src.robotic >= ORGAN_ROBOT)
return
-11
View File
@@ -39,11 +39,6 @@
owner.synthetic = R
return FALSE
/obj/item/organ/external/chest/derobotize()
. = ..()
if (!.) return
owner?.synthetic = null
/obj/item/organ/external/chest/handle_germ_effects()
. = ..() //Should return an infection level
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
@@ -298,12 +293,6 @@
LAZYREMOVE(organ_verbs, /mob/living/carbon/human/proc/setmonitor_state)
handle_organ_mod_special()
/obj/item/organ/external/head/derobotize()
. = ..()
if (!.) return
LAZYREMOVE(organ_verbs, /mob/living/carbon/human/proc/setmonitor_state)
handle_organ_mod_special()
/obj/item/organ/external/head/removed()
if(owner)
if(iscarbon(owner))