diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index a3f0ccc..b5bdba4 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml index 27c93ae..980192f 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml @@ -32,91 +32,6 @@ - - 5000 - false - 300 - true - false - AcidSpray_Warmup - - Verb_CastAbility - 1 - 7 - AcidSpray_Resolve - false - false - - True - - - -
  • - Food - 4 - 营养值不足,需要进食 -
  • -
  • - ARA_Ovary - 卵巢受损或缺失,无法生育 -
  • -
    -
    - - Projectile_SpawnsThing - - ArachnaeSwarm/Building/ARA_EggSac - Graphic_Single - - - Bullet - 21 - 0 - true - - - - - 5000 - true - 300 - true - false - AcidSpray_Warmup - - Verb_CastAbility - 1 - 12 - AcidSpray_Resolve - false - false - - True - - - -
  • - Food - 1 - 营养值不足,需要进食 -
  • -
    -
    - - - Projectile_SpawnsThing - - ArachnaeSwarm/Building/ARA_BioforgeIncubator - Graphic_Single - - - Bullet - 21 - 0 - true - - - ARA_AcidSprayBurst_Queen diff --git a/1.6/1.6/Defs/AbilityDefs/Abilities_EggSpew.xml b/1.6/1.6/Defs/AbilityDefs/Abilities_EggSpew.xml new file mode 100644 index 0000000..09da7e9 --- /dev/null +++ b/1.6/1.6/Defs/AbilityDefs/Abilities_EggSpew.xml @@ -0,0 +1,120 @@ + + + + + 5000 + false + 300 + true + false + AcidSpray_Warmup + + Verb_CastAbility + 1 + 7 + AcidSpray_Resolve + false + false + + True + + + +
  • + Food + 4 + 营养值不足,需要进食 +
  • +
  • + ARA_Ovary + 卵巢受损或缺失,无法生育 +
  • +
    +
    + + + Projectile_SpawnsThing + + ArachnaeSwarm/Building/ARA_EggSac + Graphic_Single + + + Bullet + 21 + 0 + true + + + + + 5000 + true + 300 + true + false + AcidSpray_Warmup + + Verb_CastAbility + 1 + 12 + AcidSpray_Resolve + false + false + + True + + + +
  • + Food + 1 + 营养值不足,需要进食 +
  • +
    +
    + + + + Projectile_SpawnsThing + + ArachnaeSwarm/Building/ARA_BioforgeIncubator + Graphic_Single + + + Bullet + 21 + 0 + true + + + + + ARA_EggSpew_BaseFighter + + 从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。 + UI/Commands/EggSpew + +
  • + ARA_Proj_EggSac_BaseFighter +
  • +
  • + ARA_Technology_1KYC + 需要科技 基因节点KYC-1"战士虫" 以解锁此孵化路径 +
  • +
    +
    + + + ARA_EggSpew + + 从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。 + UI/Commands/EggSpew + +
  • + ARA_Proj_EggSac +
  • +
    +
    + + +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml index 64058b2..36c1dc7 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -984,119 +984,7 @@ - - ARA_EggSpew - - 从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。 - UI/Commands/EggSpew - -
  • - ARA_Proj_EggSac -
  • -
    -
    - - ARA_Proj_EggSac - - - ARA_InteractiveEggSac - - - - ARA_InteractiveEggSac - - 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-25~30°C),需要小心保护! - - ArachnaeNode_Race_Myrmecocystus - ArachnaeNode_Race_ShieldHead - ArachnaeNode_Race_WeaponSmith - - -
  • ARA_Base_Technology
  • -
    - -
  • - -
  • ArachnaeNode_Race_Myrmecocystus
  • -
  • ArachnaeNode_Race_ShieldHead
  • -
  • ArachnaeNode_Race_WeaponSmith
  • - - -
  • ARA_ArachnaeQueen
  • -
    - -
  • - ArachnaeNode_Race_Myrmecocystus - 180000 -
  • -
  • - ArachnaeNode_Race_ShieldHead - 180000 -
  • -
  • - ArachnaeNode_Race_WeaponSmith - 180000 -
  • -
    - true - -
  • - -25 - 30 - 0.00005 - 0.005 - 0.001 -
  • -
    -
    - - ARA_InteractiveEggSac_Start - - 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种初到此地所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程。\n\n初诞卵囊可以抵御极端天气并且拥有极快的孵化速度,但是它们只能支持少数几种虫族的孵化。 - - - - ArachnaeNode_Race_Myrmecocystus - ArachnaeNode_Race_ShieldHead - ArachnaeNode_Race_WeaponSmith - - - -
  • - -
  • ArachnaeNode_Race_Myrmecocystus
  • -
  • ArachnaeNode_Race_ShieldHead
  • -
  • ArachnaeNode_Race_WeaponSmith
  • - - -
  • ARA_ArachnaeQueen
  • -
    - -
  • - ArachnaeNode_Race_Myrmecocystus - 300 -
  • -
  • - ArachnaeNode_Race_ShieldHead - 300 -
  • -
  • - ArachnaeNode_Race_WeaponSmith - 300 -
  • -
    - true - -
  • - -300 - 100 - 0.00005 - 0.005 - 0.001 -
  • -
    -
    ArachnaeNode_Race_Fighter @@ -1187,64 +1075,7 @@ - - ARA_EggSpew_BaseFighter - - 从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。 - UI/Commands/EggSpew - -
  • - ARA_Proj_EggSac_BaseFighter -
  • -
  • - ARA_Technology_1KYC - 需要科技 基因节点KYC-1"战士虫" 以解锁此孵化路径 -
  • -
    -
    - - ARA_Proj_EggSac_BaseFighter - - - ARA_InteractiveEggSac_Basic_Fighter - - - - ARA_InteractiveEggSac_Basic_Fighter - - 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-10~22°C),需要小心保护! - - ArachnaeNode_Race_Fighter - - -
  • ARA_Technology_1KYC
  • -
    - -
  • - -
  • ArachnaeNode_Race_Fighter
  • - - -
  • ARA_ArachnaeQueen
  • -
    - -
  • - ArachnaeNode_Race_Fighter - 12 -
  • -
    - true - -
  • - -10 - 22 - 0.00005 - 0.005 - 0.001 -
  • -
    -
    ArachnaeNode_Race_Facehugger 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 efcff35..ed4dd92 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -51,4 +51,143 @@ - \ No newline at end of file + + + ARA_Proj_EggSac_BaseFighter + + + ARA_InteractiveEggSac_Basic_Fighter + + + + + ARA_InteractiveEggSac_Basic_Fighter + + 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-10~22°C),需要小心保护! + + ArachnaeNode_Race_Fighter + + +
  • ARA_Technology_1KYC
  • +
    + + +
  • + +
  • + ArachnaeNode_Race_Fighter + 12 + ARA_Technology_1KYC +
  • + + +
  • ARA_ArachnaeQueen
  • +
    + true + +
  • + -10 + 22 + 0.00005 + 0.005 + 0.001 +
  • +
    +
    + + + ARA_Proj_EggSac + + + ARA_InteractiveEggSac + + + + + ARA_InteractiveEggSac + + 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-25~30°C),需要小心保护! + + ArachnaeNode_Race_Myrmecocystus + ArachnaeNode_Race_ShieldHead + ArachnaeNode_Race_WeaponSmith + + +
  • ARA_Base_Technology
  • +
    + + +
  • + +
  • + ArachnaeNode_Race_Myrmecocystus + 180000 +
  • +
  • + ArachnaeNode_Race_ShieldHead + 180000 +
  • +
  • + ArachnaeNode_Race_WeaponSmith + 180000 +
  • + + +
  • ARA_ArachnaeQueen
  • +
    + true + +
  • + -25 + 30 + 0.00005 + 0.005 + 0.001 +
  • +
    +
    + + + ARA_InteractiveEggSac_Start + + 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种初到此地所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程。\n\n初诞卵囊可以抵御极端天气并且拥有极快的孵化速度,但是它们只能支持少数几种虫族的孵化。 + + + + ArachnaeNode_Race_Myrmecocystus + ArachnaeNode_Race_ShieldHead + ArachnaeNode_Race_WeaponSmith + + + +
  • + +
  • + ArachnaeNode_Race_Myrmecocystus + 300 +
  • +
  • + ArachnaeNode_Race_ShieldHead + 300 +
  • +
  • + ArachnaeNode_Race_WeaponSmith + 300 +
  • + + +
  • ARA_ArachnaeQueen
  • +
    + true + +
  • + -300 + 100 + 0.00005 + 0.005 + 0.001 +
  • +
    +
    + + diff --git a/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompProperties_SpawnPawnFromList.cs b/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompProperties_SpawnPawnFromList.cs index 5d43d43..d48fee7 100644 --- a/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompProperties_SpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompProperties_SpawnPawnFromList.cs @@ -5,11 +5,20 @@ using Verse.AI.Group; namespace ArachnaeSwarm { + // 新的统一入口类 + public class PawnSpawnEntry + { + public PawnKindDef pawnKind; + public int delayTicks = 0; // 默认延迟为0 + public ResearchProjectDef requiredResearch; // 可选的科技需求 + } + public class CompProperties_SpawnPawnFromList : CompProperties { - public List pawnKinds; + // 合并后的新列表 + public List spawnablePawns; + public List whitelist; - public List pawnKindDelays; public bool destroyOnSpawn = false; public IntRange spawnCount = new IntRange(1, 1); public Type lordJob; @@ -32,10 +41,4 @@ namespace ArachnaeSwarm } } } -} - -public class PawnKindDelay -{ - public PawnKindDef pawnKind; - public int delay; } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompSpawnPawnFromList.cs b/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompSpawnPawnFromList.cs index a06aee7..94450bb 100644 --- a/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompSpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/ARA_SpawnPawnFromList/CompSpawnPawnFromList.cs @@ -13,14 +13,14 @@ namespace ArachnaeSwarm private int spawnUntilTick = -1; private PawnKindDef spawningPawnKind; - private PawnKindDef selectedPawnKind; + private PawnSpawnEntry selectedEntry; public bool IsHatching => spawnUntilTick > 0; - + public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { if (spawnUntilTick > 0) { - yield break; // 正在延迟中,不显示菜单 + yield break; } if (Props.whitelist == null || !Props.whitelist.Contains(selPawn.kindDef)) @@ -28,16 +28,29 @@ namespace ArachnaeSwarm yield break; } - if (Props.pawnKinds != null) + if (Props.spawnablePawns != null) { - foreach (PawnKindDef pawnKind in Props.pawnKinds) + foreach (PawnSpawnEntry entry in Props.spawnablePawns) { - yield return new FloatMenuOption("ARA_Incubate".Translate(pawnKind.label), () => + if (entry.pawnKind == null) continue; + + // 检查科技需求 + if (entry.requiredResearch != null && !entry.requiredResearch.IsFinished) { - Job job = JobMaker.MakeJob(DefDatabase.GetNamed("ARA_IncubateJob"), parent); - selectedPawnKind = pawnKind; - selPawn.jobs.TryTakeOrderedJob(job); - }); + // 科技未完成,显示灰色不可点击选项 + string disabledText = "ARA_Incubate".Translate(entry.pawnKind.label) + " (" + "Requires".Translate() + ": " + entry.requiredResearch.label + ")"; + yield return new FloatMenuOption(disabledText, null); + } + else + { + // 科技已完成或无需求,显示正常选项 + yield return new FloatMenuOption("ARA_Incubate".Translate(entry.pawnKind.label), () => + { + Job job = JobMaker.MakeJob(DefDatabase.GetNamed("ARA_IncubateJob"), parent); + this.selectedEntry = entry; // 保存整个入口信息 + selPawn.jobs.TryTakeOrderedJob(job); + }); + } } } } @@ -45,9 +58,10 @@ namespace ArachnaeSwarm public void StartIncubation() { - spawningPawnKind = selectedPawnKind; - int delay = Props.pawnKindDelays?.FirstOrDefault(pkd => pkd.pawnKind == selectedPawnKind)?.delay ?? 0; - spawnUntilTick = Find.TickManager.TicksGame + delay; + if (this.selectedEntry == null) return; + + spawningPawnKind = this.selectedEntry.pawnKind; + spawnUntilTick = Find.TickManager.TicksGame + this.selectedEntry.delayTicks; } public override void CompTick() @@ -147,7 +161,7 @@ namespace ArachnaeSwarm base.PostExposeData(); Scribe_Values.Look(ref spawnUntilTick, "spawnUntilTick", -1); Scribe_Defs.Look(ref spawningPawnKind, "spawningPawnKind"); - Scribe_Defs.Look(ref selectedPawnKind, "selectedPawnKind"); + // selectedEntry is transient and does not need to be saved. } } } \ No newline at end of file