diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index c8bc176b5a9..fac24d6dd4d 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -237,12 +237,12 @@ */ /datum/component/proc/_GetInverseTypeList(our_type = type) //we can do this one simple trick + . = list(our_type) var/current_type = parent_type - . = list(our_type, current_type) //and since most components are root level + 1, this won't even have to run while (current_type != /datum/component) current_type = type2parent(current_type) - . += current_type + . += current_type // The type arg is casted so initial works, you shouldn't be passing a real instance into this /** @@ -481,15 +481,16 @@ var/list/dc = _datum_components if(!dc) return - var/comps = dc[/datum/component] - if(islist(comps)) - for(var/datum/component/I in comps) - if(I.can_transfer) - target.TakeComponent(I) - else - var/datum/component/C = comps - if(C.can_transfer) - target.TakeComponent(comps) + for(var/component_key in dc) + var/component_or_list = dc[component_key] + if(islist(component_or_list)) + for(var/datum/component/I in component_or_list) + if(I.can_transfer) + target.TakeComponent(I) + else + var/datum/component/C = component_or_list + if(C.can_transfer) + target.TakeComponent(C) /** * Return the object that is the host of any UI's that this component has diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 67db3f62e28..3ad6a0fea11 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -128,13 +128,14 @@ //BEGIN: ECS SHIT var/list/dc = _datum_components if(dc) - var/all_components = dc[/datum/component] - if(length(all_components)) - for(var/datum/component/component as anything in all_components) - qdel(component, FALSE, TRUE) - else - var/datum/component/C = all_components - qdel(C, FALSE, TRUE) + for(var/component_key in dc) + var/component_or_list = dc[component_key] + if(islist(component_or_list)) + for(var/datum/component/component as anything in component_or_list) + qdel(component, FALSE, TRUE) + else + var/datum/component/C = component_or_list + qdel(C, FALSE, TRUE) dc.Cut() _clear_signal_refs()