diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 99ba3dbf..5cc44fa7 100644 Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/Defs/JobDefs/WULA_Jobs.xml b/1.6/Defs/JobDefs/WULA_Jobs.xml index 56a68103..34e51502 100644 --- a/1.6/Defs/JobDefs/WULA_Jobs.xml +++ b/1.6/Defs/JobDefs/WULA_Jobs.xml @@ -1,7 +1,7 @@ - WULA_IngestEnergy + WULA_IngestWulaEnergy WulaFallenEmpire.JobDriver_IngestWulaEnergy 正在摄取能量。 true diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml index eb558176..f1448a90 100644 --- a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml +++ b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml @@ -1777,6 +1777,8 @@ Mote_Wula_Dark_Matter_Beam GraserBeam_End + 0.75 + 0.6 0.6 @@ -1875,6 +1877,8 @@ Mote_Wula_Dark_Matter_Beam GraserBeam_End + 0.75 + 0.6 0.6 diff --git a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml index 7906ae27..21499553 100644 --- a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml +++ b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml @@ -414,8 +414,7 @@ WULA_Fleshtype - Humanlike - HumanlikeConstant + WULA_Humanlike Humanlike diff --git a/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml b/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml new file mode 100644 index 00000000..2c2d26b7 --- /dev/null +++ b/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml @@ -0,0 +1,25 @@ + + + + WULA_Humanlike + + + +
  • + 0.3 + 0.1 + 5.0 + 9.5 +
  • + +
  • + Humanlike +
  • + +
  • + HumanlikeConstant +
  • +
    +
    +
    +
    diff --git a/1.6/Defs/WorkGivers/Wula_WorkGivers.xml b/1.6/Defs/WorkGivers/Wula_WorkGivers.xml index 1cf2fe0e..fd5b99b1 100644 --- a/1.6/Defs/WorkGivers/Wula_WorkGivers.xml +++ b/1.6/Defs/WorkGivers/Wula_WorkGivers.xml @@ -106,4 +106,5 @@ +
    diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index aefcac3b..9017a721 100644 Binary files a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo and b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo differ diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index 86790586..47445392 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -2,12 +2,16 @@ "Version": 1, "WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { @@ -17,10 +21,6 @@ { "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\wulafallenempiremod.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:wulafallenempiremod.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -30,21 +30,8 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 6, "Children": [ - { - "$type": "Document", - "DocumentIndex": 0, - "Title": "IngestPatch.cs", - "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", - "RelativeDocumentMoniker": "IngestPatch.cs", - "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", - "RelativeToolTip": "IngestPatch.cs", - "ViewState": "AQIAAAAAAAAAAAAAAADwvwoAAAAFAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-20T17:09:27.916Z", - "EditorCaption": "" - }, { "$type": "Bookmark", "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" @@ -52,6 +39,19 @@ { "$type": "Document", "DocumentIndex": 1, + "Title": "IngestPatch.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", + "RelativeDocumentMoniker": "IngestPatch.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", + "RelativeToolTip": "IngestPatch.cs", + "ViewState": "AQIAACEAAAAAAAAAAAAowEwAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-20T17:09:27.916Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, "Title": "HediffComp_RegenerateBackstory.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs", "RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs", @@ -59,12 +59,11 @@ "RelativeToolTip": "HediffComp_RegenerateBackstory.cs", "ViewState": "AQIAAAAAAAAAAAAAAAAAAHIAAAABAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-18T11:23:19.064Z", - "EditorCaption": "" + "WhenOpened": "2025-07-18T11:23:19.064Z" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 4, "Title": "WulaFallenEmpireMod.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs", "RelativeDocumentMoniker": "WulaFallenEmpireMod.cs", @@ -80,7 +79,7 @@ }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 3, "Title": "MechanitorPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs", "RelativeDocumentMoniker": "MechanitorPatch.cs", @@ -92,7 +91,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 0, "Title": "Building_Wula_DarkEnergy_Engine.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs", "RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs", @@ -100,7 +99,8 @@ "RelativeToolTip": "Building_Wula_DarkEnergy_Engine.cs", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-14T12:24:18.86Z" + "WhenOpened": "2025-07-14T12:24:18.86Z", + "EditorCaption": "" } ] } diff --git a/Source/WulaFallenEmpire/3516260226.code-workspace b/Source/WulaFallenEmpire/3516260226.code-workspace index e0de9f73..400f1828 100644 --- a/Source/WulaFallenEmpire/3516260226.code-workspace +++ b/Source/WulaFallenEmpire/3516260226.code-workspace @@ -7,6 +7,9 @@ { "name": "Data", "path": "../../../../Data" + }, + { + "path": "../../../3256974620" } ], "settings": {} diff --git a/Source/WulaFallenEmpire/CompProperties_AbilityEmergencyEnergyRestore.cs b/Source/WulaFallenEmpire/CompProperties_AbilityEmergencyEnergyRestore.cs index d796e9b4..08345e63 100644 --- a/Source/WulaFallenEmpire/CompProperties_AbilityEmergencyEnergyRestore.cs +++ b/Source/WulaFallenEmpire/CompProperties_AbilityEmergencyEnergyRestore.cs @@ -8,10 +8,11 @@ namespace WulaFallenEmpire public int durationTicks = 600; // 默认10秒 public HediffDef hediffDef; public bool requireDowned = true; // 是否需要倒地才能使用 + public SoundDef soundCast; public CompProperties_AbilityEmergencyEnergyRestore() { compClass = typeof(CompAbilityEffect_EmergencyEnergyRestore); } } -} \ No newline at end of file +} diff --git a/Source/WulaFallenEmpire/EmergencyAbilityPatches.cs b/Source/WulaFallenEmpire/EmergencyAbilityPatches.cs index 845cc8e6..c18f4e08 100644 --- a/Source/WulaFallenEmpire/EmergencyAbilityPatches.cs +++ b/Source/WulaFallenEmpire/EmergencyAbilityPatches.cs @@ -79,13 +79,7 @@ namespace WulaFallenEmpire [HarmonyPostfix] public static void Command_Ability_GizmoDisabled_Postfix(Command_Ability __instance, ref bool __result) { - // 使用反射获取ability字段 - var abilityField = typeof(Command_Ability).GetField("ability", BindingFlags.Instance | BindingFlags.NonPublic); - if (abilityField == null) return; - - Ability ability = (Ability)abilityField.GetValue(__instance); - if (ability == null) return; - + var ability = (Ability)typeof(Command_Ability).GetField("ability", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance); if (ability.def.defName == "WULA_EmergencyEnergyRestore") { Log.Message($"[EmergencyAbilityPatches] Command_Ability_GizmoDisabled_Postfix for {ability.pawn?.LabelShort}, initial result: {__result}"); diff --git a/Source/WulaFallenEmpire/JobGiverDefExtension_WulaGetEnergy.cs b/Source/WulaFallenEmpire/JobGiverDefExtension_WulaGetEnergy.cs new file mode 100644 index 00000000..466491e3 --- /dev/null +++ b/Source/WulaFallenEmpire/JobGiverDefExtension_WulaGetEnergy.cs @@ -0,0 +1,12 @@ +using Verse; + +namespace WulaFallenEmpire +{ + public class JobGiverDefExtension_WulaGetEnergy : DefModExtension + { + public float minEnergyLevelPercentage = 0.3f; + public float emergencyThreshold = 0.1f; + public float normalPriority = 5f; + public float emergencyPriority = 9.5f; + } +} diff --git a/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs b/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs new file mode 100644 index 00000000..e2c0e1e9 --- /dev/null +++ b/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs @@ -0,0 +1,98 @@ +using RimWorld; +using Verse; +using Verse.AI; +using System.Linq; // For FirstOrDefault + +namespace WulaFallenEmpire +{ + public class JobGiver_WulaGetEnergy : ThinkNode_JobGiver + { + public float minEnergyLevelPercentage = 0.3f; + public float emergencyThreshold = 0.1f; + public float normalPriority = 5f; + public float emergencyPriority = 9.5f; + + public override ThinkNode DeepCopy(bool resolve = true) + { + JobGiver_WulaGetEnergy obj = (JobGiver_WulaGetEnergy)base.DeepCopy(resolve); + obj.minEnergyLevelPercentage = minEnergyLevelPercentage; + obj.emergencyThreshold = emergencyThreshold; + obj.normalPriority = normalPriority; + obj.emergencyPriority = emergencyPriority; + return obj; + } + + public override float GetPriority(Pawn pawn) + { + Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed(); + if (energyNeed == null) + { + return 0f; + } + + // 如果能量充足,则不需要寻找能量核心 + if (energyNeed.CurLevelPercentage > minEnergyLevelPercentage) + { + return 0f; + } + + // 如果能量非常低,给予高优先级 + if (energyNeed.CurLevelPercentage < emergencyThreshold) + { + return emergencyPriority; + } + + // 否则,给予中等优先级 + return normalPriority; + } + + protected override Job TryGiveJob(Pawn pawn) + { + Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed(); + if (energyNeed == null || energyNeed.CurLevelPercentage > minEnergyLevelPercentage) + { + return null; + } + + // 寻找最佳能量核心 + Thing bestEnergySource = GenClosest.ClosestThingReachable( + pawn.Position, + pawn.Map, + ThingRequest.ForGroup(ThingRequestGroup.HaulableEver), // 扫描所有可搬运的物品 + PathEndMode.ClosestTouch, + TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), + 9999f, + (Thing t) => + { + // 检查物品是否是能量核心 + ThingDefExtension_EnergySource energySourceExt = t.def.GetModExtension(); + if (energySourceExt == null) + { + return false; + } + // 检查物品是否可摄取 + if (!t.IngestibleNow) + { + return false; + } + // 检查物品是否被禁止或无法预留 + if (t.IsForbidden(pawn) || !pawn.CanReserve(t, 1, -1, null, false)) + { + return false; + } + return true; + } + ); + + if (bestEnergySource != null) + { + // 创建摄取能量核心的Job + Job job = JobMaker.MakeJob(DefDatabase.GetNamed("WULA_IngestWulaEnergy"), bestEnergySource); + job.count = 1; // 每次摄取一个 + return job; + } + + return null; + } + } +} diff --git a/Source/WulaFallenEmpire/NeedDefExtension_Energy.cs b/Source/WulaFallenEmpire/NeedDefExtension_Energy.cs index 2f7f5bc5..b6895d4f 100644 --- a/Source/WulaFallenEmpire/NeedDefExtension_Energy.cs +++ b/Source/WulaFallenEmpire/NeedDefExtension_Energy.cs @@ -10,5 +10,7 @@ namespace WulaFallenEmpire public float maxLevel = 1.0f; // 运送能量的阈值 public float deliverEnergyThreshold = 0.5f; + // 自动摄取能量的阈值 + public float autoIngestThreshold = 0.5f; } } diff --git a/Source/WulaFallenEmpire/VerbPropertiesExplosiveBeam.cs b/Source/WulaFallenEmpire/VerbPropertiesExplosiveBeam.cs index cd033e97..0cbbc66f 100644 --- a/Source/WulaFallenEmpire/VerbPropertiesExplosiveBeam.cs +++ b/Source/WulaFallenEmpire/VerbPropertiesExplosiveBeam.cs @@ -39,6 +39,7 @@ namespace WulaFallenEmpire public bool applyDamageToExplosionCellsNeighbors = true; public float chanceToStartFire = 0f; public bool damageFalloff = true; + public float screenShakeFactor = 0f; // 新增:屏幕震动因子 public VerbPropertiesExplosiveBeam() { @@ -46,4 +47,4 @@ namespace WulaFallenEmpire verbClass = typeof(Verb_ShootBeamExplosive); } } -} \ No newline at end of file +} diff --git a/Source/WulaFallenEmpire/Verb_ShootBeamExplosive.cs b/Source/WulaFallenEmpire/Verb_ShootBeamExplosive.cs index a10a9812..b75e18a3 100644 --- a/Source/WulaFallenEmpire/Verb_ShootBeamExplosive.cs +++ b/Source/WulaFallenEmpire/Verb_ShootBeamExplosive.cs @@ -71,7 +71,8 @@ namespace WulaFallenEmpire doVisualEffects: true, propagationSpeed: 0.6f, excludeRadius: 0f, - doSoundEffects: false // 我们手动处理音效 + doSoundEffects: false, // 我们手动处理音效 + screenShakeFactor: explosiveProps.screenShakeFactor // 新增:屏幕震动因子 ); // 生成额外的视觉效果 @@ -89,4 +90,4 @@ namespace WulaFallenEmpire Scribe_Values.Look(ref explosionShotCounter, "explosionShotCounter", 0); } } -} \ No newline at end of file +} diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index df0101bf..847349bc 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -86,6 +86,8 @@ + +