护士装技能

This commit is contained in:
2025-09-26 11:59:41 +08:00
parent fe439885e2
commit f337d58ef2
12 changed files with 213 additions and 51 deletions

View File

@@ -1,10 +1,10 @@
{
"Version": 1,
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_addextraexp\\compproperties_addextraexp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_addextraexp\\compproperties_addextraexp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_terrainrestriction\\compabilityeffect_terrainrestriction .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_terrainrestriction\\compabilityeffect_terrainrestriction .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -23,14 +23,14 @@
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "CompProperties_AddExtraExp.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AddExtraExp\\CompProperties_AddExtraExp.cs",
"RelativeDocumentMoniker": "Abilities\\ARA_AddExtraExp\\CompProperties_AddExtraExp.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AddExtraExp\\CompProperties_AddExtraExp.cs",
"RelativeToolTip": "Abilities\\ARA_AddExtraExp\\CompProperties_AddExtraExp.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAcAAAAAAAAAA==",
"Title": "CompAbilityEffect_TerrainRestriction .cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs",
"RelativeDocumentMoniker": "Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs",
"RelativeToolTip": "Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAEsAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-25T09:59:56.766Z",
"WhenOpened": "2025-09-26T03:32:39.017Z",
"EditorCaption": ""
}
]

View File

@@ -0,0 +1,75 @@
using RimWorld;
using Verse;
namespace ArachnaeSwarm
{
public class CompAbilityEffect_TerrainRestriction : CompAbilityEffect
{
public new CompProperties_AbilityTerrainRestriction Props => (CompProperties_AbilityTerrainRestriction)props;
// 检查能力是否可用
public override bool GizmoDisabled(out string reason)
{
if (!IsCasterOnValidTerrain())
{
reason = Props.disabledReasonKey.Translate(GetTerrainList());
return true;
}
reason = null;
return false;
}
// 验证目标是否有效
public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
{
if (!base.Valid(target, throwMessages))
return false;
// 检查施法者地形
if (!IsCasterOnValidTerrain())
{
if (throwMessages)
{
Messages.Message(Props.casterTerrainFailMessage.Translate(GetTerrainList()), parent.pawn, MessageTypeDefOf.RejectInput, historical: false);
}
return false;
}
return true;
}
// 应用效果前的最终验证
public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest)
{
if (!IsCasterOnValidTerrain())
{
Messages.Message(Props.casterTerrainFailMessage.Translate(GetTerrainList()), parent.pawn, MessageTypeDefOf.RejectInput, historical: false);
return false;
}
return base.CanApplyOn(target, dest);
}
// 检查施法者地形是否有效
private bool IsCasterOnValidTerrain()
{
if (parent.pawn == null || !parent.pawn.Spawned)
return false;
TerrainDef casterTerrain = parent.pawn.Position.GetTerrain(parent.pawn.Map);
return Props.terrainDefs != null && Props.terrainDefs.Contains(casterTerrain);
}
// 获取地形列表的字符串表示
private string GetTerrainList()
{
if (Props.terrainDefs == null)
return "";
string terrainList = "";
foreach (var terrain in Props.terrainDefs)
{
if (terrainList.Length > 0)
terrainList += ", ";
terrainList += terrain.label;
}
return terrainList;
}
}
}

View File

@@ -0,0 +1,20 @@
using RimWorld;
using System.Collections.Generic;
using Verse;
namespace ArachnaeSwarm
{
public class CompProperties_AbilityTerrainRestriction : CompProperties_AbilityEffect
{
// 允许释放技能的地形列表
public List<TerrainDef> terrainDefs;
// 失败消息配置
[MustTranslate]
public string casterTerrainFailMessage = "AbilityMustBeOnTerrain";
[MustTranslate]
public string disabledReasonKey = "AbilityDisabledNotOnTerrain";
public CompProperties_AbilityTerrainRestriction()
{
compClass = typeof(CompAbilityEffect_TerrainRestriction);
}
}
}

View File

@@ -89,6 +89,8 @@
<Compile Include="Abilities\ARA_QueenAbility\CompAbilityEffect_ResearchPrereq.cs" />
<Compile Include="Abilities\ARA_QueenAbility\CompAbilityEffect_SprayLiquidMulti.cs" />
<Compile Include="Abilities\ARA_QueenAbility\CompProperties_AbilitySprayLiquidMulti.cs" />
<Compile Include="Abilities\ARA_TerrainRestriction\CompAbilityEffect_TerrainRestriction .cs" />
<Compile Include="Abilities\ARA_TerrainRestriction\CompProperties_TerrainRestriction.cs" />
<Compile Include="Abilities\CompAbilityEffect_DRM_Deaddustpop.cs" />
<Compile Include="Abilities\CompAbilityEffect_LaunchMultiProjectile.cs" />
<Compile Include="Abilities\PsychicBrainburn\CompAbilityEffect_PsychicBrainburn.cs" />