From e58fac54f86b22f3aab431bef75eeb14de5ae679 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 1 Sep 2025 16:42:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AD=98=E9=A3=9F=E7=89=A9=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E7=9A=84ability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 22528 -> 24064 bytes 1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml | 10 +++ .../Defs/BodyAndPartDefs/ARA_Bodyparts.xml | 8 +- .../Thing_building/ARA_InteractiveEggSac.xml | 71 ++++++++++-------- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 2 + Source/ArachnaeSwarm/Building_Incubator.cs | 34 +++++++++ .../CompAbilityEffect_NeedCost.cs | 54 +++++++++++++ Source/ArachnaeSwarm/CompSpawnPawnFromList.cs | 52 +++++++------ Source/Documents/Project_Summary.md | 38 ++++++++++ 9 files changed, 212 insertions(+), 57 deletions(-) create mode 100644 Source/ArachnaeSwarm/Building_Incubator.cs create mode 100644 Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs create mode 100644 Source/Documents/Project_Summary.md diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 59b7d73fbba8bb9eb689300b593d27e90d13feff..25d3265575cf1c69cffe0d3175d6e6b218cc9e5a 100644 GIT binary patch literal 24064 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 BkK_OV delta 10990 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 ARA_Proj_EggSac +
  • + Food + 4 + 食物不足 +
  • @@ -60,6 +65,11 @@ 3 +
  • + Food + 0.5 + 食物不足 +
  • diff --git a/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml b/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml index 6196576..1f1f860 100644 --- a/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml +++ b/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml @@ -14,7 +14,7 @@
  • ARA_Dorsum - 0.036 + 0
  • Torso
  • @@ -42,7 +42,7 @@
  • ARA_Sternum - 0.036 + 0
  • Torso
  • @@ -154,7 +154,7 @@
  • ARA_Tail - 0.025 + 0 Bottom Inside @@ -346,6 +346,7 @@ true
  • Hands
  • +
  • HeadClaw
  • @@ -401,6 +402,7 @@ true
  • Hands
  • +
  • HeadClaw
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml index efd5b1b..47be407 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -5,13 +5,13 @@ ARA_InteractiveEggSac 一个黏滑的囊状物,可以通过交互来孵化特定的昆虫。 - Building + ArachnaeSwarm.Building_Incubator Building (1,1) - Things/Building/EggSac - Graphic_Random - (1.5,1.5) + Things/Building/EggSac + Graphic_Random + (1.5,1.5) Building PassThroughOnly @@ -20,39 +20,44 @@ Normal Light - 200 - 0.4 - -6 + 200 + 0.4 + -6 - true - false - false - false - true - true - false + true + false + false + false + true + true + false + + Things/Building/Natural/Hive + Graphic_Random + 1.6 + -
  • - 6 - (113,141,117,0) -
  • -
  • - -
  • Megascarab
  • -
  • Spelopede
  • -
  • Megaspider
  • - - -
  • ARA_ArachnaeQueen
  • -
    - 300 - true - -
  • - CocoonDestroyed -
  • +
  • + 6 + (113,141,117,0) +
  • +
  • + +
  • Megascarab
  • +
  • Spelopede
  • +
  • Megaspider
  • + + +
  • ARA_ArachnaeQueen
  • +
    + 300 + true + +
  • + CocoonDestroyed +
  • diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 1ee6c58..08e78d2 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -73,7 +73,9 @@ + + diff --git a/Source/ArachnaeSwarm/Building_Incubator.cs b/Source/ArachnaeSwarm/Building_Incubator.cs new file mode 100644 index 0000000..ba4158f --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Incubator.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using Verse; + +namespace ArachnaeSwarm +{ + public class Building_Incubator : Building + { + public CompSpawnPawnFromList SpawnComp => GetComp(); + + public GraphicData hatchingGraphicData; + private Graphic hatchingGraphic; + + public override void SpawnSetup(Map map, bool respawningAfterLoad) + { + base.SpawnSetup(map, respawningAfterLoad); + if (hatchingGraphicData != null) + { + hatchingGraphic = hatchingGraphicData.Graphic; + } + } + + public override Graphic Graphic + { + get + { + if (SpawnComp != null && SpawnComp.IsHatching && hatchingGraphic != null) + { + return hatchingGraphic; + } + return base.Graphic; + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs b/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs new file mode 100644 index 0000000..41613ba --- /dev/null +++ b/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs @@ -0,0 +1,54 @@ +using RimWorld; +using RimWorld.Planet; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_AbilityNeedCost : CompProperties_AbilityEffect + { + public NeedDef needDef; + public float needCost; + public string failMessage; + + public CompProperties_AbilityNeedCost() + { + compClass = typeof(CompAbilityEffect_NeedCost); + } + } + + public class CompAbilityEffect_NeedCost : CompAbilityEffect + { + public new CompProperties_AbilityNeedCost Props => (CompProperties_AbilityNeedCost)props; + + public override bool GizmoDisabled(out string reason) + { + Pawn caster = parent.pawn; + if (caster != null && caster.needs != null) + { + if (caster.needs.TryGetNeed(Props.needDef, out Need need)) + { + if (need.CurLevel < Props.needCost) + { + reason = Props.failMessage; + return true; + } + } + } + reason = null; + return false; + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + Pawn caster = parent.pawn; + if (caster != null && caster.needs != null) + { + if (caster.needs.TryGetNeed(Props.needDef, out Need need)) + { + need.CurLevel -= Props.needCost; + } + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs index 07027e4..ce05723 100644 --- a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs @@ -13,6 +13,7 @@ namespace ArachnaeSwarm private int spawnUntilTick = -1; private PawnKindDef spawningPawnKind; private PawnKindDef selectedPawnKind; + public bool IsHatching => spawnUntilTick > 0; public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { @@ -40,6 +41,7 @@ namespace ArachnaeSwarm } } + public void StartIncubation() { spawningPawnKind = selectedPawnKind; @@ -55,6 +57,8 @@ namespace ArachnaeSwarm } } + + private void SpawnPawn(PawnKindDef pawnKind) { try @@ -71,34 +75,38 @@ namespace ArachnaeSwarm return; } - Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); - if (pawn == null) + int count = Props.spawnCount.RandomInRange; + for (int i = 0; i < count; i++) { - 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 pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); + if (pawn == null) { - pawn.Destroy(); + Log.Error($"CompSpawnPawnFromList: Failed to generate pawn of kind {pawnKind.defName} for faction {parent.Faction?.Name ?? "null"}."); + continue; } - return; - } - if (Props.lordJob != null) - { - try + if (GenSpawn.Spawn(pawn, parent.Position, parent.Map) == null) { - LordJob lordJobInstance = (LordJob)System.Activator.CreateInstance(Props.lordJob); - Lord lord = LordMaker.MakeNewLord(parent.Faction, lordJobInstance, parent.Map); - lord.AddPawn(pawn); + Log.Error($"CompSpawnPawnFromList: Failed to spawn pawn {pawn} at {parent.Position}."); + if (!pawn.Destroyed) + { + pawn.Destroy(); + } + continue; } - catch (System.Exception e) + + if (Props.lordJob != null) { - Log.Error($"CompSpawnPawnFromList: Error creating LordJob {Props.lordJob?.Name ?? "null"} or assigning pawn {pawn}. Exception: {e}"); + 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}"); + } } } @@ -114,6 +122,7 @@ namespace ArachnaeSwarm } } + public override string CompInspectStringExtra() { if (spawnUntilTick > 0) @@ -136,6 +145,7 @@ namespace ArachnaeSwarm base.PostExposeData(); Scribe_Values.Look(ref spawnUntilTick, "spawnUntilTick", -1); Scribe_Defs.Look(ref spawningPawnKind, "spawningPawnKind"); + Scribe_Defs.Look(ref selectedPawnKind, "selectedPawnKind"); } } } \ No newline at end of file diff --git a/Source/Documents/Project_Summary.md b/Source/Documents/Project_Summary.md new file mode 100644 index 0000000..605fe2a --- /dev/null +++ b/Source/Documents/Project_Summary.md @@ -0,0 +1,38 @@ +# 项目:可交互的虫卵囊 + +## 1. 核心目标 + +创建一个可交互的虫卵囊,它允许一个特定的 Pawn(阿拉克涅女皇种)通过右键菜单与它交互,从一个可配置的列表中选择一个 Pawn,并在经过一段可配置的延迟后,生成这个 Pawn。 + +## 2. 已完成的功能 + +* **创建了新的 VS 项目**: [`ArachnaeSwarm.csproj`](Source/ArachnaeSwarm/ArachnaeSwarm.csproj) +* **实现了核心的生成逻辑**: + * `CompProperties_SpawnPawnFromList.cs`: 定义了 XML 中可配置的属性,包括: + * `pawnKinds`: 可生成的 Pawn 列表。 + * `whitelist`: 可以与虫卵囊交互的 Pawn 列表。 + * `delay`: 孵化延迟。 + * `spawnCount`: 生成数量。 + * `destroyOnSpawn`: 生成后是否摧毁自身。 + * `lordJob`: 生成的 Pawn 要执行的集体任务。 + * `CompSpawnPawnFromList.cs`: 实现了核心的生成逻辑,包括: + * 生成右键菜单。 + * 处理孵化倒计时。 + * 生成指定数量的 Pawn。 + * 在检查面板上显示孵化状态和提示信息。 +* **实现了交互的 Job**: + * `ARA_Jobs.xml`: 定义了 `ARA_IncubateJob`。 + * `JobDriver_Incubate.cs`: 实现了让 Pawn 走到虫卵囊旁边并启动孵化过程的逻辑。 +* **实现了动态的图形切换**: + * `Building_Incubator.cs`: 创建了一个新的建筑基类,它会根据虫卵囊是否正在孵化来动态地改变自身的图形。 +* **创建了测试用的 Defs**: + * `ARA_InteractiveEggSac.xml`: 定义了一个可交互的虫卵囊,用于在游戏中测试新功能。 + * `ArachnaeSwarm_Keys.xml`: 定义了相关的本地化 `key`。 + +## 3. 当前状态 + +目前,项目已经基本完成了所有的核心功能,并且能够成功编译。但是,在最后一次构建时,我们遇到了一个编译错误,导致我们无法进行最终的测试。 + +## 4. 下一步计划 + +解决当前的编译错误,并成功构建项目,以便在游戏中进行最终的测试。 \ No newline at end of file From 9ab3300ac6b4cd35e1bbcfc8dd9dd2028bac18c4 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 1 Sep 2025 16:56:48 +0800 Subject: [PATCH 2/2] =?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 24064 -> 24576 bytes 1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml | 8 ++- .../Thing_building/ARA_InteractiveEggSac.xml | 12 +++-- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 1 + Source/ArachnaeSwarm/Building_Incubator.cs | 16 +----- .../CompAbilityEffect_BodyPartCheck.cs | 49 ++++++++++++++++++ .../CompProperties_SpawnPawnFromList.cs | 1 + 7 files changed, 66 insertions(+), 21 deletions(-) create mode 100644 Source/ArachnaeSwarm/CompAbilityEffect_BodyPartCheck.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 25d3265575cf1c69cffe0d3175d6e6b218cc9e5a..29adbd54ed77b42e8842e3bfcec4658a5f14ed6e 100644 GIT binary patch delta 11685 zcmaJ{34B!5x&O|&>)e^lawjvBuufQqBw!+-ghloTQBYEW8pH|;NLphcK@o>xW`gh( zp%uqgmSRDz#kEqfN-I^W;!+oEwU%d5=J|2uaQ!1sP{$o=m5mh+u& zJ@?!ha?gp}3*zoO`fUBK?>Q=dj!>VZU(^s?1%l}jCoJFi=5Lt;pps(3p3=`LUmZPzsyt->HW1#Wnq`>ne_pQcgV^)y*t__d;E(%{zbS|K1x!i z{TO8&0GaAe z9J4yaYdE`SYa@lYw6IaXM^qL18CQ#BA!j^nvjSO~aSB7sUZPK7x>*@2+Kj0Uyh35E z*;_b;hs}mM=CqF1Xh|%df*n;PSF+u$b3jT-kHFrvuIwUIULs=|U!lgDWMA(2e@S7b zHQg8Fb$dIRP~q3s7)Menq@FSi$8L7==E*QPnlzpVc|!s}?9; z=i=wB!?U}lA_XPB>M+T;vWUYRE!6rZ!`tP)r^VpigPn4TWK0Px?mh`K`wvbGSTzxY z4ioijwzVJz{d1EFuLq7}%C3@FR?~H4gC-pdFm7Di z?JON*V((NYPFW06YgiFXjMjwcFf2q9b2Qc}{po+ljh(E5rGA;d6KE-SLISm6jCcz2 zW=j&lZ-I>L7$d$9nkUE%r#e|g)&UtD^$;^1XNQw_frfxa^@v`*xHv1l9>nwpfK)6+nc%@cprLU#U%FT`O=7yLhn?S#!C~4vP3*}57?gSh}BX6GJvS^Cb)4g#^|cD z!qHIjvPKx{m@P0VCzbnY}PcrppWOgv+z603E_NluJ2dS7rDn(@aCNqC5On-4@vRzn3m5#73wG zTn!d0%X$MvIEfS}^-O5l4iie_GPMKuuHa5^TrH7$03^7_9G@3u4>_B%b9A&k2r-pe zAMYXE3y($08y{i~S_(CWf#Ql)d~^i8CCuTnPVSYd+4+z-nB)t!>t#c zN9tba=?=V#8L5XcKlLL3l@9daPF}O}L)m*lhI66%;rWaTE*I0-497vH9$_((2Vt8` zp$nbNqX3nQWa_cP_uUCsJPyq3e;7RtiDiOJ)o_lJ(BR6JCqO|D3?aMa$+OG~FgtV= zi708s8GQcb>FiE+|F0@-Z22)(LH>BBS;@o7U&uahzA z>94$dOi9XvsNte_c^_46fw?*aFc43Sj<`p}Z8(S?p^9}8OW@Xh1YVkClV0tN+r&HbgU=rsXRn(qkirMm0@VsLUHuDQe zwjM;ioFkAzdpMpkWkq8?EXCQQ(rZd%v^5ts`LAHqcM{MQdWMZdD>KtO*s3F) zO>yUNqd-w9j(0HDAX8oWRf?xAt(^P?+-k`_&pxUH05&?MDf|^p5}L3%aG%%x36WOq zz$SPLF}vjjXvrXtsvFp)5nEWU4P{_vP*ZTjgX~>~16?F!SMsdXexA>%K+%ps4n3|) zPWmG7QdrMP{gMInAcL%}!<+>5Z7+h*t+cccTUJ_{h_}52LS`thk;t$u3FpIc+;2SQ zrc#!8>%QC;c^oR&I%ZD{L(rpb=lPhHvh>aua(CU~K9Vx&+nMsO98=6>MCy%@1KXJe#{ zQZc%`7$deP!@z{@)JzV`khZVmmP5ViXSatwA(8U^3I-}tVMn)E?Hj;UrCe02rQZZn zHl)8dNDM9a9x9qt2g&qX;I_P7_+z))F{AO+=(~z&C+;&67+<-pwdtlC+PLKY8(Z{D zJQDiOx{{_LpLqOI-zl@|QJXXu_>#h`?p1@)@`M!A99(6%kO+Dk7alHz{hvdip8OHq zBZVirC$cO-blO2T;$zZM>(P)&8x{PgxhfQ*-$TTtlvUv~=|z*dKeT%KO?oiG@I$kw z-=TQ;X49mL#CN4bpIA4W4$U=~a)HN{Ja&}M&xmERHdDr1tFlm+bXn0VgW;%PJc7lb z$fQ;y9&w0DSY0T_axeT`oR`iilx>qR;_?U8=qMyQqAU!Dhf+B(} zUv9EN6a8#@o8Tq?6P`J=0UkSatDj*XMY$%z;~JgebIO^4F2-5xg=-xmpXHatSY|?ek7iO-nYGhq`XmLP z3Gn!9YQ^jvMH*%@DXBc3s*HG5vF}sHEm2nA4`|Zt5HIuX5)Se!f!|_$hW((l((pd& zz@drCtePN?`zy*&1)T(k{a&THXM(w*tYY*n;pLCPUWe{b>?w+VRh)%}DAAK@+}~l! z6AJzb;SJLJHm75qipp{oc0(oW4HdsdO50SGh@FU;OKryNlE2fl*jycYC7$Ia-vr|e z@gjB}hhA6S-=%zdMftHrsrVO`H|c5>%%8(tRK6u74Ny5jVLww?4Gw!O`IwTt z5ZfGMcPMNWT@H+ByGis8jicG5RfK7cWGxdJgCzD-V3Vm4t8DV0K?3g!eaFh0^iJ$M zmPs4pOu8d*AI6E;7QpM}GK4WG@3#c4cFsWm3GD+@(C+{na{IIgtcKhxfF|{c@!UNT zmU+zl5#+~!A}H@N{9*Vp$o$RNfqEEf?7{fXiRf(Xb(_`lPwT8`xsQ#g zW;VU3DCuw`Q(_GNXgv!Ui}SctDQ%1`MtR-m>!b*J*yIH$wnGT|mE`eH?GLcZE(Pa= z_rb(tv>z}#U$9+s!mmQzEde&=bNFY{81V+!or(@(>?!hOmMTe}CFnz9$s5JHfO&Bk zuyfW?jCmI8KaTO+bks70=^&`F3*!!G>cW_JzrqgC`pB)oo>o|%o}^pR5x?*x?Uj))EscIv#9UtmdgZsp zdD+ns-PY)&$E5Ap$8{>JAbbwcJq}|F6qct|fsn1!;(i|QGx3lx=;I<*i?|t7)t`Bu z*#?bP*a7+?9J6uORM<P5l7@PERCsXnM;_=``KTQ0hh+P@@ zz%a?i+YKA~aC|2W*i^*WY@0^lorx$<_2wYkrn^&~=s6Fwosui;0KKHJ1NNQrVLd?oa3(n`S>s{0X3vD=w)1!g6?T9g zglPfV%SREIJzS#x1N1wEZlufgIhdHh>qw{45=wd)yuZONp>Ya3VE@>vpc1;?!)PHQ zQ9`*Qw$-^2lAA8@mJr(Cj3E8Ci1k5~LR5-30A7BE?;(Nn&nSg@Sqssm^RSiYVc+vG z7}IKp=plt2ps=hVvdR3fU5C6Ky*~p#VdfV#POdKIvuSYqsa$885;5B0 zVPdY!yzI^*^F2f*Mo$%)Q-bYwjJ_;l-9r<>v+#=0X02?Tyc%Z6l=I;}9GM0Em!fA&_>3@I>FJz%mNK)1D9gJw zPdFFeg~O4cMKKrWA(!UkGI7nq)rfq$xaQ*u;+lo45kc;TYd$XiHw#xIjvyTV2%w3x z!n_bpJAh%TRg`+b7z%V=Hq@OqE7Bv>j127}&P;$lEv>>hjYRCixCZq;GBlF*15TtK zirY_7s?~Uy8rLa3O@NE=r00c~()W!UG2R?m2FTBd*Jy2|ooZ!E$y%zD9~jy7An}Gd zUXJp;h;btNDlHYGwFk_!Tx#a>C~ z4$&x27!QdCc_^||EEO{Fq}VUF1onV(Bys?hMy2zq_?u!Wy&r#99Fk-8-)F^9*-!t2 z@QJyB&%}wMiX)LTQ2LCsL!6R3-GDqTgL+g7?R#cV>C<+)l`?{Ht$YohAiUa6XN0T( zoC*s2JxFZD1A35XlXGOb80B6o2Wc-^i$P)Tc+p|sF6*?il65j$?~ybPQN6Y{vPsr! ziRd=jps|Vu!H<@?R1#YcF2|`}T!ceJz4(ukk7T2^CGekez8H&lfw@S*DY-zUqfy)f zU)g(ITPhkNF>Soq>2}we#NEDr+5(m0ChgCmG1}6swl;RXb|aPg(}29pGUdTs1((rv zN;Sjr!tZ}ltOWfNZ5f@ApK0}C3l3O~VyYI?R%lP-EjO?IEbPtLfv^!PsaL#;c4#|7H|a~YYK>ti zc&olqe9K=!4cbb1yZ(r_J+MxntBhz+@vE2JOE&8(h@Xo~1;bs6zMhUc`*f~}7xlf` zrGeM=(^&p(eZS(K77u0-($nG%`_KAbd53?qep+Sj5FL>f^qRKB`G?eTa|<1~sfh4DeR+BgbzBaEfuQT^-2I|7eY68cVOo^e7Ph@_2smB)v) ziRM;txdKj!wUK9yQ{u-~wgL!0Ku?K8^fjYGKPle=^he(^PKz0__aMYajicgkB}bsH z$#)DCeyCRHWhJMLLHayAMA^TPc}l4k=nE__xt@G#e26xND$H8_pK^d%E?;p{M!9^~ z8D$>Q_PEot<_Ymb-+c2BVzAh(kh^`&<__3vQl0*kY%`ZqKY!jFuQTQQG*sJaaw$Dv zHt64ykC}&PMd%sxA;^EGHR|>9B~ZSwJ}@7rx5CE(xg__flH}g`)NF#D@%lTE?=bhM zGR$t&r}b=iWQ^D8ms%@H(`Qx38^o^MsicI}&% zK{b>I97d}xn{=@T&=%{gf!HG#Iz#ZI?U(ityl&aPA^7HHAYfmr@lC|<_3NyO*jv|G z*Jl-Sy@$|Hy2Q!RD7wwJUD3DW?PZ-sVifJik71+8aK=eBS;6ZST&>`P3cjeIrm;+4 z1X_=18*6ihlwQo(r& z<`mqn;N5gD88R&&kUx|AvA^WCALx(k@98bZ?yRxT_}K89F|*bjXD&C>=D(Zk&EJ@P ztt${%fpe^eM~Q*>Sa>SfIK4S|sQ3}!fO-VQ)fZv8$X+}*i z;0E~)pk==gn2Q_++--T1f3R`#%|-qQQm^R8fJdT#1>6$-v}-&!dfFQo>W5Thd*Prd zDG4(qUL)~)7Y#&yCF&psI2>mI{?8%!X_Cew7^L}RoG>SDA7qH($( zqH)>|JWdZ#f53+z8K;LK8K<2vHBOI0vOfxTD*hMFZ2AU$M91-c+TZCX@(bCfy{{e9 zYV|$(M&lmyIrAg)V^h!JSkm=Tr={V3@B73~>aEr|ylC@@!KAJI22Anj7vOO5)z3=? zQ~0~c&d;sZlvComh|IoNQ)PidMYGt@9$ZlHoZN>}S&;2sfw z)q9GB(HmD^Tvg(mMlJ4_3H&llmN_5e4PvMT{iCNe-PYVPsi|%LbvG_taLIMoUVGuS zHM>h|_6sqh@Y~vbg$FO3x!XVVNpoOx(@jmyH#bjRIRD0Fi)qTjWi#ftE<1}&pMR@D z3eVKt)O%t}^OEt`HQm^>Y{le7ixytL?Ai$}3s&%iiHjFr|Ep zIr_TY-N#&Gl>A#$YumCbS|=@BH2>xsci%E$leAkGF1@*_b>V{DzR9c2k)x*L%+ZE_ zO>`68fVyj;R=@=~Yc=D#ffiz%r0YOmKr1j>0%|L&Ye-?;WoyF^+V zn=YRJ>*Iywv{d#Q5!90iww9zGM$DZof_9Q(?lmGxpu3GGkKHERCgWx)EVm7Jpt)^E zQVQF~mgLq&@-fYH>wHO}w7B)a1|h?4z9)3snkD2A%eAGn-R4+isfgUnFdIBAuGIFCbunlv2bf46v+?w z#8|NmD5ypOw>c1V^K~K%WBATDc$6R0d1JLocNd7P2nOB!csD>ZQxk)<(?qhxFiGM0bFX_HHSm+nuPe9Y9(I3R1SjN)s2 zPBWf0Cce#qo4kx+@@e<4+zT?zx-#68NQVd({<7ur9!;62%k zdWnF;G4cEgp#5wcUl*~RoC;`%)!tY&<$J-T?k&C}%&r*t-%h>AwAj1Ds!9%9Tn%pS zn2oMGRQPDdMg5O*y`)rKBifwr69Bn?giuc$0ybxIVPr!xI~n6%$skgBED#8A0&^$b z`bhp1hOjCB57cB5O?f7gJLL-te9PMl-`BGGX1^uf1*$!ACu2#yIEu6zk#?WkUIIlv zuVZs3Wg;w)1YWEYqLq7*EF5a67R?3oYjxRXv~~#!1BSMjJ4twy_k}_7S-R`-bYv$G zuq;M%Cwb?ILhV;oqN(A>Np?Ddd}3F^dp&QJHg}DU&JyT$-4gCp0|2eZVZ)}?-XA|2 zN8z1U;|PFC#s)A@;%wGnOKmyrwZWtY6E+kvX;}soONr*H#iou;td>`a66DcUZY}c5 z8v{0leo03J-S**;_PUtcK1M{^$73PX_oWC35b3s0mNr{A(^1a#!Vb2X<6VZ`1y2WH zk@f}^rQy06X`jWiSMlQpkK_PTe1*m<$7Es47+|^0ni-jEE2~gdKr$Q|AJ}12J%@rA zmg1U*s|kXh#Xx32Ft-hZGF>SVaIzixlOLOMb;umyfM*4uN=0qR1ZjX zZV773&F#PqMZF`y(^Y44gdtk0D*9M}K%ZRr#>}3hm^#k#9-sVFg^eEKHYwR{ym#^A z6sF>U1dVvac->XlH8VP_Sx>QA0JICkV@w#vU<8A4T8e_WdN9(YB(@d)KJ$4TT6WKR rGg!8~^BhHV;qt<_XLpnRmKPqK{ps%DRiA5e(#5+Yb3YLqYpnkP$4c?% delta 11023 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 NyTLvGQ?aty`afR=ZcqRK diff --git a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml index 5e62cc4..d4d9ad7 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml @@ -30,6 +30,10 @@ 4 食物不足 +
  • + ARA_Ovary + 卵巢受损或缺失,无法生育 +
  • @@ -64,12 +68,12 @@ 32 3 - -
  • +
  • Food 0.5 食物不足
  • + diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml index 47be407..a4c4ae6 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -33,11 +33,7 @@ true false - - Things/Building/Natural/Hive - Graphic_Random - 1.6 - +
  • 6 @@ -54,10 +50,16 @@ 300 true + + Things/Building/Natural/Hive + Graphic_Random + 1.6 +
  • CocoonDestroyed
  • +
    diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 08e78d2..115002f 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -76,6 +76,7 @@ +
    diff --git a/Source/ArachnaeSwarm/Building_Incubator.cs b/Source/ArachnaeSwarm/Building_Incubator.cs index ba4158f..cb2e948 100644 --- a/Source/ArachnaeSwarm/Building_Incubator.cs +++ b/Source/ArachnaeSwarm/Building_Incubator.cs @@ -7,25 +7,13 @@ namespace ArachnaeSwarm { public CompSpawnPawnFromList SpawnComp => GetComp(); - public GraphicData hatchingGraphicData; - private Graphic hatchingGraphic; - - public override void SpawnSetup(Map map, bool respawningAfterLoad) - { - base.SpawnSetup(map, respawningAfterLoad); - if (hatchingGraphicData != null) - { - hatchingGraphic = hatchingGraphicData.Graphic; - } - } - public override Graphic Graphic { get { - if (SpawnComp != null && SpawnComp.IsHatching && hatchingGraphic != null) + if (SpawnComp != null && SpawnComp.IsHatching && SpawnComp.Props.hatchingGraphicData != null) { - return hatchingGraphic; + return SpawnComp.Props.hatchingGraphicData.Graphic; } return base.Graphic; } diff --git a/Source/ArachnaeSwarm/CompAbilityEffect_BodyPartCheck.cs b/Source/ArachnaeSwarm/CompAbilityEffect_BodyPartCheck.cs new file mode 100644 index 0000000..91ab139 --- /dev/null +++ b/Source/ArachnaeSwarm/CompAbilityEffect_BodyPartCheck.cs @@ -0,0 +1,49 @@ +using System.Linq; +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_AbilityBodyPartCheck : CompProperties_AbilityEffect + { + public BodyPartDef requiredPart; + public float minimumHealth = 0.8f; + public string failMessage = "Missing or damaged body part."; + + public CompProperties_AbilityBodyPartCheck() + { + compClass = typeof(CompAbilityEffect_BodyPartCheck); + } + } + + public class CompAbilityEffect_BodyPartCheck : CompAbilityEffect + { + public new CompProperties_AbilityBodyPartCheck Props => (CompProperties_AbilityBodyPartCheck)props; + + public override bool GizmoDisabled(out string reason) + { + Pawn caster = parent.pawn; + if (caster != null && caster.health != null && caster.health.hediffSet != null) + { + var part = caster.health.hediffSet.GetNotMissingParts() + .FirstOrDefault(p => p.def == Props.requiredPart); + + if (part == null) + { + reason = Props.failMessage; + return true; + } + + float partHealth = caster.health.hediffSet.GetPartHealth(part) / part.def.GetMaxHealth(caster); + if (partHealth < Props.minimumHealth) + { + reason = Props.failMessage; + return true; + } + } + + reason = null; + return false; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs index efef87f..c69bf18 100644 --- a/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs @@ -13,6 +13,7 @@ namespace ArachnaeSwarm public bool destroyOnSpawn = false; public IntRange spawnCount = new IntRange(1, 1); public Type lordJob; + public GraphicData hatchingGraphicData; public CompProperties_SpawnPawnFromList() {