From 8a3caaae6b4611fb26299e8b5454fe1fa109a444 Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 23 Apr 2018 02:18:59 +0200 Subject: [PATCH] Mapping component helper (#37314) * Mapping component helper * GetAllContents so you can manipulate things in crates/onmobs/whatever * More verbose warning. --- code/modules/mapping/mapping_helpers.dm | 43 +++++++++++++++++++++++- icons/effects/mapping_helpers.dmi | Bin 1604 -> 2291 bytes 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 1786052ebe..9fed915c98 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -85,10 +85,11 @@ /obj/effect/mapping_helpers icon = 'icons/effects/mapping_helpers.dmi' icon_state = "" + var/late = FALSE /obj/effect/mapping_helpers/Initialize() ..() - return INITIALIZE_HINT_QDEL + return late ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_QDEL //airlock helpers @@ -156,3 +157,43 @@ GLOBAL_LIST_EMPTY(z_is_planet) var/turf/T = get_turf(src) GLOB.z_is_planet["[T.z]"] = TRUE + +//This helper applies components to things on the map directly. +/obj/effect/mapping_helpers/component_injector + name = "Component Injector" + late = TRUE + var/target_type + var/target_name + var/component_type + +//Late init so everything is likely ready and loaded (no warranty) +/obj/effect/mapping_helpers/component_injector/LateInitialize() + if(!ispath(component_type,/datum/component)) + CRASH("Wrong component type in [type] - [component_type] is not a component") + var/turf/T = get_turf(src) + for(var/atom/A in T.GetAllContents()) + if(A == src) + continue + if(target_name && A.name != target_name) + continue + if(target_type && !istype(A,target_type)) + continue + var/cargs = build_args() + A.AddComponent(arglist(cargs)) + qdel(src) + return + +/obj/effect/mapping_helpers/component_injector/proc/build_args() + return list(component_type) + +/obj/effect/mapping_helpers/component_injector/infective + name = "Infective Injector" + icon_state = "component_infective" + component_type = /datum/component/infective + var/disease_type + +/obj/effect/mapping_helpers/component_injector/infective/build_args() + if(!ispath(disease_type,/datum/disease)) + CRASH("Wrong disease type passed in.") + var/datum/disease/D = new disease_type() + return list(component_type,D) \ No newline at end of file diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index ae929c194eb9bb1b85182d1de23b1312edd6f38a..2cfa24f66ab34aa58d97ef271993a4b3ba0a8a2e 100644 GIT binary patch delta 2279 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 BM#umF delta 1587 zcmV-32F&^M5yT9TB!8KDR9JLGWpiV4X>fFDZ*Bkpc$|fe%?bh`6h_zj6qlKO^fOyG z;SernUO_}}Dc&?xCVKl814RV2`wpDL*TZo^*>ZLdu6Yn}*mLGF zTzp%hHq#IUbRB0dlnMfNoSlog;<{f#%9_k#{(2@9$~J2Iuz!RUQq&&lhUFa&zeCD4 zqWh{o?|K+#335{W35)R17P zD79;f|J0fuw12CNSG%j-+0njT?fb!kc09W?df&`@Gfykos@Lma=$NAJK+$0Vh+zSU zDaE~Dsalm`fB$r4#nSIi@rWhBQnf07?DYWYufcYygj?0BWD%khdj_~{mxeDrd3Xp+ zu~&q0DTfaORHhfD_jP4@QM!j;y??Olg6d}lEdjPmrJ=(le#UC- z+zyN@mFY#<*tu;58F|#-DbcdrxZRJAu}0O;qVWM;7Zl)rwvQb%)-msh_cNecrq*`_ z^p+XxoI$KOxuB(LReo=UzmHo|@?IbYu>=6p--x-RJnjhAy)JEH#{kv9LWoQCdVSSw zm;CX%lz&lm$K4-OWPaDA8a;|(gW^I~$-DqSbP@7qd>|(R0Ha07qwxU)0tg{4ndnFq zf<(xx@qvT_q!oZwydtD+d?CagA%qk{-0?e)OKx0{il3oV9Qn5V;!gmu9itD9<|y@Q3N&U)<7AA(<16pGc6G^6@@1xaeWB1BBpqY#+ zI$ADhd8;wlf|u83vAoqV+p7YhBS7tX`+o-Dq+&hiOiW@6;3lJ>1Yso1hZGqO!o+Y8 zCPph8y1dnZ>-WoRv-Z#D@0#qB7D{>;a9pBaS=#p+MWP_=#)FImVOw6?gtWVW`q0#H zStx_+>@MWBBkuJ`nW;`sOgh>%QuE>yeDvXYSoc2woW+8-ENJwq@vYTq50=_~Wq*`2 zAd{#c753g9VC!-da8_tOWkJ|mmz(IlJvd@~Z<)yz-^2)@j^3BM>p1nS3@D@5Qx-(+ z)Uz^P?ye73cYb9iS9}vA008^>g%vz_@$ks#^_GQ=UUe2dc<~U=FRTE{Eb^2YVd7$d zbDEn~(8LIkS0>2?%az4Pbv}0YEv0Hp`wi3(XXczrKe`1PG_`7!M(5Fim9+np>G)V@Zu|oy9D*V zj&SX$_6o(QjhG1o72e2Uq~(Itd$J2sh~k2V@N+pKZpaI}AO+3^5ffX0u#p~P7BCK$ zoI4ZAC&x8zK!R?#1CQPmT7R@q0ZfhPFfj@*0QIw>LI~3Kso@|@jPIB9#`P#RGfdD7 zus?1CU&~Jb{`%=y33Nf*Pk;mLrP-H4!ZCmt7JwKQfEX5l7#4t-&>!pQq5p4dg%Ikm zkn_I4Ab~SL{s;X2&##!1@8PNhu1erDc^2S(fl-2HK<(8{*spE^z%0K?@diNut0)r% lC*z3WAWRGkKnx2&%>Q}fCc_vCSRViY002ovPDHLkV1oTo^~(SN