From 100e69f1dc0751a97e2398e6acc8ee129e0dded8 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 1 Sep 2025 12:49:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 10752 -> 12288 bytes .../Thing_building/ARA_InteractiveEggSac.xml | 1 + Source/ArachnaeSwarm/CompSpawnPawnFromList.cs | 62 ++++++++++++++---- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index fec69070680a3b7425876f6c0b9c6c4f5d7a20e8..9311a0078a39b928efa277a1d4fe1983d4163e50 100644 GIT binary patch delta 4771 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 o|BB3kkLk(EvR+SGO@q+?g(ff+;9Ki zU;E$PB$g)@^lmNnUf!~wGG~ZNqgkwhs1yQ`7XGU>^{Yjp-K|7-OTluY<2)712_}ew z;1jJx#eR&}`b$`q{Yexe`78Cevl>?JA7fR_^DnW|g0rm<ki;7U zutg^ASTGqf3NqrwfR)@s;<)Gr>bV}`+Bt?})V9!V#VVV$iB|@ThbLhYw}r~}%B7!h zgy^UMg??pJ(TxW69MdstM`glAIx3Z3PR67=(S#-^<5!4S9AoM<^CEe95w8kH9!72l zYXaOGrwFpDk0EZg^yi!8n7hzpXE@@)u?8YJ@~){6d6;$$Rkz%{8{T;7Q@w_Jb;?=m z3BZ(l_27E4Kq4j;_5D!&_ki(OXcK9omcOV3Jiz|NYe3j|3Y9o zo9GwWEpxsBL67u9LhL>g7J^Zcx>2U>HA$E(VG1Cv9u`zCF$l;GK8RlUQ`b4=oNuT z;yjh6RpFnN%?2S0%|lr>J!?pOTNQK=aRjyLQv1G&a8=E$z`~s3bWte^RHYS`3|*;e zp9YDbLrOc*)q7yf(@et%LAU^lHMI?0xo5e z&e3^a5}s4azQqb52E_46>E8s(1EjxhJE)=EJLMhiWN56&HhNM$+Q!{u1FMn)=-{#cBlY-&nB5!j6 z(57*~(bT9UGl5}R2P~p(O7a}NfHwBwl^Mey3%!9F(559Ny(lb~?h{k!2(XQcm9|_- zCM(~26tU;lVC|t8`>p;nYGg@q zing);>MK}`4d@R7=NRkQKGtSzVC^*C-o}owS6GS-vcqgAyG9@D2VqlTA7SU%E_Rar zmGzsiv3|8%{UmqlGJ8OepJyN9@;(%D1}TNt*d6RDf^N}=;Wl9E{4=B%^g5l_^7w2j zF-w8>36C#OT{6B}Z{h)-ZB6A4@8fsy0?@O0j3>o>K8To0U@2!-MJ_e!b(BS4@H)yN zE3Va15mf=ps6lJPH+c|f16L?|MTVY0ww|D=v{Boun@y&Q#<)g>3 zaacBb%KRs`YKrv{@TB!A@G&GQ5gVPWN( z3VOc0@~*UeIac|rXF8I|&!vuM%|I~*-Ak9)68eYor{ZfE|Jk?Va= z=e@QyV%7u?@a@R-jEf8_5foY(hJ;cs+*OX=X~*2wIi7XKtX{n_>%wfj07 z-}V=mEv-yy!krk1vamaih1_p}8;6SA#5OHTmS!?O*0kJJ{>8HVko!2-g`0TVh(iC2 zUtC@uf5u6?5O&&`vzE&fRH&$+yDAuV6Z@FEYUDDFxrzNUk-Wew_+@a`g+gxPfSWiZ zBZS@Yusf2uxQU}~qCd?X4LXSv2s+3glHx{Hz$0mdqh;aUhO|!NIaKN-URU*=aY%O) zDg1}TO`LHO7fk#W?@n|l;;t9F6LX+{9DTWoi%_d7R~b=;KmzC_KJZ&BA{wURFRYj# z4C0|svA?xq%mOP)VW)@XkdPO*k&6&MB2Ll>1&BMz><~x@aLG2JoE7JnM{SHc={U)7 z*i9C|v;<|zX$``@guBU@|5?Rk!;}I0nksiN{|{BJd#d%;o?Mc2G!={Rv#ou@RWn#$ TsQPn_Uv21f>i*4A4d(vPassThroughOnly 0.3 false + Normal Light 20 diff --git a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs index ccdeb3c..d12c483 100644 --- a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs @@ -48,25 +48,65 @@ namespace ArachnaeSwarm if (spawnUntilTick > 0 && Find.TickManager.TicksGame >= spawnUntilTick) { SpawnPawn(spawningPawnKind); - spawnUntilTick = -1; - spawningPawnKind = null; } } private void SpawnPawn(PawnKindDef pawnKind) { - Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); - GenSpawn.Spawn(pawn, parent.Position, parent.Map); - - if (Props.lordJob != null) + try { - Lord lord = LordMaker.MakeNewLord(parent.Faction, (LordJob)System.Activator.CreateInstance(Props.lordJob), parent.Map); - lord.AddPawn(pawn); + if (pawnKind == null) + { + Log.Warning("CompSpawnPawnFromList: Tried to spawn pawn but pawnKind is null."); + return; + } + + if (!parent.Spawned || parent.Map == null) + { + Log.Error($"CompSpawnPawnFromList: Cannot spawn pawn. Parent {parent} is not spawned or map is null."); + return; + } + + Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); + if (pawn == null) + { + Log.Error($"CompSpawnPawnFromList: Failed to generate pawn of kind {pawnKind.defName} for faction {parent.Faction?.Name ?? "null"}."); + return; + } + + if (GenSpawn.Spawn(pawn, parent.Position, parent.Map) == null) + { + Log.Error($"CompSpawnPawnFromList: Failed to spawn pawn {pawn} at {parent.Position}."); + if (!pawn.Destroyed) + { + pawn.Destroy(); + } + return; + } + + if (Props.lordJob != null) + { + try + { + LordJob lordJobInstance = (LordJob)System.Activator.CreateInstance(Props.lordJob); + Lord lord = LordMaker.MakeNewLord(parent.Faction, lordJobInstance, parent.Map); + lord.AddPawn(pawn); + } + catch (System.Exception e) + { + Log.Error($"CompSpawnPawnFromList: Error creating LordJob {Props.lordJob?.Name ?? "null"} or assigning pawn {pawn}. Exception: {e}"); + } + } + + if (Props.destroyOnSpawn) + { + parent.Destroy(DestroyMode.Vanish); + } } - - if (Props.destroyOnSpawn) + finally { - parent.Destroy(DestroyMode.Vanish); + spawnUntilTick = -1; + spawningPawnKind = null; } }