diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll
index 3a775e30..3da91b4b 100644
Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ
diff --git a/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml b/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
index 9e360091..246f9250 100644
--- a/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
+++ b/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
@@ -1028,116 +1028,4 @@
-
-
-
- WULA_Support_Holographic_Flag
- 空投旗帜
- 从拒止舰队上扔一面全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。
- Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe
- 1
- Misc12
- false
-
- Verb_CastAbility
- false
- false
- 1
- 120
- true
-
- false
- true
-
-
-
-
- 0
- WULA_Holographic_Flag_Building_Skyfaller
- 15
- (1,1,1,0.5)
-
-
- FactoryFacility
- 需要拥有<color=#BD2F31><i>支援设施</i></color>设施的战舰在地图上才能进行轨道炮击支援
-
-
-
-
-
- WULA_Support_Shield_Projection
- 护盾投射
- 从拒止舰队上扔一面附拒止护盾的全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。拒止护盾可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后,该系统将自行烧毁。
- Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe
- 1
- Misc12
- false
-
- Verb_CastAbility
- false
- false
- 1
- 120
- true
-
- false
- true
-
-
-
-
- 0
- WULA_Support_Shield_Projection_Skyfaller
- 12
- (0.6,0.8,0.8,0.5)
-
-
-
- FactoryFacility
- 需要拥有<color=#BD2F31><i>支援设施</i></color>设施的战舰在地图上才能进行轨道炮击支援
-
-
-
-
-
- WULA_Support_AreaTeleporter
- 区域传送器
- 从拒止舰队上扔一面附拒止护盾的全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。拒止护盾可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后,该系统将自行烧毁。
- Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe
- 1
- Misc12
- false
-
- Verb_CastAbility
- false
- false
- 1
- 120
- true
-
- false
- true
-
-
-
-
- 0
- WULA_Support_AreaTeleporter_Skyfaller
- 20
- (0.6,0.8,0.8,0.5)
-
-
-
- FactoryFacility
- 需要拥有<color=#BD2F31><i>支援设施</i></color>设施的战舰在地图上才能进行轨道炮击支援
-
-
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml b/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
index 6b53300f..955a2053 100644
--- a/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
+++ b/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
@@ -1055,6 +1055,25 @@
+
+ WULA_Adult_Backstory_Legion_Escort
+ Adulthood
+ 断爪卫队
+ 断爪卫队
+ [PAWN_nameDef]是断爪卫队的一员,该卫队是乌拉帝国行星封锁机关总控AI「军团」的心腹和黑手套,负责和其分体出席各种场合。
+ AllWork
+ Thin
+ Thin
+ Thin
+
+ 999
+ 999
+
+
+ Wula_Backstory_Categories_Legion_Escort
+
+
+
WULA_Adult_Backstory999
diff --git a/1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
index 5c44c0ca..6055e5aa 100644
--- a/1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
+++ b/1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
@@ -93,7 +93,7 @@
WULA_AutoJumpdrive
微型传送装置
- 安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间或死亡时将其回收
+ 安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收
WULA_AutoJumpdrive
@@ -108,10 +108,10 @@
-
+
WULA_AutoJumpdrive
- death acidifier
- A chest implant for preventing enemy use of captured equipment. Upon the user's death, it releases powerful chemicals that dissolve gear in contact with the user's body. It doesn't damage others.
+ 微型传送装置
+ 安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收
Spacer
Things/Item/Health/HealthItem
@@ -151,4 +151,50 @@
WULA_AutoJumpdrive
+
+ WULA_AutoJumpdrive_Week
+ 微型传送装置
+ 安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收
+ WULA_AutoJumpdrive
+
+
+ 420000
+ true
+ PsycastAreaEffect
+ 2.5
+ false
+ true
+ true
+ {0} 通过传送离开了殖民地
+
+
+
+
+ WULA_AutoJumpdrive_Week
+
+
+ Install_WULA_AutoJumpdrive_Week
+ install death acidifier
+ Install a death acidifier.
+ Installing death acidifier.
+
+
+
+
+ WULA_AutoJumpdrive_Week
+
+
+ 1
+
+
+
+
+ WULA_AutoJumpdrive_Week
+
+
+
+ Torso
+
+ WULA_AutoJumpdrive_Week
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml b/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
index d43b6265..dae62903 100644
--- a/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
+++ b/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
@@ -147,31 +147,4 @@
-
- Wula_FM_Switc_Construction
- 调频(支援)
- 允许乌拉帝国的合成人呼叫舰队支援,包含一系列防御性能力和生产加速能力,一般需要有拒止舰队部署在轨道上才能启动。
- Hediff_High
- false
- false
- True
- false
-
-
- false
-
-
-
-
-
- WULA_CallMotherShip
- WULA_CallConstructionShip
- WULA_ClearFlightPath
- WULA_Support_Holographic_Flag
- WULA_Support_Shield_Projection
- WULA_Support_AreaTeleporter
-
-
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
index 6f810275..12024838 100644
--- a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
+++ b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
@@ -616,6 +616,10 @@
0
0
99999~99999
+
+ WULA_AutoJumpdrive_Week
+ DeathAcidifier
+
Wula_PIA_Legion_Escort_Unit
@@ -664,6 +668,7 @@
999999~999999
999999~999999
+ WULA_AutoJumpdrive_Week
DeathAcidifier
@@ -671,12 +676,11 @@
ImplantEmpireCommon
-
-
-
- Wula_Backstory_Categories
-
-
-
+
+ WULA_Child_Backstory03
+
+
+ WULA_Adult_Backstory_Legion_Escort
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/QuestScriptDefs/WULA_Colony_Promotion.xml b/1.6/1.6/Defs/QuestScriptDefs/WULA_Colony_Promotion.xml
index dd8a8c1b..ef97f2ea 100644
--- a/1.6/1.6/Defs/QuestScriptDefs/WULA_Colony_Promotion.xml
+++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Colony_Promotion.xml
@@ -133,8 +133,8 @@
faction.BecameHostileToPlayer
- LetterLabelFactionBecameHostile
- LetterTextFactionBecameHostile
+ 任务失败:[resolvedQuestName]
+ [faction_name]开始敌视你。
faction.BecameHostileToPlayer
@@ -237,9 +237,9 @@
- Shuttle destroyed
+ 穿梭机被破坏
NegativeEvent
- The shuttle sent to drop off [pawnsLabelDef] has been destroyed. You have failed the quest '[resolvedQuestName]'.\n\nYour relations with [asker_faction_name] have changed by [goodwillChangeOnShuttleDestroyed].
+ 被派遣来运输[asker_nameDef]的穿梭机已被破坏。
Fail
@@ -262,9 +262,9 @@
- Guest died: {SUBJECT_definite}
+ 宾客{SUBJECT_definite}死亡
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has died. [failLetterEndingCommon]
+ 需要你护卫的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]
OngoingOrNotYetAccepted
@@ -302,8 +302,8 @@
应该乘坐穿梭机离开
- Shuttle arrived
- The shuttle has arrived to collect the [asker_faction_leaderTitle].\n\nAll of you can accompany the [asker_faction_leaderTitle] on the shuttle and travel to the Imperial flotilla to begin a new life.
+ 穿梭机已抵达
+ 穿梭机已经前来迎接[asker_nameDef]。
$pickupShipThing
@@ -355,9 +355,9 @@
- {SUBJECT_bestRoyalTitle} unhappy
+ {SUBJECT_bestRoyalTitle}情绪低落
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect and keep happy, has been below the minimum mood of [lodgersMoodThreshold] too long. [failLetterEndingCommon]
+ 需要你护卫和满足需求的{SUBJECT_definite},其情绪值已经长时间低于最低限度[lodgersMoodThreshold]。[failLetterEndingCommon]
Fail
@@ -372,9 +372,9 @@
- Guest captured: {SUBJECT_definite}
+ 宾客{SUBJECT_definite}被俘
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has been arrested. [failLetterEndingCommon]
+ 需要你护卫的{SUBJECT_definite}已经被俘虏。[failLetterEndingCommon]
Fail
@@ -392,9 +392,9 @@
- Unauthorized surgery: {SUBJECT_definite}
+ 未授权手术:{SUBJECT_definite}
NegativeEvent
- Unauthorized, violating surgery has been performed on {SUBJECT_definite}, who you were charged to protect. [failLetterEndingCommon]
+ 需要你护卫的{SUBJECT_definite}接受了一场未授权的多余手术。[failLetterEndingCommon]
Fail
@@ -412,9 +412,9 @@
- Xenogerm absorbed: {SUBJECT_definite}
+ 异种胚芽被吸收
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has had {SUBJECT_possessive} xenogerm forcibly absorbed. [failLetterEndingCommon]
+ 指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。[failLetterEndingCommon]
Fail
@@ -432,9 +432,9 @@
- Guest lost: {SUBJECT_definite}
+ 宾客失踪:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has left the assigned settlement. [failLetterEndingCommon]
+ 需要你护卫的{SUBJECT_definite}失踪在你的殖民地。[failLetterEndingCommon]
Fail
@@ -452,9 +452,9 @@
- Shuttle destroyed
+ 穿梭机已被毁
NegativeEvent
- The shuttle sent to collect the [asker_faction_leaderTitle] has been destroyed. [failLetterEndingCommon]
+ 前来迎接[asker_faction_leaderTitle]的穿梭机被摧毁了。[failLetterEndingCommon]
Fail
@@ -472,9 +472,9 @@
- Guest lost: {SUBJECT_definite}
+ 宾客失踪:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has run wild. [failLetterEndingCommon]
+ 需要你护卫的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]
Fail
@@ -510,9 +510,9 @@
- Quest failed: [resolvedQuestName]
+ 任务失败:[resolvedQuestName]
NegativeEvent
- The shuttle sent to collect the [asker_faction_leaderTitle] has departed without [asker_objective]. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]
+ 前来迎接[asker_faction_leaderTitle]的穿梭机没有接到[asker_objective]。[asker_pronoun]现在只能走回去。[failLetterEndingCommon]
Fail
diff --git a/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml
index cea32bb2..2319287e 100644
--- a/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml
+++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml
@@ -125,8 +125,8 @@
$points
$enemyFaction
$walkInSpot
- {BASELABEL} chasing [../asker_nameDef]
- {BASETEXT}\nThe [enemyFaction_pawnsPlural] have come to get [../asker_nameDef].
+ {BASELABEL} 追捕[../asker_nameDef]
+ {BASETEXT}\n\n[enemyFaction_pawnsPlural]来此追捕[../asker_nameDef]。
@@ -151,12 +151,12 @@
$asker
- Should depart on shuttle
+ 应该乘坐穿梭机出发
- Shuttle arrived
- The shuttle has arrived to collect [asker_nameDef].
+ 穿梭机已抵达
+ 前来迎接[asker_nameDef]的穿梭机已抵达。
$pickupShipThing
@@ -191,9 +191,9 @@
- Guest died: {SUBJECT_definite}
+ 宾客已死亡:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has died. [failLetterEndingCommon]
+ 需要你小心保护的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]
Fail
@@ -210,7 +210,7 @@
- Guest left behind: {SUBJECT_definite}
+ 宾客被遗弃:{SUBJECT_definite}
NegativeEvent
{SUBJECT_definite}, who you were charged to protect, has been left behind. [failLetterEndingCommon]
@@ -229,9 +229,9 @@
- Unauthorized surgery: {SUBJECT_definite}
+ 未授权手术:{SUBJECT_definite}
NegativeEvent
- Unauthorized, violating surgery has been performed on {SUBJECT_definite}, who you were charged to protect. Because of this violation, [asker_pronoun] will now attempt to leave. [failLetterEndingCommon]
+ 需要你小心保护的{SUBJECT_definite}接受了一次未授权的额外手术。因为你违规在先,[asker_pronoun]将要离开此处。[failLetterEndingCommon]
Fail
@@ -248,9 +248,9 @@
- Xenogerm absorbed: {SUBJECT_definite}
+ 异种胚芽被吸收:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has had {SUBJECT_possessive} xenogerm forcibly absorbed. Because of this violation, {SUBJECT_pronoun} will now attempt to leave. [failLetterEndingCommon]
+ 指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。这是一种侵犯行为,{SUBJECT_pronoun}现在将会直接离开[failLetterEndingCommon]。
Fail
@@ -267,9 +267,9 @@
- Captured: {SUBJECT_definite}
+ 已被俘:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to host, has been arrested. [failLetterEndingCommon]
+ 需要你小心保护的{SUBJECT_definite}已被俘虏。[failLetterEndingCommon]
Fail
@@ -286,9 +286,9 @@
- Guest lost: {SUBJECT_definite}
+ 宾客失踪:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has left the designated settlement. [failLetterEndingCommon]
+ 需要你小心保护的{SUBJECT_definite}在你的殖民地失踪了。[failLetterEndingCommon]
Fail
@@ -305,9 +305,9 @@
- Guest lost: {SUBJECT_definite}
+ 宾客失踪:{SUBJECT_definite}
NegativeEvent
- {SUBJECT_definite}, who you were charged to protect, has run wild. [failLetterEndingCommon]
+ 需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]
Fail
@@ -324,9 +324,9 @@
- Shuttle destroyed
+ 穿梭机被毁
NegativeEvent
- The shuttle sent to collect [asker_nameDef] has been destroyed. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]
+ 前来迎接[asker_nameDef]的穿梭机已被毁。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]
Fail
@@ -343,9 +343,9 @@
- Shuttle left behind
+ 穿梭机被遗弃
NegativeEvent
- The shuttle sent to collect [asker_nameDef] has been left behind. [asker_pronoun] will now leave on foot.
+ 前来迎接[asker_nameDef]的穿梭机已被遗弃。[asker_pronoun]现在只能走回去了。
Fail
@@ -390,9 +390,9 @@
- Quest failed: [resolvedQuestName]
+ 任务失败:[resolvedQuestName]
NegativeEvent
- The shuttle sent to collect [asker_nameDef] has departed without [asker_objective]. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]
+ 前来迎接[asker_nameDef]的穿梭机在离开时因为一些原因落下了[asker_objective]。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]
Fail
diff --git a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml
index ec8b13d3..8096f35f 100644
--- a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml
+++ b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml
@@ -202,7 +202,7 @@
允许殖民地建立信标增加攻击舰队配额,并使得机械乌拉可以调频天线以申请舰队空中支援,包含2艘可以发起轨道炮击的巡洋舰和1艘可以提供航空器支援的航空舰。
600
1.00
- 4.40
+ 5.60
WULA_Colony_License_LV1_Technology
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
index f7ce7808..4e6e1280 100644
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
@@ -521,10 +521,10 @@
true
Building
- PassThroughOnly
- 42
+ Impassable
true
- 0.5
+ 1
+ false
false
250
@@ -1283,7 +1283,6 @@
1
Building
- 0.5
True
Light
@@ -1293,8 +1292,10 @@
(1,1)
2120
- PassThroughOnly
- 50
+ Impassable
+ true
+ 1
+ false
True
(0,0,-1)
Item
@@ -1359,11 +1360,12 @@
Building
- PassThroughOnly
+ Impassable
+ true
+ 1
+ false
false
- 0.5
false
- 0
false
false
Light
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml
index 0396aa38..59ef4a03 100644
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml
@@ -665,58 +665,6 @@
Thing
-
-
- WULA_Wall_Flag_Building
- P.I.A旗帜
- 乌拉帝国行星封锁机关的旗帜,没什么用但是可以宣示乌拉帝国的主权。
- Building
- Building
- PassThroughOnly
- WULA_Buildings
- true
- 0.20
- 14
- false
- BulletImpact_Metal
- Wula/Building/Flag/WULA_Flag_Building_B_north
- true
- true
-
- Wula/Building/Flag/WULA_Flag_Building_B
- Graphic_Multi
- (0.7,0.75)
- (0,0,0.7)
- (0,0,-0.7)
- (-0.6,0,0.1)
- (0.6,0,0.1)
-
- false
-
-
- BuildingOnTop
-
- 50
- 1.0
- 330
- 2
-
- 2991
- Standable
-
- 0
- North
- (0, 0, 0.2)
-
- false
- true
-
-
- Placeworker_AttachedToWall
-
-
-
-
WULA_Sky_Lock
天锁
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml
index 6d8a03e5..13a679a5 100644
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml
@@ -135,11 +135,12 @@
Building
- PassThroughOnly
+ Impassable
+ true
+ 1
+ false
false
- 0.5
false
- 42
false
0
@@ -217,7 +218,7 @@
6
转换为BUk-1"地堡猫猫"
让地堡中的两只乌拉猫猫继续操纵地堡中的机枪,剩下的乌拉猫猫抬着地堡移动——虽然很难相信但是事实就是这样的。
- Wula/UI/Commands/WULA_TransformToPawn
+ Wula/UI/Commands/WULA_BunkerCat
@@ -406,9 +407,10 @@
false
Normal
- PassThroughOnly
- 50
- 0.5
+ Impassable
+ true
+ 1
+ false
true
Light
@@ -683,9 +685,10 @@
false
Normal
- PassThroughOnly
- 50
- 0.5
+ Impassable
+ true
+ 1
+ false
true
640
@@ -960,9 +963,10 @@
false
Normal
- PassThroughOnly
- 50
- 0.5
+ Impassable
+ true
+ 1
+ false
true
450
@@ -1090,4 +1094,292 @@
+
+
+
+ WULA_Wall_Flag_Building
+ P.I.A旗帜
+ 乌拉帝国行星封锁机关的旗帜,没什么用但是可以宣示乌拉帝国的主权。
+ Building
+ Building
+ PassThroughOnly
+ WULA_Buildings
+ true
+ 0.20
+ 14
+ false
+ BulletImpact_Metal
+ Wula/Building/Flag/WULA_Flag_Building_B_north
+ true
+ true
+
+ Wula/Building/Flag/WULA_Flag_Building_B
+ Graphic_Multi
+ (0.7,0.75)
+ (0,0,0.7)
+ (0,0,-0.7)
+ (-0.6,0,0.1)
+ (0.6,0,0.1)
+
+ false
+
+
+ BuildingOnTop
+
+ 50
+ 1.0
+ 330
+ 2
+
+ 2991
+ Standable
+
+ 0
+ North
+ (0, 0, 0.2)
+
+ false
+ true
+
+
+ Placeworker_AttachedToWall
+
+
+
+ WULA_Holographic_Flag_Building_Skyfaller
+ P.I.A全息旗帜(落地中)
+ (1,1)
+
+ Wula/Building/Flag/WULA_Flag_Building_Mount_Incoming
+ Graphic_Single
+ MoteGlow
+ (1,1)
+
+ false
+
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (0, 0)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+ WULA_Holographic_Flag_Building
+
+
+
+ Smoke_Joint
+
+
+
+
+ WULA_Holographic_Flag_Building
+ P.I.A全息旗帜
+ 乌拉帝国行星封锁机关的全息旗帜投影,能激励附近的乌拉星人更加凶狠地战斗。这台投影仪的底座附带了一个拒止护盾,可以反射大部分的敌方射弹,己方的开火不受影响。
+ WulaFallenEmpire.Building_ExtraGraphics
+ true
+ Building
+ 50
+ true
+ PassThroughOnly
+ 1
+ (1,1)
+ true
+ None
+ (0.56, 0.62, 0.9)
+ Wula/Building/Flag/WULA_Flag_Building_A
+ false
+
+ Wula/Building/Flag/WULA_Flag_Building_Mount
+ Graphic_Single
+ (1,1)
+
+
+ 4
+
+
+ 50
+ 0.5
+ 1000
+ 5
+
+ Normal
+ true
+ false
+ North
+ true
+ Light
+ BulletImpact_Metal
+ true
+ RealtimeOnly
+ ConstructMetal
+ true
+
+
+ false
+ BuildingDestroyed_Metal_Big
+ true
+ true
+
+
+
+
+
+
+ 12
+ 200
+ 2400
+ 30
+
+
+ Interceptor_BlockedProjectile
+ Interceptor_BlockedProjectile
+ Shield_Break
+ BulletShieldGenerator_Reactivate
+
+ (0.9, 0.2, 0.2, 0.5)
+
+
+ true
+ false
+ true
+
+
+ true
+ 0.5
+ 30
+ 0
+ Interceptor_BlockedProjectile
+
+
+ 15
+ Wula_Holographic_Flag_Hediff
+ 0.5
+ true
+ 120
+ 125
+
+ WulaSpecies
+
+ true
+ false
+ false
+
+
+
+ true
+ false
+
+
+ 3
+ (120,240,252,0)
+
+
+
+
+ WULA_Support_AreaTeleporter_Skyfaller
+ P.I.A全息旗帜附区域传送器(落地中)
+
+ WULA_Support_AreaTeleporter
+
+
+
+ WULA_Support_AreaTeleporter
+ P.I.A全息旗帜附区域传送器
+ 乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个区域传送器,可以使得机械乌拉在旗帜区域内传送。\n\n在工作一段时间后,该系统将自行烧毁。
+
+
+
+
+
+
+
+ 20
+ (1, 1, 1)
+ 0
+ true
+ 传送范围
+ 区域传送器提供的传送范围
+ true
+
+
+ 3600
+
+
+ 20
+ 60
+
+
+ WulaSpecies
+
+ true
+
+ Skip_Entry
+ Skip_Exit
+ Psycast_Skip_Entry
+
+
+
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
index 2491615d..6d86dbea 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
@@ -2176,290 +2176,4 @@
-
-
- WULA_Holographic_Flag_Building_Skyfaller
- P.I.A全息旗帜(落地中)
- (1,1)
-
- Wula/Building/Flag/WULA_Flag_Building_Mount_Incoming
- Graphic_Single
- MoteGlow
- (1,1)
-
- false
-
-
-
- Accelerate
- Things/Skyfaller/SkyfallerShadowDropPod
- (0, 0)
- DropPod_Fall
- 100
- Explosion_Vaporize
- 0.05
- 1
- 1
-
-
- (0,0)
- (1, 1)
-
-
- WULA_Holographic_Flag_Building
-
-
-
- Smoke_Joint
-
-
-
-
- WULA_Holographic_Flag_Building
- P.I.A全息旗帜
- 乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。
- WulaFallenEmpire.Building_ExtraGraphics
- true
- Building
- 50
- true
- PassThroughOnly
- 1
- (1,1)
- true
- None
- (0.56, 0.62, 0.9)
- Wula/Building/Flag/WULA_Flag_Building_A
- false
-
- Wula/Building/Flag/WULA_Flag_Building_Mount
- Graphic_Single
- (1,1)
-
-
- 1
-
-
- 50
- 0.5
- 1000
- 5
-
- Normal
- true
- false
- North
- true
- Light
- BulletImpact_Metal
- true
- RealtimeOnly
- ConstructMetal
- true
-
-
- false
- BuildingDestroyed_Metal_Big
- true
- true
-
-
-
-
-
-
- 15
- Wula_Holographic_Flag_Hediff
- 0.5
- true
- 120
- 125
-
- WulaSpecies
-
- true
- false
- false
-
-
-
- true
- false
-
-
- 3
- (120,240,252,0)
-
-
-
-
- WULA_Support_Shield_Projection_Skyfaller
- P.I.A全息旗帜附拒止护盾(落地中)
-
- WULA_Support_Shield
-
-
-
- WULA_Support_Shield
- P.I.A全息旗帜附拒止护盾
- 乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个大型拒止护盾,可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后,该系统将自行烧毁。
-
-
-
-
-
-
-
- 3600
-
-
- 12
- 150000
- 2400
- 30
-
-
- Interceptor_BlockedProjectile
- Interceptor_BlockedProjectile
- Shield_Break
- BulletShieldGenerator_Reactivate
-
- (0.9, 0.2, 0.2, 0.5)
-
-
- true
- false
- true
-
-
- true
- 1
- 30
- 0
- Interceptor_BlockedProjectile
-
-
-
-
- WULA_Support_AreaTeleporter_Skyfaller
- P.I.A全息旗帜附区域传送器(落地中)
-
- WULA_Support_AreaTeleporter
-
-
-
- WULA_Support_AreaTeleporter
- P.I.A全息旗帜附区域传送器
- 乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个区域传送器,可以使得机械乌拉在旗帜区域内传送。\n\n在工作一段时间后,该系统将自行烧毁。
-
-
-
-
-
-
-
- 20
- (1, 1, 1)
- 0
- true
- 传送范围
- 区域传送器提供的传送范围
- true
-
-
- 3600
-
-
- 20
- 60
-
-
- WulaSpecies
-
- true
-
- Skip_Entry
- Skip_Exit
- Psycast_Skip_Entry
-
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
index b256ae65..029e3e79 100644
--- a/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
+++ b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
@@ -1132,7 +1132,7 @@
WULA_Cat_Bunker
部署为乌拉猫猫地堡
乌拉猫猫们把地堡扔在地上然后钻进去,重新转变为建筑。每一次转变为建筑后,都会有24小时的冷却时间,在此期间不允许重新变为BUk-1"地堡猫猫"。
- Wula/UI/Commands/WULA_TransformToBuilding
+ Wula/UI/Commands/WULA_BunkerCat
@@ -1699,6 +1699,21 @@
MFm-2"陆行舰"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。
Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage
+
+
+
+ 20
+ 60
+
+
+ WulaSpecies
+
+ true
+
+ Skip_Entry
+ Skip_Exit
+ Psycast_Skip_Entry
+
diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Colony_Promotion.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Colony_Promotion.xml
index 8c2da0cc..2e6cf941 100644
--- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Colony_Promotion.xml
+++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Colony_Promotion.xml
@@ -6,33 +6,4 @@
questDescription->殖民地已经承接了视察任务。\n\n行星封锁机关的总控AI已经派遣了自己的一个分体和护卫队抵达殖民地。考察持续12天,她会检查殖民地方方面面的运转情况,你需要确保其心情始终高于25%。考察完成后,她和卫队会搭乘穿梭机离开,如果一切顺利你们将获得殖民地晋升的机会,以解锁更多的许可科技。\n\n小心,附近的敌对派系已经知道了殖民地来了一个大人物,这些劫掠者会尝试袭击殖民地并抓住这个分体,你可能需要面对大量袭击!
- 任务失败:[resolvedQuestName]
-
- 应该乘坐穿梭机离开
- [faction_name]开始敌视你。
- 穿梭机被破坏
- 被派遣来运输[asker_nameDef]的穿梭机已被破坏。
- [asker_nameDef]已抵达
- [asker_nameDef]的分体和她的卫队已经抵达殖民地。\n\n你必须在穿梭机抵达前[shuttleDelayTicks_duration]内为[asker_objective]提供护卫并且满足[asker_possessive]各种需求。
- 宾客{SUBJECT_definite}死亡。
- 需要你护卫的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]
-
- 穿梭机已抵达
- 穿梭机已经前来迎接[asker_nameDef]。
- {SUBJECT_bestRoyalTitle}情绪低落
- 需要你护卫和满足需求的{SUBJECT_definite},其情绪值已经长时间低于最低限度[lodgersMoodThreshold]。[failLetterEndingCommon]
- 宾客{SUBJECT_definite}被俘。
- 需要你护卫的{SUBJECT_definite}已经被俘虏。[failLetterEndingCommon]
- 未授权手术:{SUBJECT_definite}
- 需要你护卫的{SUBJECT_definite}接受了一场未授权的多余手术。[failLetterEndingCommon]
- 异种胚芽被吸收
- 指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。[failLetterEndingCommon]
- 宾客失踪:{SUBJECT_definite}
- 需要你护卫的{SUBJECT_definite}失踪在你的殖民地。[failLetterEndingCommon]
- 穿梭机已被毁
- 前来迎接[asker_faction_leaderTitle]的穿梭机被摧毁了。[failLetterEndingCommon]
- 宾客失踪:{SUBJECT_definite}
- 需要你护卫的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]
- 任务失败:[resolvedQuestName]
- 前来迎接[asker_faction_leaderTitle]的穿梭机没有接到[asker_objective]。[asker_pronoun]现在只能走回去。[failLetterEndingCommon]
\ No newline at end of file
diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml
index f2173c4f..26e15d02 100644
--- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml
+++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml
@@ -6,30 +6,5 @@
questDescription->乌拉帝国行星封锁机关的总控AI向殖民地发送了一个请求。一位乌拉帝国密探已经暴露,正在遭受其他派系追杀——密探手无寸铁且携带重要信息,殖民地需要掩护它直到乌拉帝国的穿梭机抵达并将其接走。虽然对方未透露更多信息,不过她指明袭击不会太剧烈,密探已经甩掉了大部分敌人。
- {BASELABEL} 追捕[../asker_nameDef]
- {BASETEXT}\n\n[enemyFaction_pawnsPlural]来此追捕[../asker_nameDef]。
-
- 应该乘坐穿梭机出发
- 穿梭机已抵达
- 前来迎接[asker_nameDef]的穿梭机已抵达。
- 宾客已死亡:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]
- 宾客被遗弃:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}被遗弃。[failLetterEndingCommon]
- 未授权手术:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}接受了一次未授权的额外手术。因为你违规在先,[asker_pronoun]将要离开此处。[failLetterEndingCommon]
- 异种胚芽被吸收:{SUBJECT_definite}
- 指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。这是一种侵犯行为,{SUBJECT_pronoun}现在将会直接离开[failLetterEndingCommon]。
- 已被俘:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}已被俘虏。[failLetterEndingCommon]
- 宾客失踪:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]
- 宾客失踪:{SUBJECT_definite}
- 需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]
- 穿梭机被毁
- 前来迎接[asker_nameDef]的穿梭机已被毁。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]
- 穿梭机被遗弃
- 前来迎接[asker_nameDef]的穿梭机已被遗弃。[asker_pronoun]现在只能走回去了。
- 任务失败:[resolvedQuestName]
- 前来迎接[asker_nameDef]的穿梭机在离开时因为一些原因落下了[asker_objective]。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]
+
\ No newline at end of file
diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
index be17452a..a993352f 100644
--- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
+++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
@@ -306,4 +306,9 @@
扔掉当前武器,并装备该单位的初始武器
{0} 更换了武器为 {1}
{0} 没有可用的武器类型
+
+ 隐藏区域反射盾
+ 显示区域反射盾
+ 隐藏该单位的区域反射盾,这不会影响其实际功能,仅影响视觉效果
+ 显示该单位的区域反射盾,这不会影响其实际功能,仅影响视觉效果
\ No newline at end of file
diff --git a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_east.png
index 054c0023..c517e96b 100644
Binary files a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_east.png and b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_east.png differ
diff --git a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_north.png
index 00ec72b0..55688a31 100644
Binary files a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_north.png and b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_north.png differ
diff --git a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_south.png
index bd4812ec..c20f9645 100644
Binary files a/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_south.png and b/Content/Textures/Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin_south.png differ
diff --git a/Content/Textures/Wula/UI/Commands/WULA_BunkerCat.png b/Content/Textures/Wula/UI/Commands/WULA_BunkerCat.png
new file mode 100644
index 00000000..63528ebc
Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/WULA_BunkerCat.png differ
diff --git a/Content/Textures/Wula/UI/Commands/WULA_HideAreaShield.png b/Content/Textures/Wula/UI/Commands/WULA_HideAreaShield.png
new file mode 100644
index 00000000..337b1658
Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/WULA_HideAreaShield.png differ
diff --git a/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/CompTransformIntoBuilding.cs b/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/CompTransformIntoBuilding.cs
index e719840c..bd448d76 100644
--- a/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/CompTransformIntoBuilding.cs
+++ b/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/CompTransformIntoBuilding.cs
@@ -2,6 +2,7 @@ using RimWorld;
using System.Collections.Generic;
using UnityEngine;
using Verse;
+using System.Text;
namespace WulaFallenEmpire
{
@@ -14,6 +15,11 @@ namespace WulaFallenEmpire
private ThingDef restoreBuildingDef;
private int restoreMechanoidCount;
+ // 缓存校验结果
+ private bool? lastValidationResult = null;
+ private string lastValidationReason = null;
+ private int lastValidationTick = 0;
+
public override void Initialize(CompProperties props)
{
base.Initialize(props);
@@ -46,9 +52,12 @@ namespace WulaFallenEmpire
};
// 检查是否可以转换
- if (!CanTransformNow())
+ string failReason;
+ bool canTransform = CanTransformNow(out failReason);
+
+ if (!canTransform)
{
- command.Disable("无法在当前位置转换");
+ command.Disable(failReason);
}
yield return command;
@@ -57,12 +66,38 @@ namespace WulaFallenEmpire
private string GetGizmoDescription()
{
- string desc = Props.gizmoDesc;
+ StringBuilder sb = new StringBuilder();
+ sb.Append(Props.gizmoDesc);
+
if (restoreBuildingDef != null)
{
- desc += $"\n\n将恢复为: {restoreBuildingDef.LabelCap}";
+ sb.AppendLine();
+ sb.AppendLine();
+ sb.Append($"将恢复为: {restoreBuildingDef.LabelCap}");
+
+ if (restoreMechanoidCount > 0)
+ {
+ sb.AppendLine();
+ sb.Append($"恢复机械族储存: {restoreMechanoidCount}");
+ }
}
- return desc;
+
+ // 添加空间校验信息
+ string failReason;
+ bool isValid = CanTransformNow(out failReason);
+
+ sb.AppendLine();
+ sb.AppendLine();
+ if (isValid)
+ {
+ sb.Append("✓ 当前位置可以放置建筑 ");
+ }
+ else
+ {
+ sb.Append($"✗ {failReason} ");
+ }
+
+ return sb.ToString();
}
private Texture2D GetGizmoIcon()
@@ -74,25 +109,84 @@ namespace WulaFallenEmpire
return TexCommand.Install;
}
- private bool CanTransformNow()
+ ///
+ /// 检查是否可以转换(带详细失败原因)
+ ///
+ private bool CanTransformNow(out string failReason)
{
- if (parent == null || !parent.Spawned)
- return false;
+ failReason = null;
- // 检查空间是否足够
+ if (parent == null || !parent.Spawned)
+ {
+ failReason = "单位未生成或已销毁";
+ return false;
+ }
+
+ // 确定要生成的建筑类型
ThingDef buildingDef = restoreBuildingDef ?? Props.targetBuildingDef;
if (buildingDef == null)
- return false;
-
- foreach (IntVec3 cell in GenAdj.CellsOccupiedBy(Pawn.Position, Rot4.North, buildingDef.Size))
{
- if (!cell.InBounds(Pawn.Map) || !cell.Walkable(Pawn.Map) || cell.GetEdifice(Pawn.Map) != null)
+ failReason = "无法确定目标建筑类型";
+ return false;
+ }
+
+ // 使用缓存优化性能(每60 tick检查一次)
+ if (lastValidationResult.HasValue && Find.TickManager.TicksGame - lastValidationTick < 60)
+ {
+ failReason = lastValidationReason;
+ return lastValidationResult.Value;
+ }
+
+ // 执行完整的空间校验(排除被转换的Pawn本身)
+ bool isValid = TransformValidationUtility.CanPlaceBuildingAt(
+ buildingDef,
+ Pawn.Position,
+ Pawn.Map,
+ Pawn.Faction,
+ Pawn, // 排除被转换的Pawn本身
+ out failReason
+ );
+
+ // 更新缓存
+ lastValidationResult = isValid;
+ lastValidationReason = failReason;
+ lastValidationTick = Find.TickManager.TicksGame;
+
+ return isValid;
+ }
+
+ ///
+ /// 查找最近的可用位置
+ ///
+ private bool TryFindNearbyValidPosition(out IntVec3 validPosition, out string failReason)
+ {
+ validPosition = IntVec3.Invalid;
+ failReason = null;
+
+ ThingDef buildingDef = restoreBuildingDef ?? Props.targetBuildingDef;
+ if (buildingDef == null)
+ {
+ failReason = "无法确定目标建筑类型";
+ return false;
+ }
+
+ // 在周围搜索可用位置
+ for (int radius = 1; radius <= 5; radius++)
+ {
+ foreach (IntVec3 cell in GenRadial.RadialPatternInRadius(radius))
{
- return false;
+ IntVec3 checkPos = Pawn.Position + cell;
+
+ if (TransformValidationUtility.CanPlaceBuildingAt(buildingDef, checkPos, Pawn.Map, Pawn.Faction, Pawn, out failReason))
+ {
+ validPosition = checkPos;
+ return true;
+ }
}
}
- return true;
+ failReason = "周围没有找到合适的放置位置";
+ return false;
}
public void TransformToBuilding()
@@ -101,7 +195,7 @@ namespace WulaFallenEmpire
return;
Map map = Pawn.Map;
- IntVec3 position = Pawn.Position;
+ IntVec3 desiredPosition = Pawn.Position;
Faction faction = Pawn.Faction;
// 确定要生成的建筑类型
@@ -112,11 +206,29 @@ namespace WulaFallenEmpire
return;
}
+ // 最终校验(排除被转换的Pawn本身)
+ string failReason;
+ if (!TransformValidationUtility.CanPlaceBuildingAt(buildingDef, desiredPosition, map, faction, Pawn, out failReason))
+ {
+ // 尝试寻找附近的位置
+ IntVec3 alternativePosition;
+ if (TryFindNearbyValidPosition(out alternativePosition, out failReason))
+ {
+ desiredPosition = alternativePosition;
+ Messages.Message($"将在附近位置 {desiredPosition} 部署建筑", MessageTypeDefOf.NeutralEvent);
+ }
+ else
+ {
+ Messages.Message($"无法部署建筑: {failReason}", MessageTypeDefOf.RejectInput);
+ return;
+ }
+ }
+
// 移除Pawn
Pawn.DeSpawn(DestroyMode.Vanish);
// 生成建筑
- Building newBuilding = (Building)GenSpawn.Spawn(buildingDef, position, map, WipeMode.Vanish);
+ Building newBuilding = (Building)GenSpawn.Spawn(buildingDef, desiredPosition, map, WipeMode.Vanish);
newBuilding.SetFaction(faction);
// 恢复机械族计数
@@ -151,20 +263,33 @@ namespace WulaFallenEmpire
Messages.Message($"{Pawn.LabelCap} 已部署为 {newBuilding.Label}", MessageTypeDefOf.PositiveEvent);
// 播放转换效果
- PlayTransformEffects(position, map);
+ PlayTransformEffects(desiredPosition, map);
+
+ // 清除缓存
+ lastValidationResult = null;
+ lastValidationReason = null;
}
private void PlayTransformEffects(IntVec3 position, Map map)
{
- //// 播放转换视觉效果
+ // 播放转换视觉效果
//for (int i = 0; i < 3; i++)
//{
// MoteMaker.ThrowSmoke(position.ToVector3Shifted() + new Vector3(0, 0, 0.5f), map, 1.5f);
// MoteMaker.ThrowMicroSparks(position.ToVector3Shifted(), map);
//}
+ }
+
+ // 每tick更新校验状态(用于实时反馈)
+ public override void CompTick()
+ {
+ base.CompTick();
- //// 播放音效
- //SoundDefOf.MechClusterDefeated.PlayOneShot(new TargetInfo(position, map));
+ // 每60 tick清除一次缓存,确保校验结果实时更新
+ if (Find.TickManager.TicksGame % 60 == 0)
+ {
+ lastValidationResult = null;
+ }
}
}
}
diff --git a/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/TransformValidationUtility.cs b/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/TransformValidationUtility.cs
new file mode 100644
index 00000000..96beeb6e
--- /dev/null
+++ b/Source/WulaFallenEmpire/BuildingComp/WULA_TransformAtFullCapacity/TransformValidationUtility.cs
@@ -0,0 +1,218 @@
+using RimWorld;
+using System.Collections.Generic;
+using System.Text;
+using UnityEngine;
+using Verse;
+using System.Linq;
+
+namespace WulaFallenEmpire
+{
+ public static class TransformValidationUtility
+ {
+ ///
+ /// 检查位置是否可以放置目标建筑(通用版本)
+ ///
+ public static bool CanPlaceBuildingAt(ThingDef buildingDef, IntVec3 center, Map map, Faction faction, out string failReason)
+ {
+ return CanPlaceBuildingAt(buildingDef, center, map, faction, null, out failReason);
+ }
+
+ ///
+ /// 检查位置是否可以放置目标建筑(带忽略物体版本)
+ ///
+ public static bool CanPlaceBuildingAt(ThingDef buildingDef, IntVec3 center, Map map, Faction faction, Thing thingToIgnore, out string failReason)
+ {
+ failReason = null;
+
+ // 1. 检查建筑定义
+ if (buildingDef == null)
+ {
+ failReason = "目标建筑定义为空";
+ return false;
+ }
+
+ // 2. 检查建筑尺寸是否为奇数(根据您的需求)
+ if (!IsOddSizedBuilding(buildingDef))
+ {
+ failReason = $"建筑 {buildingDef.LabelCap} 的尺寸不是奇数,不符合放置要求";
+ return false;
+ }
+
+ // 3. 检查地图边界
+ if (!IsWithinMapBounds(buildingDef, center, map, out failReason))
+ return false;
+
+ // 4. 检查地形affordance
+ if (!HasValidTerrainAffordance(buildingDef, center, map, out failReason))
+ return false;
+
+ // 5. 检查其他建筑挤占(排除要忽略的物体)
+ if (!IsAreaClearOfBlockingBuildings(buildingDef, center, map, thingToIgnore, out failReason))
+ return false;
+
+ // 6. 检查特殊放置条件(如不可放置在水上等)
+ if (!MeetsSpecialPlacementConditions(buildingDef, center, map, out failReason))
+ return false;
+
+ // 7. 使用RimWorld原生的放置检查(最终验证)
+ if (!GenConstruct.CanPlaceBlueprintAt(buildingDef, center, Rot4.North, map, false, null, null, null))
+ {
+ failReason = "该位置不符合建筑放置要求";
+ return false;
+ }
+
+ return true;
+ }
+
+ ///
+ /// 检查建筑尺寸是否为奇数
+ ///
+ public static bool IsOddSizedBuilding(ThingDef buildingDef)
+ {
+ return buildingDef.Size.x % 2 == 1 && buildingDef.Size.z % 2 == 1;
+ }
+
+ ///
+ /// 检查地图边界
+ ///
+ private static bool IsWithinMapBounds(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
+ {
+ CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
+
+ if (!occupiedRect.InBounds(map))
+ {
+ failReason = "建筑超出地图边界";
+ return false;
+ }
+
+ failReason = null;
+ return true;
+ }
+
+ ///
+ /// 检查地形affordance
+ ///
+ private static bool HasValidTerrainAffordance(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
+ {
+ TerrainAffordanceDef requiredAffordance = buildingDef.terrainAffordanceNeeded;
+ if (requiredAffordance == null)
+ {
+ // 如果没有指定affordance要求,则跳过检查
+ failReason = null;
+ return true;
+ }
+
+ CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
+
+ foreach (IntVec3 cell in occupiedRect)
+ {
+ if (!cell.InBounds(map))
+ continue;
+
+ TerrainDef terrain = map.terrainGrid.TerrainAt(cell);
+ if (terrain == null || !terrain.affordances.Contains(requiredAffordance))
+ {
+ failReason = $"地形 {terrain?.LabelCap ?? "未知"} 不支持放置 {buildingDef.LabelCap}";
+ return false;
+ }
+ }
+
+ failReason = null;
+ return true;
+ }
+
+ ///
+ /// 检查区域是否被其他建筑阻挡(排除指定物体)
+ ///
+ private static bool IsAreaClearOfBlockingBuildings(ThingDef buildingDef, IntVec3 center, Map map, Thing thingToIgnore, out string failReason)
+ {
+ CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
+ List blockingThings = new List();
+
+ foreach (IntVec3 cell in occupiedRect)
+ {
+ if (!cell.InBounds(map))
+ continue;
+
+ // 检查该单元格上的所有建筑
+ List thingList = map.thingGrid.ThingsListAt(cell);
+ foreach (Thing thing in thingList)
+ {
+ // 跳过要忽略的物体(如被转换的Pawn本身)
+ if (thing == thingToIgnore)
+ continue;
+
+ if (thing.def.category == ThingCategory.Building || thing.def.category == ThingCategory.Pawn)
+ {
+ // 忽略蓝图和框架
+ if (thing.def.IsBlueprint || thing.def.IsFrame)
+ continue;
+
+ // 忽略被转换的Pawn本身
+ if (thing == thingToIgnore)
+ continue;
+
+ blockingThings.Add(thing);
+ }
+ }
+ }
+
+ if (blockingThings.Count > 0)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine("以下物体阻挡了建筑放置:");
+
+ foreach (Thing thing in blockingThings)
+ {
+ sb.AppendLine($" - {thing.LabelCap}");
+ }
+
+ failReason = sb.ToString().TrimEnd();
+ return false;
+ }
+
+ failReason = null;
+ return true;
+ }
+
+ ///
+ /// 检查特殊放置条件
+ ///
+ private static bool MeetsSpecialPlacementConditions(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
+ {
+ CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
+
+ // 检查是否在水体上
+ foreach (IntVec3 cell in occupiedRect)
+ {
+ if (!cell.InBounds(map))
+ continue;
+
+ TerrainDef terrain = map.terrainGrid.TerrainAt(cell);
+ if (terrain != null && (terrain.IsWater || terrain.defName.Contains("Water")))
+ {
+ failReason = "无法在水体上放置建筑";
+ return false;
+ }
+
+ // 检查是否在不可建造的地形上
+ if (terrain != null && !terrain.BuildableByPlayer)
+ {
+ failReason = $"地形 {terrain.LabelCap} 不可建造";
+ return false;
+ }
+ }
+
+ failReason = null;
+ return true;
+ }
+
+ ///
+ /// 获取建筑占用的所有单元格
+ ///
+ public static List GetOccupiedCells(ThingDef buildingDef, IntVec3 center)
+ {
+ return GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size).Cells.ToList();
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/ThingComp/WULA_AreaShield/ThingComp_AreaShield.cs b/Source/WulaFallenEmpire/ThingComp/WULA_AreaShield/ThingComp_AreaShield.cs
index fd97d7c6..acb3cc43 100644
--- a/Source/WulaFallenEmpire/ThingComp/WULA_AreaShield/ThingComp_AreaShield.cs
+++ b/Source/WulaFallenEmpire/ThingComp/WULA_AreaShield/ThingComp_AreaShield.cs
@@ -10,12 +10,16 @@ namespace WulaFallenEmpire
[StaticConstructorOnStartup]
public class ThingComp_AreaShield : ThingComp
{
+ // 现有的字段保持不变...
private int lastInterceptTicks = -999999;
public int ticksToReset = 0;
public int currentHitPoints;
private bool wasNotAtFullHp = false;
private bool wasActiveLastCheck = false;
+ // 新增:绘制控制字段
+ private bool drawShield = true;
+
// 视觉效果变量
private float lastInterceptAngle;
private bool drawInterceptCone;
@@ -43,30 +47,51 @@ namespace WulaFallenEmpire
private const float TextureActualRingSizeFactor = 1.1601562f;
private static readonly Color InactiveColor = new Color(0.2f, 0.2f, 0.2f);
- // 护盾绘制方法 - 参考原版实现
+
+ // 新增:检查是否应该显示绘制控制按钮
+ public bool ShouldShowDrawToggleGizmo
+ {
+ get
+ {
+ // 条件1:装备且穿戴在己方pawn身上
+ if (IsEquipment && Wearer != null && Wearer.Faction == Faction.OfPlayer)
+ return true;
+
+ // 条件2:固定物品且属于己方派系
+ if (IsStandalone && parent.Faction == Faction.OfPlayer)
+ return true;
+
+ return false;
+ }
+ }
+
+ // 护盾绘制方法 - 修改:添加绘制控制检查
public override void CompDrawWornExtras()
{
base.CompDrawWornExtras();
- if (!IsEquipment) return; // 只有装备使用这个方法
+ if (!IsEquipment || !drawShield) return; // 新增绘制控制检查
DrawShield();
}
+
public override void PostDraw()
{
base.PostDraw();
- if (IsEquipment) return; // 装备使用 CompDrawWornExtras
+ if (IsEquipment || !drawShield) return; // 新增绘制控制检查
DrawShield();
}
+
///
- /// 统一的护盾绘制方法 - 参考原版实现
+ /// 统一的护盾绘制方法 - 修改:添加绘制控制检查
///
private void DrawShield()
{
- if (!Active || Holder?.Map == null || Holder.Destroyed)
+ if (!drawShield || !Active || Holder?.Map == null || Holder.Destroyed) // 新增绘制控制检查
return;
+
Vector3 drawPos = GetHolderDrawPos();
drawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor();
float currentAlpha = GetCurrentAlpha();
@@ -96,9 +121,8 @@ namespace WulaFallenEmpire
Graphics.DrawMesh(MeshPool.plane10, matrix, ForceFieldConeMat, 0, null, 0, MatPropertyBlock);
}
}
- ///
- /// 获取当前透明度 - 参考原版的多状态叠加
- ///
+
+ // 现有的其他方法保持不变...
private float GetCurrentAlpha()
{
// 多个透明度来源叠加,取最大值
@@ -113,9 +137,7 @@ namespace WulaFallenEmpire
0.1f // 最小透明度
);
}
- ///
- /// 空闲状态透明度
- ///
+
private float GetCurrentAlpha_Idle()
{
if (!Active) return 0f;
@@ -144,9 +166,7 @@ namespace WulaFallenEmpire
return 0f;
}
- ///
- /// 被选中状态透明度 - 参考原版实现
- ///
+
private float GetCurrentAlpha_Selected()
{
// 如果被选中,显示更高的透明度
@@ -158,17 +178,13 @@ namespace WulaFallenEmpire
return 0f;
}
- ///
- /// 最近拦截状态透明度
- ///
+
private float GetCurrentAlpha_RecentlyIntercepted()
{
int ticksSinceIntercept = Find.TickManager.TicksGame - lastInterceptTicks;
return Mathf.Clamp01(1f - (float)ticksSinceIntercept / 40f) * 0.3f;
}
- ///
- /// 拦截锥形透明度
- ///
+
private float GetCurrentConeAlpha()
{
if (!drawInterceptCone) return 0f;
@@ -176,9 +192,7 @@ namespace WulaFallenEmpire
int ticksSinceIntercept = Find.TickManager.TicksGame - lastInterceptTicks;
return Mathf.Clamp01(1f - (float)ticksSinceIntercept / 40f) * 0.82f;
}
- ///
- /// 获取持有者绘制位置(回退机制)
- ///
+
private Vector3 GetHolderDrawPos()
{
if (Holder is Pawn pawn)
@@ -224,6 +238,7 @@ namespace WulaFallenEmpire
{
base.PostPostMake();
currentHitPoints = HitPointsMax;
+ drawShield = true; // 默认启用绘制
}
public override void PostExposeData()
@@ -232,6 +247,7 @@ namespace WulaFallenEmpire
Scribe_Values.Look(ref lastInterceptTicks, "lastInterceptTicks", -999999);
Scribe_Values.Look(ref ticksToReset, "ticksToReset", 0);
Scribe_Values.Look(ref currentHitPoints, "currentHitPoints", 0);
+ Scribe_Values.Look(ref drawShield, "drawShield", true); // 新增:保存绘制状态
}
public override void CompTick()
@@ -273,6 +289,56 @@ namespace WulaFallenEmpire
}
}
+ // 新增:绘制控制Gizmo
+ private Gizmo CreateDrawToggleGizmo()
+ {
+ Command_Toggle toggle = new Command_Toggle
+ {
+ defaultLabel = drawShield ? "WULA_HideAreaShieldLabel".Translate() : "WULA_ShowAreaShieldLabel".Translate(),
+ defaultDesc = drawShield ? "WULA_HideAreaShieldDesc".Translate() : "WULA_ShowAreaShieldDesc".Translate(),
+ icon = ContentFinder.Get("Wula/UI/Commands/WULA_HideAreaShield"),
+ isActive = () => drawShield,
+ toggleAction = () => drawShield = !drawShield
+ };
+
+ return toggle;
+ }
+
+ public override IEnumerable CompGetWornGizmosExtra()
+ {
+ EnsureInitialized();
+
+ // 原有的状态显示Gizmo
+ if (IsEquipment && Wearer != null && Find.Selector.SingleSelectedThing == Wearer)
+ {
+ yield return new Gizmo_AreaShieldStatus { shield = this };
+
+ // 新增:绘制控制按钮(只在符合条件的装备上显示)
+ if (ShouldShowDrawToggleGizmo)
+ {
+ yield return CreateDrawToggleGizmo();
+ }
+ }
+ }
+
+ public override IEnumerable CompGetGizmosExtra()
+ {
+ EnsureInitialized();
+
+ // 原有的状态显示Gizmo
+ if (IsStandalone && Find.Selector.SingleSelectedThing == parent)
+ {
+ yield return new Gizmo_AreaShieldStatus { shield = this };
+
+ // 新增:绘制控制按钮(只在符合条件的固定物品上显示)
+ if (ShouldShowDrawToggleGizmo)
+ {
+ yield return CreateDrawToggleGizmo();
+ }
+ }
+ }
+
+ // 现有的其他方法保持不变...
private void ApplyCosts(int cost = 1)
{
currentHitPoints -= cost;
@@ -566,6 +632,7 @@ namespace WulaFallenEmpire
return false;
}
}
+
private void EnsureInitialized()
{
if (initialized) return;
@@ -579,27 +646,6 @@ namespace WulaFallenEmpire
initialized = true;
}
- public override IEnumerable CompGetWornGizmosExtra()
- {
- EnsureInitialized();
-
- if (IsEquipment && Wearer != null && Find.Selector.SingleSelectedThing == Wearer)
- {
- yield return new Gizmo_AreaShieldStatus { shield = this };
- }
- }
-
- public override IEnumerable CompGetGizmosExtra()
- {
- EnsureInitialized();
-
- // 固定物品也显示护盾状态
- if (IsStandalone && Find.Selector.SingleSelectedThing == parent)
- {
- yield return new Gizmo_AreaShieldStatus { shield = this };
- }
- }
-
public override void Notify_Equipped(Pawn pawn)
{
base.Notify_Equipped(pawn);
diff --git a/Source/WulaFallenEmpire/ThingComp/WULA_AreaTeleporter/ThingComp_AreaTeleporter.cs b/Source/WulaFallenEmpire/ThingComp/WULA_AreaTeleporter/ThingComp_AreaTeleporter.cs
index 33db4ec0..dc82d436 100644
--- a/Source/WulaFallenEmpire/ThingComp/WULA_AreaTeleporter/ThingComp_AreaTeleporter.cs
+++ b/Source/WulaFallenEmpire/ThingComp/WULA_AreaTeleporter/ThingComp_AreaTeleporter.cs
@@ -509,14 +509,14 @@ namespace WulaFallenEmpire
try
{
// 绘制当前传送器范围
- GenDraw.DrawRadiusRing(parent.Position, Props.teleportRadius, Color.blue);
+ GenDraw.DrawRadiusRing(parent.Position, Props.teleportRadius, new Color(0.3f, 0.7f, 1, 0.3f));
// 绘制网络范围(所有传送器的范围)
foreach (var teleporter in GetNetworkTeleporters())
{
if (teleporter != this && teleporter.parent.Spawned)
{
- GenDraw.DrawRadiusRing(teleporter.parent.Position, teleporter.Props.teleportRadius, new Color(0, 0, 1, 0.3f));
+ GenDraw.DrawRadiusRing(teleporter.parent.Position, teleporter.Props.teleportRadius, new Color(0.3f, 0.7f, 1, 0.3f));
}
}
}
diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
index 7f738072..b9545d6c 100644
--- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
+++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
@@ -126,6 +126,7 @@
+
diff --git a/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.png b/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.png
new file mode 100644
index 00000000..63528ebc
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.png differ
diff --git a/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.sai2 b/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.sai2
new file mode 100644
index 00000000..6751a070
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/WULA_BunkerCat.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Commands/WULA_ShowAreaShield.sai2 b/美术与文本源文件/Wula/UI/Commands/WULA_ShowAreaShield.sai2
new file mode 100644
index 00000000..86f645e8
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/WULA_ShowAreaShield.sai2 differ