diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index d7b32934..1ca89587 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_Misc_Ability.xml b/1.6/1.6/Defs/AbilityDefs/WULA_Misc_Ability.xml index 5c4c928b..5b8782a8 100644 --- a/1.6/1.6/Defs/AbilityDefs/WULA_Misc_Ability.xml +++ b/1.6/1.6/Defs/AbilityDefs/WULA_Misc_Ability.xml @@ -55,7 +55,7 @@ True False true - 600 + 300 HoraxianSpellLight_Warmup Verb_CastAbility @@ -84,9 +84,9 @@
  • 18 - 18 + 36 true - false + true false WULA_AreaDestruction_Shockwave WULA_AreaDestruction_Hit @@ -251,20 +251,22 @@ True False false - 600 + 200 HoraxianSpellLight_Warmup + true Verb_CastAbility 1 - 65 + 500 WULA_Psi_Skip_Sound + false true
  • - 65 + 500 10 15 @@ -393,7 +395,7 @@ WULA_Psi_Black_Hole - 撕开虚境的裂口,在目标地点召唤一道虚境阴影,它泄露的庞大灵能会持续伤害范围内的敌方单位和建筑,即使是心灵失聪的目标也不能完全免疫这种超现实伤害——对于高心灵敏感度的单位这种伤害则更加致命。 + 撕开虚境的裂口,在目标地点召唤一道虚境阴影,它泄露的庞大灵能会持续伤害范围内的敌方单位和建筑,并让物品快速损坏,即使是心灵失聪的目标也不能完全免疫这种超现实伤害——对于高心灵敏感度的单位这种伤害则更加致命。 UI/Abilities/FireSpew True False @@ -431,16 +433,27 @@ MoteOverheadLow Graphic_Single - Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red + Wula/Weapon/WULA_Weapon_Empty MoteGlow - 5 + (7,4) + (255,255,255,150) +
  • + 600 +
  • +
  • + WULA_Black_Hole_Entity_Attached +
  • +
  • + 12 + (192,94,56,1) +
  • 8 30 Wula_Psi_Damage - 5 + 25 true 0.5 5 @@ -449,4 +462,178 @@
  • + + WULA_Black_Hole_Entity_Attached + +
  • + SubEffecter_SprayerChance + 1 + 1 + 20 + (0, 0, 0) + WULA_Black_Hole_Entity_Attached_Inner + 0 + 0 + 3 + 0 + 0 +
  • + + +
  • + SubEffecter_SprayerTriggered + 1 + (0, 0, 0) + VoidNodeCore_DustA + 0 + 0 + .9 + 0 + 60 + 200 + 0~0 + OnTarget +
  • +
  • + SubEffecter_SprayerTriggered + 1 + (0, 0, 0) + VoidNodeCore_DustB + 0 + 0 + 1.05 + 0 + 0 + 100 + 0~0 + OnTarget +
  • +
  • + SubEffecter_SprayerContinuous + 1 + (0, 0, 0) + 30 + VoidNodeCore_DebrisBit + .8~1.2 + 5 + 3 + -10~10 + 0 + -2000~2000 + 0~0 + true + -5~-1 + .8 + true + OnTarget +
  • +
  • + SubEffecter_SprayerContinuous + 3 + 30 + (0, 0, 0) + VoidNodeCore_DebrisBit + .8~1.2 + 6 + 5 + -10~10 + 0 + -2000~2000 + 0~0 + true + -6~-1 + .8 + true + OnTarget +
  • +
  • + SubEffecter_SprayerChance + 1 + .03 + (0, 0, 0) + EnergyCrackle + Zap_Quiet + 2.7 + 0 + .35 + .001 + 0 + true + 0 + 0~0 + OnTarget + true + 1.0 +
  • +
  • + SubEffecter_SprayerChance + 1 + .05 + 20 + (0, 0, 0) + VoidNodeLowLightningRing + 0 + 0 + 1 + 0 + 0 +
  • +
  • + SubEffecter_SprayerChance + 1 + .05 + 100 + (0, 0, 0) + VoidNodeHighLightningRing + 0 + 0 + 1 + 0~360 + 0 +
  • +
  • + SubEffecter_SprayerTriggered + 1 + (0, 0, 0) + VoidNodeDistortion + 0 + 0 + 1 + 0 + 0 +
  • +
  • + SubEffecter_SprayerChance + 1 + .01 + 50 + (0, 0, 0) + VoidNodeLowestGroundFlashes + 0 + 0 + .5~1 + 0 + 0~360 +
  • +
    +
    + + WULA_Black_Hole_Entity_Attached_Inner + MoteOverhead + 1 + + Graphic_FleckPulse + MotePsychicSkipInner + Things/Mote/SkipInnerDimension + + <_innerRingSize>0.65 + + 3.4 + + <_inTime>0.0 + <_solidTime>1 + <_outTime>0.0 + + + \ No newline at end of file diff --git a/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml b/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml index 44db4c11..10c8b389 100644 --- a/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml +++ b/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml @@ -139,7 +139,7 @@
  • - Wula_UI_Anisia_32 + Wula_UI_Legion_32
  • @@ -160,7 +160,7 @@
  • - Wula_UI_Anisia_33 + Wula_UI_Legion_33
  • @@ -257,7 +257,7 @@ - Wula_UI_Anisia_32 + Wula_UI_Legion_32 Wula/Events/Portraits/WULA_Legion_2 「军团」,P.I.A @@ -325,7 +325,7 @@ - Wula_UI_Anisia_33 + Wula_UI_Legion_33 Wula/Events/Portraits/WULA_Legion_1 「军团」,P.I.A @@ -376,7 +376,6 @@ Combat 100 - 1000 1
  • @@ -431,4 +430,105 @@ + + + + Wula_UI_Legion_Test1 + + Wula/Events/Portraits/WULA_Legion_1 + 「军团」,P.I.A + +
  • 这是一个测试选项,你可以吃到各种打
  • +
    + +
  • + + +
  • + +
  • + 6000 + Empire + ImmediateAttack + EdgeDropGroups + Combat + +
  • + Combat + 100 + + 1000 + +
  • + + +
  • + +
  • + + +
  • + + +
  • + +
  • + 6000 + Empire + ImmediateAttack + EdgeDropGroups + Combat + +
  • + Combat + 100 + + 1000 + +
  • + + +
  • + +
  • + + +
  • + + +
  • + +
  • + 3000 + Empire + ImmediateAttack + EdgeDropGroups + Combat + +
  • + Combat + 100 + + 1000 + +
  • + + +
  • + +
  • + + +
  • + + +
  • + +
  • + +
  • + + +
    +
    \ 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 c8278734..df83c247 100644 --- a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml +++ b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml @@ -126,7 +126,7 @@ Wula_AI_Heavy_Panzer Wula_AI_Heavy_Panzer - 1000 + 500 false PlayerColony false @@ -164,11 +164,14 @@ Wula_Mech_Mobile_Factory Wula_Mech_Mobile_Factory - 1000 false PlayerColony false true + 500 + + true + 1 Wula/Things/Wula_Mech_Mobile_Factory/Flying/Wula_Mech_Mobile_Factory_Flying_ 1 @@ -269,8 +272,8 @@ 0.4 -
  • WULA_PsiCrusher
  • WULA_Psi_Skip
  • +
  • WULA_PsiCrusher
  • WULA_Psi_Black_Hole
  • 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 d3fc0747..7728e90b 100644 --- a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml +++ b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml @@ -318,6 +318,17 @@
  • WULA_Colony_License_LV2_Technology
  • + + WULA_Turret_Base_Mortar_Technology + 10.00 + 0.90 + + 允许殖民地申请空投自动迫击炮台,可以发射远距离的高爆迫击炮弹打击地图上出现的任何敌军。 + 3500 + +
  • WULA_Synth_Armor_2_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 48d61e38..eb766c10 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 @@ -4,7 +4,7 @@ WulaWall_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国用于建造堡垒的外壁相当厚实,能够抵御大量伤害,并且拥有气密性,可以用在飞船外壳上。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉帝国用于建造堡垒的外壁相当厚实,能够抵御大量伤害,并且拥有气密性,可以用在飞船外壳上。 Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon MinifiedThing Normal @@ -34,6 +34,7 @@ 0 false + Light 1 1 @@ -140,7 +141,7 @@ false - Heavy + Light @@ -175,7 +176,7 @@ WulaDoor_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害,还拥有无需通电即可运转的伺服系统来增加大门通过速度。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害,还拥有无需通电即可运转的伺服系统来增加大门通过速度。 WulaDoor @@ -404,7 +405,7 @@ WULA_MaintenancePod_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人维护舱是为乌拉帝国合成人设计的设施,机械乌拉需要定期进入其中进行身体机能的维护和校准,否则他们的身体会逐渐衰弱。维护需要消耗零部件,同时会修理所有的伤口。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n合成人维护舱是为乌拉帝国合成人设计的设施,机械乌拉需要定期进入其中进行身体机能的维护和校准,否则他们的身体会逐渐衰弱。维护需要消耗零部件,同时会修理所有的伤口。 Wula/Building/WULA_MaintenancePod MinifiedThing Normal @@ -432,6 +433,7 @@ false (0,0,-2) true + Light
  • PlaceWorker_PreventInteractionSpotOverlap
  • @@ -534,6 +536,7 @@ (0,0,-2) true MinifiedThing + Light
  • BuildingsMisc
  • @@ -599,7 +602,7 @@ WULA_WeaponArmor_Productor_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和工程舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与,只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队,然后根据材料数量下单即可。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和工程舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与,只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队,然后根据材料数量下单即可。 Wula/Building/WULA_WeaponArmor_Productor MinifiedThing Normal @@ -628,6 +631,7 @@ false false + Light
  • WULA_WeaponArmor_Productor_Technology
  • @@ -726,6 +730,7 @@ false 0.5 True + Light 5 2000 @@ -785,7 +790,7 @@ 0.5 WULA_Buildings 2201 - Medium + Light 250 1600 @@ -830,7 +835,7 @@ WULA_Machine_Recharger_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站,不支持合成人的充能。由于其根基埋于地下,因此不会阻碍其他殖民者和机械体在其上面的移动。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站,不支持合成人的充能。由于其根基埋于地下,因此不会阻碍其他殖民者和机械体在其上面的移动。 Wula/Building/WULA_Machine_Recharger MinifiedThing Normal @@ -856,6 +861,7 @@ 0 false false + Light
  • WULA_Bunker_Drop_Technology
  • @@ -931,6 +937,7 @@ (0,0,0) Standable + Light 250 8000 @@ -996,7 +1003,7 @@ WULA_Charging_Station_Synth_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站,当机械乌拉需要充电时会优先前往此处充电。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站,当机械乌拉需要充电时会优先前往此处充电。 Wula/Building/WULA_Charging_Station_Synth_south MinifiedThing Normal @@ -1022,6 +1029,7 @@ 0 false false + Light
  • WULA_Synth_Maintain_Technology
  • @@ -1107,6 +1115,7 @@ False + Light 0.75 140 @@ -1156,7 +1165,7 @@ WULA_Cube_Productor_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国编织体是一台简易的塑性构造体,只能生产一些材料,以本地加工的方式降低舰队的加工压力。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉帝国编织体是一台简易的塑性构造体,只能生产一些材料,以本地加工的方式降低舰队的加工压力。 Wula/Building/WULA_Cube_Productor_south MinifiedThing Normal @@ -1183,6 +1192,7 @@ true (0,0,-1) false + Light
  • WULA_Colony_License_LV1_Technology
  • @@ -1275,6 +1285,7 @@ Building 0.5 True + Light 2000 180 @@ -1329,7 +1340,7 @@ Wula_DarkEnergy_Generators_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n一台使用暗物质湮灭反应提供能量的乌拉帝国发电机,需要消耗暗物质作为燃料且消耗速率很高,但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投,这种发电机的装甲层设计的非常厚实。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n一台使用暗物质湮灭反应提供能量的乌拉帝国发电机,需要消耗暗物质作为燃料且消耗速率很高,但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投,这种发电机的装甲层设计的非常厚实。 Wula/Building/Wula_DarkEnergy_Generators MinifiedThing Normal @@ -1355,6 +1366,7 @@ 0 false false + Light
  • WULA_DarkEnergy_Generators_Technology
  • @@ -1454,6 +1466,7 @@ false true false + Light 3500 2500 diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mortar_Turret_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mortar_Turret_Buildings.xml deleted file mode 100644 index 62e5e6c5..00000000 --- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mortar_Turret_Buildings.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - Wula_Base_Mortar_Turret_Cleanzone - - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nMTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,发射高爆迫击炮弹。这种炮台具有高伤害范围攻击能力,适合对付集群敌人和建筑。 - Wula/Building/Wula_Base_Mortar_Turret - MinifiedThing - Normal - - Wula_Base_Mortar_Turret - Wula_Base_Mortar_Turret_Weapon - - -
  • BuildingsMisc
  • -
    - - Wula/Building/WULA_Dropping_Building_Cleanzone - Graphic_Multi - (3,3) - - false - - - Building - PassThroughOnly - 0 - false - 0.5 - false - false - false - -
  • WULA_Turret_Base_Mortar_Technology
  • -
    - - 1 - 1 - 1 - 0 - - (3,3) - 0 - 1 - - 100 - 6 - - - BuildingDestroyed_Metal_Small - - -
  • WulaFallenEmpire.PlaceWorker_CustomRadius
  • -
    - WULA_Buildings - -
  • - 75 - (1, 1, 1) - 0 - true - - 在该建筑空降到指定地点时,其炮台武器的最大射程。 - true -
  • -
  • - Wula_Base_Mortar_Turret_Incoming - true - 1 - true - false -
  • -
    -
    - - - - Wula_Base_Mortar_Turret_Incoming - - (3,3) - - Wula/Building/Wula_Base_ATGun_Turret_Incoming - Graphic_Single - CutoutFlying - (3,3.75) - - - Accelerate - Things/Skyfaller/SkyfallerShadowDropPod - (2, 2) - DropPod_Fall - 100 - Explosion_Vaporize - 0.05 - 1 - 1 - - -
  • (0,0)
  • -
  • (1, 1)
  • -
    -
    - Wula_Base_Mortar_Turret -
    - -
  • - Smoke_Joint -
  • -
    -
    - - - - Wula_Base_Mortar_Turret - - MTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,发射高爆迫击炮弹。这种炮台具有高伤害范围攻击能力,适合对付集群敌人和建筑。 - WulaFallenEmpire.Building_TurretGunHasSpeed - MapMeshAndRealTime - -
  • - 0.2 -
  • -
    - - Wula/Building/WULA_Turret_Component - Graphic_Single - (3,3) - - - (0.3,0.3,1.4,1.4) - - - (0.5,0.35,0.75) - (0,0,-0.05) - - - true - Wula/Building/Wula_Base_Mortar_Turret - 1.0 - Building - false - false - (3,3) - - 1500 - 0 - 3200 - 80 - 0 - 0.80 - - - 100 - 6 - - false - Normal - PassThroughOnly - 50 - 0.5 - true - - 450 - true - Wula_Base_Mortar_Turret_Weapon - 4 - (-0.04, 0) - 5.0 - - -
  • PlaceWorker_TurretTop
  • -
  • PlaceWorker_ShowTurretRadius
  • -
    - -
  • -
  • -
  • - MechanoidsWakeUp -
  • -
  • - -
  • EMP
  • - - -
  • - MechTurretBig_Call -
  • -
  • - - true - false -
  • -
  • - CompPowerTrader - 200 -
  • -
  • - 6 - (252,240,120,0) -
  • -
  • - - - - - - Wula_Base_Mortar_Turret_Weapon - - 迫击炮塔,可以从远距离上对敌方集群造成巨大伤害。 - None - true - Ultra - - Wula/Building/Wula_Base_ATGun_Turret_Weapon - Graphic_Single - 3 - - 0.33 - - 150 - 0.3 - 0.7 - 0.85 - 0.8 - - -
  • - Verb_Shoot - true - Bullet_WULA_WM_Mortar_Turret - 2.5 - 5 - 10 - 75 - 1 - 1.9 - WULA_MW_Mass_Drivers_Shootingsound - GunTail_Heavy - 18 - - true - -
  • - -
    - - - - Bullet_WULA_WM_Mortar_Turret - - WulaFallenEmpire.Projectile_NorthArcTrail - Normal - True - - Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red - Graphic_Single - TransparentPostLight - 5 - - - Bomb - 220 - 20 - 0.8 - 5.0 - Artillery_HitThickRoof - MortarBomb_Explode - MortarRound_PreImpact - MortarRound_Ambient - 5 - true - 2 - - -
  • - 100 - 1.0 - true -
  • -
  • - WULA_GunTail_Lighting - 3 - 1 - 1~2 - 0.5~1.0 - 0.1~0.3 - -30~30 -
  • -
    -
    - -
    \ No newline at end of file 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 75899fcc..3438e955 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 @@ -4,7 +4,7 @@ WULA_Cat_Bunker_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑,3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型,并允许乌拉猫猫进驻使用内部武器击败来犯敌军。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑,3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型,并允许乌拉猫猫进驻使用内部武器击败来犯敌军。 Wula/Building/WULA_Cat_Bunker_south MinifiedThing Normal @@ -33,6 +33,7 @@ false false false + Light
  • WULA_Bunker_Drop_Technology
  • @@ -142,6 +143,7 @@ false 0 + Light 500 1 @@ -250,7 +252,7 @@ Wula_Base_ATGun_Turret_Cleanzone - 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。 + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\nATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。 Wula/Building/Wula_Base_ATGun_Turret MinifiedThing Normal @@ -277,6 +279,7 @@ false false false + Light
  • WULA_Turret_Base_AT_Technology
  • @@ -402,6 +405,7 @@ 50 0.5 true + Light 640 + + Wula_Base_Mortar_Turret_Cleanzone + + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\nRTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,在远距离上连续发射高爆迫击炮弹。高爆迫击炮弹虽然弹速很慢但是可以跨越地形,适合对付仍在集结的敌群和阵地。 + Wula/Building/Wula_Base_Mortar_Turret + MinifiedThing + Normal + + Wula_Base_Mortar_Turret + Wula_Base_Mortar_Turret_Weapon + + +
  • BuildingsMisc
  • +
    + + Wula/Building/WULA_Dropping_Building_Cleanzone + Graphic_Multi + (3,3) + + false + + + Building + PassThroughOnly + 0 + false + 0.5 + false + false + false + +
  • WULA_Turret_Base_Mortar_Technology
  • +
    + + 1 + 1 + 1 + 0 + + (3,3) + 0 + 1 + + 100 + 6 + + + BuildingDestroyed_Metal_Small + + +
  • WulaFallenEmpire.PlaceWorker_CustomRadius
  • +
    + WULA_Buildings + +
  • + Wula_Base_Mortar_Turret_Incoming + true + 1 + true + false +
  • +
    +
    + + Wula_Base_Mortar_Turret_Incoming + + (3,3) + + Wula/Building/Wula_Base_Mortar_Turret_Incoming + Graphic_Single + CutoutFlying + (3,3.75) + + + Accelerate + Things/Skyfaller/SkyfallerShadowDropPod + (2, 2) + DropPod_Fall + 100 + Explosion_Vaporize + 0.05 + 1 + 1 + + +
  • (0,0)
  • +
  • (1, 1)
  • +
    +
    + Wula_Base_Mortar_Turret +
    + +
  • + Smoke_Joint +
  • +
    +
    + + Wula_Base_Mortar_Turret + + RTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,在远距离上连续发射高爆迫击炮弹。高爆迫击炮弹虽然弹速很慢但是可以跨越地形,适合对付仍在集结的敌群和阵地。 + WulaFallenEmpire.Building_TurretGunHasSpeed + MapMeshAndRealTime + +
  • + 0.2 +
  • +
    + + Wula/Building/WULA_Turret_Component + Graphic_Single + (3,3) + + + (0.3,0.3,1.4,1.4) + + + (0.5,0.35,0.75) + (0,0,-0.05) + + + true + Wula/Building/Wula_Base_Mortar_Turret + 1.0 + Building + false + false + (3,3) + + 1500 + 0 + 3200 + 80 + 0 + 0.80 + + + 150 + 12 + + false + Normal + PassThroughOnly + 50 + 0.5 + true + + 450 + true + Wula_Base_Mortar_Turret_Weapon + 4 + (-0.04, 0) + 5.0 + + +
  • PlaceWorker_TurretTop
  • +
  • PlaceWorker_ShowTurretRadius
  • +
    + +
  • +
  • +
  • + MechanoidsWakeUp +
  • +
  • + +
  • EMP
  • + + +
  • + MechTurretBig_Call +
  • +
  • + + true + false +
  • +
  • + CompPowerTrader + 200 +
  • +
  • + 6 + (252,240,120,0) +
  • +
  • + + + + Wula_Base_Mortar_Turret_Weapon + + 迫击炮塔,可以从远距离上对敌方集群造成巨大伤害。 + None + true + Ultra + + Wula/Building/Wula_Base_Mortar_Turret_Weapon + Graphic_Single + 3 + + 0.33 + + 150 + 0.3 + 0.5 + 0.4 + 0.3 + + +
  • + Verb_Shoot + true + Bullet_WULA_WM_Mortar_Turret + 10 + 500 + false + 2.5 + true + 5 + 1 + 5 + RocketswarmLauncher_Fire + GunTail_Heavy + 18 + + true + +
  • + +
    + + Bullet_WULA_WM_Mortar_Turret + + WulaFallenEmpire.Projectile_NorthArcTrail + Normal + True + + Wula/Projectile/WULA_Mortar_Shell + Graphic_Single + (2.5,2) + + + Bomb + 30 + 40 + 0.8 + 5.0 + Artillery_HitThickRoof + MortarBomb_Explode + MortarRound_PreImpact + MortarRound_Ambient + 5 + true + + +
  • + 18 + 1.0 + true +
  • +
  • + WULA_Smoke_Tail + 3 + 1 + 1~2 + 0.5~1.0 + 0.1~0.3 + -30~30 +
  • +
    +
    diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml index 36073aac..4a98743a 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml @@ -240,12 +240,15 @@ Bullet_Wula_LR_Mobile_Factory_Turret + WulaFallenEmpire.Projectile_NorthArcTrail + Normal + True + RealtimeOnly Wula/Projectile/WULA_Shrapnel Graphic_Single (2,3) - WulaFallenEmpire.Projectile_ExplosiveWithTrail WULA_GiantBomb 45 @@ -260,9 +263,19 @@ 10 +
  • + 18 + 1.0 + true +
  • WULA_Smoke_Tail - 1 + 5 + 1 + 1~2 + 0.5~1.0 + 0.1~0.3 + -30~30
  • @@ -466,12 +479,15 @@ Bullet_Wula_AI_Heavy_Panzer_Main_Weapon + RealtimeOnly Wula/Projectile/WULA_Shrapnel Graphic_Single (2,2) - WulaFallenEmpire.Projectile_ExplosiveWithTrail + WulaFallenEmpire.Projectile_NorthArcTrail + Normal + True WULA_GiantBomb 65 @@ -486,9 +502,19 @@ 10 +
  • + 5 + 1.0 + true +
  • WULA_Smoke_Tail - 1 + 5 + 1 + 1~2 + 0.5~1.0 + 0.1~0.3 + -30~30
  • @@ -496,7 +522,7 @@ Wula_Psi_Titan_Beam - 灵能战争机械PAt-6"灵能泰坦"上装备的特殊熔融光束,威力不算特别大,但是不至于让其在失去所有武装后无计可施。 + 灵能战争机械PAt-6"灵能泰坦"用于标记目标的武器,没有伤害敌人的能力。 Archotech None @@ -512,7 +538,7 @@ 1 1 1 - 0 + 1
    false @@ -527,13 +553,15 @@ WulaFallenEmpire.Verb_ShootBeamExplosive - true + false 0 - 17 - 32 + 500 + 0 1 WULA_RW_Handle_Cannon_Burn - 1 + 0 + + false 1000 diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml index 86899356..2e684321 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml @@ -45,18 +45,15 @@ Bullet_WULA_Heavy_Infantry_PowerArmor_Mortar + WulaFallenEmpire.Projectile_NorthArcTrail + Normal + True + RealtimeOnly - Wula/Projectile/WULA_Shrapnel + Wula/Projectile/WULA_Mortar_Shell Graphic_Single - (1.5,2) + (2,1.75) - -
  • - WULA_Smoke_Tail - 1 -
  • -
    - WulaFallenEmpire.Projectile_ExplosiveWithTrail Bomb 20 @@ -69,6 +66,22 @@ MortarRound_PreImpact MortarRound_Ambient + +
  • + 10 + 1.0 + true +
  • +
  • + WULA_Smoke_Tail + 5 + 1 + 1~2 + 0.5~1.0 + 0.1~0.3 + -30~30 +
  • +
    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 035646ca..47035b53 100644 --- a/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml +++ b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml @@ -1008,7 +1008,7 @@ Pawn_Mech_Warqueen_Call - 25 + 10 1 @@ -1074,6 +1074,22 @@ WULA_Hover_FlyEast WULA_Hover_FlySouth +
  • + 1.5 + 30 + Crush + 3 + false + false + false + true + false + false + false + 碾压伤害 + HAp-6"战车"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。 + Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage +
  • @@ -1342,7 +1358,7 @@ false -
  • +
  • Drafted @@ -1361,7 +1377,12 @@ false false true - true + false + false + false + 碾压伤害 + MFm-2"陆行舰"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。 + Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage
  • @@ -1459,7 +1480,7 @@ Wula_Psi_Titan - 由乌拉帝国国教所主持开发的重型灵能机械体,以短距离折跃优雅地穿梭于炮火间,并用灵能盾抵挡敌方射弹侵袭。该机体不仅镌刻了破坏力强大的星光追猎术式用以发起远距离跟踪打击,还拥有一系列改变战局的灵能能力。\n\n但是在近身搏斗中,灵能泰坦是一个可笑的对手,并且它的秘文纹路很容易遭到外力破坏,它的本体无法吸收太多伤害! + 由乌拉帝国国教所主持开发的重型灵能机械体,以折跃优雅地穿梭于炮火间,并用强大的护盾抵挡敌方射弹侵袭。该机体的内部镌刻了无数的术式环路,这使其就像一个行走的灵能发射器,可以驱使各种强大的灵能能力。 Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon 1 @@ -1481,7 +1502,7 @@ Pawn_Mech_Warqueen_Call - 25 + 50 1 @@ -1518,6 +1539,21 @@ WULA_Hover_FlyEast WULA_Hover_FlySouth +
  • + 4 + 30 + Wula_Psi_Damage + 4 + false + false + false + true + false + false + 灼烧区域 + PAt-6"灵能泰坦"从灵能环路中释放的巨大的能量,靠近它的敌军会被辐射出来的灵能伤害并点燃——这同时会使得它伤害附近所有的散落物品。 + Wula/UI/Commands/Wula_Psi_Titan_AreaDamage +
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/WULA_AutonomousMech.xml b/1.6/1.6/Defs/ThinkTreeDefs/WULA_AutonomousMech.xml index c8150647..345f9a57 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/WULA_AutonomousMech.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/WULA_AutonomousMech.xml @@ -115,7 +115,7 @@ true
  • - 65 + 500 72
  • 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 2f7b436b..ea9cff67 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml @@ -347,4 +347,9 @@ 未激活-移动中 + + 切换区域伤害 + 启用或禁用区域伤害效果 + 区域伤害:已启用 + 区域伤害:已禁用 \ No newline at end of file diff --git a/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret.png b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret.png new file mode 100644 index 00000000..fa26e8e6 Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret.png differ diff --git a/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Incoming.png b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Incoming.png new file mode 100644 index 00000000..f2bef62e Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Incoming.png differ diff --git a/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Weapon.png b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Weapon.png new file mode 100644 index 00000000..5d38a193 Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Mortar_Turret_Weapon.png differ diff --git a/Content/Textures/Wula/Projectile/WULA_Black_Hole_Entity.png b/Content/Textures/Wula/Projectile/WULA_Black_Hole_Entity.png new file mode 100644 index 00000000..4b7cf270 Binary files /dev/null and b/Content/Textures/Wula/Projectile/WULA_Black_Hole_Entity.png differ diff --git a/Content/Textures/Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage.png b/Content/Textures/Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage.png new file mode 100644 index 00000000..4d71d033 Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage.png differ diff --git a/Content/Textures/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.png b/Content/Textures/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.png new file mode 100644 index 00000000..82753c85 Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.png differ diff --git a/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompAbilityEffect_AreaDestruction.cs b/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompAbilityEffect_AreaDestruction.cs index 51db11b5..a0ea0820 100644 --- a/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompAbilityEffect_AreaDestruction.cs +++ b/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompAbilityEffect_AreaDestruction.cs @@ -21,6 +21,9 @@ namespace WulaFallenEmpire Map map = parent.pawn.MapHeld; if (map == null) return; + // 新增:在施法前清除与施法者重合的物体 + ClearOverlappingObjects(map); + // 获取扇形区域内的所有单元格 List affectedCells = AffectedCells(target); @@ -62,6 +65,80 @@ namespace WulaFallenEmpire } } + /// + /// 新增:清除与施法者重合的所有物体 + /// + private void ClearOverlappingObjects(Map map) + { + try + { + IntVec3 casterPos = Pawn.Position; + + // 获取施法者位置的所有物体 + List thingsAtCasterPos = casterPos.GetThingList(map); + + foreach (Thing thing in thingsAtCasterPos) + { + // 跳过施法者自己(除非设置影响施法者) + if (thing == Pawn && !Props.affectCaster) + continue; + + // 跳过已经销毁的物体 + if (thing.Destroyed) + continue; + + // 只处理建筑和Pawn + if (thing is Building || thing is Pawn) + { + // 检查是否应该影响这个物体 + if (ShouldAffectThing(thing)) + { + // 播放清除特效 + PlayClearEffecter(thing, map); + + // 处理目标 + ProcessTarget(thing); + + Log.Message($"[AreaDestruction] Cleared overlapping object: {thing.Label} at {casterPos}"); + } + } + } + } + catch (System.Exception ex) + { + Log.Warning($"[AreaDestruction] Error clearing overlapping objects: {ex.Message}"); + } + } + + /// + /// 新增:播放清除重合物体的特效 + /// + private void PlayClearEffecter(Thing target, Map map) + { + try + { + if (Props.clearEffecter == null) return; + if (target == null || target.Destroyed) return; + + // 在目标位置播放清除特效 + Effecter effecter = Props.clearEffecter.Spawn(target.Position, map); + + if (Props.clearEffecterMaintainTicks > 0) + { + // 维持效果器 + parent.AddEffecterToMaintain(effecter, target.Position, Props.clearEffecterMaintainTicks, map); + } + else + { + effecter.Cleanup(); + } + } + catch (System.Exception ex) + { + Log.Warning($"[AreaDestruction] Error playing clear effecter: {ex.Message}"); + } + } + private void PlayHitEffecter(Thing target, Map map) { try @@ -94,9 +171,6 @@ namespace WulaFallenEmpire { effecter.Cleanup(); } - - // 可选:记录日志用于调试 - // Log.Message($"[AreaDestruction] Played hit effecter on {target.Label} at {target.Position}"); } catch (System.Exception ex) { @@ -209,9 +283,6 @@ namespace WulaFallenEmpire { // 检查pawn是否还"活着"(没有核心部位缺失时可能还能存活) CheckPawnViability(targetPawn); - - // 可选:记录日志用于调试 - // Log.Message($"[AreaDestruction] Destroyed {partsDestroyed} body parts on {pawnInfo}"); } } catch (System.Exception ex) diff --git a/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompProperties_AbilityAreaDestruction.cs b/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompProperties_AbilityAreaDestruction.cs index 561a3b19..34d28655 100644 --- a/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompProperties_AbilityAreaDestruction.cs +++ b/Source/WulaFallenEmpire/Ability/WULA_AbilityAreaDestruction/CompProperties_AbilityAreaDestruction.cs @@ -12,6 +12,10 @@ namespace WulaFallenEmpire public EffecterDef castEffecter; public int castEffecterMaintainTicks = 60; + // 清除特效(用于清除重合物体) + public EffecterDef clearEffecter; + public int clearEffecterMaintainTicks = 30; + // 命中特效(在目标位置) public EffecterDef hitEffecter; public int hitEffecterMaintainTicks = 30; diff --git a/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompAbilityEffect_TeleportSelf.cs b/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompAbilityEffect_TeleportSelf.cs index fcf5f1d8..07705710 100644 --- a/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompAbilityEffect_TeleportSelf.cs +++ b/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompAbilityEffect_TeleportSelf.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; // 添加这个 using 指令 using RimWorld; using UnityEngine; using Verse; @@ -21,83 +22,101 @@ namespace WulaFallenEmpire Pawn caster = parent.pawn; Map map = caster.Map; + // 新增:在施法前验证并调整目标位置 + LocalTargetInfo adjustedTarget = AdjustTargetForBuildings(target, caster, map); + + // 使用调整后的目标位置 + IntVec3 finalTargetCell = adjustedTarget.Cell; + // 使用自定义或默认的入口特效 if (Props.customEntryFleck != null) { - // 自定义入口粒子效果 FleckMaker.Static(caster.Position, map, Props.customEntryFleck); } else { - // 默认入口粒子效果 FleckMaker.Static(caster.Position, map, FleckDefOf.PsycastSkipFlashEntry); } // 使用自定义或默认的出口特效 if (Props.customExitFleck != null) { - // 自定义出口粒子效果 - FleckMaker.Static(target.Cell, map, Props.customExitFleck); - // 如果需要更大的效果,可以创建多个粒子 + FleckMaker.Static(finalTargetCell, map, Props.customExitFleck); if (Props.effectScale > 1.5f) { for (int i = 0; i < Mathf.FloorToInt(Props.effectScale); i++) { Vector3 offset = new Vector3(Rand.Range(-0.5f, 0.5f), 0f, Rand.Range(-0.5f, 0.5f)); - FleckMaker.Static(target.Cell.ToVector3Shifted() + offset, map, Props.customExitFleck); + FleckMaker.Static(finalTargetCell.ToVector3Shifted() + offset, map, Props.customExitFleck); } } } else { - // 默认出口粒子效果 - FleckMaker.Static(target.Cell, map, FleckDefOf.PsycastSkipInnerExit); - FleckMaker.Static(target.Cell, map, FleckDefOf.PsycastSkipOuterRingExit); + FleckMaker.Static(finalTargetCell, map, FleckDefOf.PsycastSkipInnerExit); + FleckMaker.Static(finalTargetCell, map, FleckDefOf.PsycastSkipOuterRingExit); } // 播放传送音效 SoundDefOf.Psycast_Skip_Entry.PlayOneShot(new TargetInfo(caster.Position, map)); - SoundDefOf.Psycast_Skip_Exit.PlayOneShot(new TargetInfo(target.Cell, map)); + SoundDefOf.Psycast_Skip_Exit.PlayOneShot(new TargetInfo(finalTargetCell, map)); + + // 存储调整后的目标位置,供Apply方法使用 + // 注意:这里使用反射或其他方法来设置目标,因为parent.ability可能不可直接访问 + StoreAdjustedTarget(finalTargetCell); }, ticksAwayFromCast = 5 }; } + // 新增:存储调整后的目标位置 + private void StoreAdjustedTarget(IntVec3 targetCell) + { + // 这里可以使用一个字段来存储调整后的目标 + // 由于RimWorld的Ability类结构,我们可能需要使用其他方式 + // 暂时使用一个字段来存储 + this.adjustedTargetCell = targetCell; + } + + private IntVec3 adjustedTargetCell = IntVec3.Invalid; + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) { base.Apply(target, dest); - if (!target.IsValid) - { - return; - } - Pawn caster = parent.pawn; Map map = caster.Map; + // 新增:最终目标位置验证 - 优先使用调整后的目标 + IntVec3 finalTargetCell = this.adjustedTargetCell.IsValid ? this.adjustedTargetCell : target.Cell; + finalTargetCell = ValidateAndAdjustTarget(finalTargetCell, caster, map); + + // 重置调整目标 + this.adjustedTargetCell = IntVec3.Invalid; + + // 如果无法找到有效位置,取消传送 + if (!CanTeleportTo(finalTargetCell, map)) + { + Messages.Message("TeleportFailedNoValidLocation".Translate(), caster, MessageTypeDefOf.RejectInput); + return; + } + // 使用自定义或默认的入口效果器 EffecterDef entryEffecter = Props.customEntryEffecter ?? EffecterDefOf.Skip_Entry; Effecter entryEffect = entryEffecter.Spawn(caster, map); - // 应用效果缩放 - if (Props.effectScale != 1.0f && entryEffect is Effecter effect) - { - // 这里可以添加效果缩放的逻辑 - // 注意:Effecter类可能没有直接的缩放属性,需要根据具体实现调整 - } - parent.AddEffecterToMaintain(entryEffect, caster.Position, 60); // 使用自定义或默认的出口效果器 EffecterDef exitEffecter = Props.customExitEffecter ?? EffecterDefOf.Skip_Exit; - Effecter exitEffect = exitEffecter.Spawn(target.Cell, map); - parent.AddEffecterToMaintain(exitEffect, target.Cell, 60); + Effecter exitEffect = exitEffecter.Spawn(finalTargetCell, map); + parent.AddEffecterToMaintain(exitEffect, finalTargetCell, 60); // 唤醒可能休眠的组件 caster.TryGetComp()?.WakeUp(); // 执行传送 - caster.Position = target.Cell; + caster.Position = finalTargetCell; caster.Notify_Teleported(); // 如果是玩家阵营,解除战争迷雾 @@ -115,10 +134,81 @@ namespace WulaFallenEmpire // 播放到达时的喧嚣效果 if (Props.destClamorType != null) { - // 根据效果缩放调整喧嚣半径 float adjustedRadius = Props.destClamorRadius * Props.effectScale; - GenClamor.DoClamor(caster, target.Cell, adjustedRadius, Props.destClamorType); + GenClamor.DoClamor(caster, finalTargetCell, adjustedRadius, Props.destClamorType); } + + // 记录传送调整信息(调试用) + if (finalTargetCell != target.Cell) + { + Log.Message($"[TeleportSelf] AI传送位置从 {target.Cell} 调整到 {finalTargetCell}"); + } + } + + /// + /// 新增:在施法前调整目标位置,防止传送到建筑上 + /// + private LocalTargetInfo AdjustTargetForBuildings(LocalTargetInfo originalTarget, Pawn caster, Map map) + { + IntVec3 originalCell = originalTarget.Cell; + + // 如果目标位置不可传送,寻找最近的可行位置 + if (!CanTeleportTo(originalCell, map)) + { + IntVec3 adjustedCell = FindNearestValidTeleportPosition(originalCell, caster, map); + if (adjustedCell.IsValid) + { + return new LocalTargetInfo(adjustedCell); + } + } + + return originalTarget; + } + + /// + /// 新增:最终目标位置验证 + /// + private IntVec3 ValidateAndAdjustTarget(IntVec3 targetCell, Pawn caster, Map map) + { + // 如果目标位置不可传送,寻找替代位置 + if (!CanTeleportTo(targetCell, map)) + { + IntVec3 adjustedCell = FindNearestValidTeleportPosition(targetCell, caster, map); + if (adjustedCell.IsValid) + { + return adjustedCell; + } + } + + return targetCell; + } + + /// + /// 新增:寻找最近的可行传送位置 + /// + private IntVec3 FindNearestValidTeleportPosition(IntVec3 center, Pawn caster, Map map, int maxRadius = 15) + { + // 首先检查中心点本身 + if (CanTeleportTo(center, map)) + return center; + + // 在逐渐增大的半径内搜索 + for (int radius = 1; radius <= maxRadius; radius++) + { + // 使用 GenRadial.RadialPattern 而不是 RadialCellsAround + int numCells = GenRadial.NumCellsInRadius(radius); + for (int i = 0; i < numCells; i++) + { + IntVec3 cell = center + GenRadial.RadialPattern[i]; + if (cell.InBounds(map) && CanTeleportTo(cell, map)) + { + return cell; + } + } + } + + // 如果找不到有效位置,返回无效位置 + return IntVec3.Invalid; } public override bool Valid(LocalTargetInfo target, bool showMessages = true) diff --git a/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompProperties_AbilityTeleportSelf.cs b/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompProperties_AbilityTeleportSelf.cs index d69456a8..9826608b 100644 --- a/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompProperties_AbilityTeleportSelf.cs +++ b/Source/WulaFallenEmpire/Ability/WULA_AbilityTeleportSelf/CompProperties_AbilityTeleportSelf.cs @@ -25,6 +25,10 @@ namespace WulaFallenEmpire public FleckDef customExitFleck; public float effectScale = 1.0f; // 效果缩放比例 + // 新增:位置调整设置 + public int maxPositionAdjustRadius = 15; // 最大位置调整半径 + public bool allowPositionAdjustment = true; // 是否允许自动调整位置 + public CompProperties_AbilityTeleportSelf() { compClass = typeof(CompAbilityEffect_TeleportSelf); diff --git a/Source/WulaFallenEmpire/Projectiles/Projectile_NorthArcTrail.cs b/Source/WulaFallenEmpire/Projectiles/Projectile_NorthArcTrail.cs index 9fc3e72d..21a1eaa2 100644 --- a/Source/WulaFallenEmpire/Projectiles/Projectile_NorthArcTrail.cs +++ b/Source/WulaFallenEmpire/Projectiles/Projectile_NorthArcTrail.cs @@ -8,10 +8,9 @@ namespace WulaFallenEmpire public class Projectile_NorthArcTrail : Projectile_Explosive { // --- 弹道部分变量 --- - // 通过ModExtension配置的向北偏移高度 public float northOffsetDistance = 0f; - private Vector3 exactPositionInt; // 用于存储我们自己计算的位置 + private Vector3 exactPositionInt; private float curveSteepness = 1f; private Vector3 originPos; @@ -24,9 +23,12 @@ namespace WulaFallenEmpire // --- 尾迹部分变量 --- private TrackingBulletDef trackingDefInt; private int Fleck_MakeFleckTick; - private Vector3 lastTickPosition; // 记录上一帧位置用于计算拖尾方向 + private Vector3 lastTickPosition; + + // 新增:绘制相关变量 + private float currentArcHeight; + private const float DRAW_ALTITUDE_OFFSET = 15f; // 增加绘制高度偏移 - // 获取 XML 中的扩展数据 public TrackingBulletDef TrackingDef { get @@ -36,7 +38,6 @@ namespace WulaFallenEmpire trackingDefInt = def.GetModExtension(); if (trackingDefInt == null) { - // 如果没配置,给一个空的默认值防止报错,或者只报错一次 trackingDefInt = new TrackingBulletDef(); } } @@ -44,13 +45,26 @@ namespace WulaFallenEmpire } } - public override Vector3 ExactPosition => exactPositionInt; // 重写属性,让游戏获取我们计算的位置 - public override Quaternion ExactRotation => Quaternion.LookRotation(GetCurrentDirection()); // 弹头朝向当前移动方向 + // 修改:重写绘制位置,确保在正确的高度 + public override Vector3 ExactPosition + { + get + { + if (!initialized) + return base.ExactPosition; + + // 返回计算的位置,但保持Y轴为绘制高度 + Vector3 pos = exactPositionInt; + pos.y = def.Altitude + currentArcHeight + DRAW_ALTITUDE_OFFSET; + return pos; + } + } + + public override Quaternion ExactRotation => Quaternion.LookRotation(GetCurrentDirection()); public override void ExposeData() { base.ExposeData(); - // 保存弹道数据 Scribe_Values.Look(ref originPos, "originPos"); Scribe_Values.Look(ref destinationPos, "destinationPos"); Scribe_Values.Look(ref bezierControlPoint, "bezierControlPoint"); @@ -60,8 +74,8 @@ namespace WulaFallenEmpire Scribe_Values.Look(ref northOffsetDistance, "northOffsetDistance", 0f); Scribe_Values.Look(ref exactPositionInt, "exactPositionInt", Vector3.zero); Scribe_Values.Look(ref curveSteepness, "curveSteepness", 1f); + Scribe_Values.Look(ref currentArcHeight, "currentArcHeight", 0f); - // 保存尾迹数据 Scribe_Values.Look(ref Fleck_MakeFleckTick, "Fleck_MakeFleckTick", 0); Scribe_Values.Look(ref lastTickPosition, "lastTickPosition", Vector3.zero); } @@ -79,8 +93,7 @@ namespace WulaFallenEmpire } else { - // 如果没有配置,则使用默认值,或者从 projectile.arcHeightFactor 获取参考值 - northOffsetDistance = def.projectile.arcHeightFactor * 3; // 将arcHeightFactor转换为北向偏移距离 + northOffsetDistance = def.projectile.arcHeightFactor * 3; } // --- 初始化弹道 --- @@ -90,36 +103,27 @@ namespace WulaFallenEmpire float speed = def.projectile.speed; if (speed <= 0) speed = 1f; - // 计算直线距离估算时间 float distance = (originPos - destinationPos).MagnitudeHorizontal(); totalTicks = Mathf.CeilToInt(distance / speed * 100f); if (totalTicks < 1) totalTicks = 1; ticksFlying = 0; - // 贝塞尔曲线计算: - // 中点 + // 贝塞尔曲线计算 Vector3 midPoint = (originPos + destinationPos) / 2f; - // 顶点 (中点向北偏移 X 格) Vector3 apexPoint = midPoint + new Vector3(0, 0, northOffsetDistance); - // 控制点 P1 = 2 * 顶点 - 中点 bezierControlPoint = 2f * apexPoint - midPoint; initialized = true; - - // 初始化我们自己的位置 exactPositionInt = origin; - - // --- 初始化尾迹 --- lastTickPosition = origin; + currentArcHeight = 0f; } protected override void Tick() { - // 首先调用base.Tick(),让它处理组件更新(比如拖尾特效)和ticksToImpact base.Tick(); - // 如果base.Tick()已经处理了撞击,我们就不再继续 if (this.Destroyed) { return; @@ -133,61 +137,54 @@ namespace WulaFallenEmpire ticksFlying++; - // 1. 计算当前帧的新位置 (贝塞尔曲线) + // 1. 计算当前帧的新位置 float t = (float)ticksFlying / (float)totalTicks; if (t > 1f) t = 1f; float u = 1 - t; // 水平位移 (贝塞尔) Vector3 nextPos = (u * u * originPos) + (2 * u * t * bezierControlPoint) + (t * t * destinationPos); + // 垂直高度 (抛物线) - float arcHeight = def.projectile.arcHeightFactor * GenMath.InverseParabola(t); - nextPos.y = arcHeight; + currentArcHeight = def.projectile.arcHeightFactor * GenMath.InverseParabola(t); + nextPos.y = 0f; // 水平位置不包含高度 - // 检查边界 if (!nextPos.ToIntVec3().InBounds(base.Map)) { this.Destroy(); return; } - // 更新我们自己的位置 exactPositionInt = nextPos; // 2. 处理拖尾特效 - // 只有当这一帧移动了,且配置了 DefModExtension 时才生成 if (TrackingDef != null && TrackingDef.tailFleckDef != null) { Fleck_MakeFleckTick++; - // 检查生成间隔 if (Fleck_MakeFleckTick >= TrackingDef.fleckDelayTicks) { - // 简单的循环计时重置逻辑 if (Fleck_MakeFleckTick >= (TrackingDef.fleckDelayTicks + TrackingDef.fleckMakeFleckTickMax)) { Fleck_MakeFleckTick = TrackingDef.fleckDelayTicks; } Map map = base.Map; - // 只有当在地图内时才生成 if (map != null) { int count = TrackingDef.fleckMakeFleckNum.RandomInRange; - Vector3 currentPosition = this.ExactPosition; + Vector3 currentPosition = this.ExactPosition; // 使用重写后的ExactPosition Vector3 previousPosition = lastTickPosition; - // 仅当有位移时才计算角度,防止原地鬼畜 if ((currentPosition - previousPosition).MagnitudeHorizontalSquared() > 0.0001f) { float moveAngle = (currentPosition - previousPosition).AngleFlat(); for (int i = 0; i < count; i++) { - // 这里的逻辑完全照搬原来的 BulletWithTrail float velocityAngle = TrackingDef.fleckAngle.RandomInRange + moveAngle; FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, TrackingDef.tailFleckDef, TrackingDef.fleckScale.RandomInRange); - dataStatic.rotation = moveAngle; // 粒子朝向跟随移动方向 + dataStatic.rotation = moveAngle; dataStatic.rotationRate = TrackingDef.fleckRotation.RandomInRange; dataStatic.velocityAngle = velocityAngle; dataStatic.velocitySpeed = TrackingDef.fleckSpeed.RandomInRange; @@ -198,10 +195,8 @@ namespace WulaFallenEmpire } } - // 3. 更新上一帧位置 - lastTickPosition = nextPos; + lastTickPosition = ExactPosition; // 使用重写后的ExactPosition - // 4. 判定到达目标或倒计时爆炸 if (ticksFlying >= totalTicks) { Impact(null); @@ -209,6 +204,58 @@ namespace WulaFallenEmpire } } + // 修改:重写绘制方法,确保正确绘制 + protected override void DrawAt(Vector3 drawLoc, bool flip = false) + { + if (!initialized) + { + base.DrawAt(drawLoc, flip); + return; + } + + // 使用我们计算的位置进行绘制 + Vector3 finalDrawPos = ExactPosition; + + // 绘制阴影 + if (def.projectile.shadowSize > 0f) + { + DrawShadow(finalDrawPos, currentArcHeight); + } + + Quaternion rotation = ExactRotation; + if (def.projectile.spinRate != 0f) + { + float spinAngle = 60f / def.projectile.spinRate; + rotation = Quaternion.AngleAxis((float)Find.TickManager.TicksGame % spinAngle / spinAngle * 360f, Vector3.up); + } + + // 使用正确的绘制方法 + if (def.projectile.useGraphicClass) + { + Graphic.Draw(finalDrawPos, base.Rotation, this, rotation.eulerAngles.y); + } + else + { + Graphics.DrawMesh(MeshPool.GridPlane(def.graphicData.drawSize), finalDrawPos, rotation, DrawMat, 0); + } + + Comps_PostDraw(); + } + + // 修改:重写阴影绘制,使用正确的高度 + private void DrawShadow(Vector3 drawLoc, float height) + { + Material shadowMat = MaterialPool.MatFrom("Things/Skyfaller/SkyfallerShadowCircle", ShaderDatabase.Transparent); + if (shadowMat == null) return; + + float shadowSize = def.projectile.shadowSize * Mathf.Lerp(1f, 0.6f, height / (def.projectile.arcHeightFactor + 1f)); + Vector3 scale = new Vector3(shadowSize, 1f, shadowSize); + Vector3 shadowOffset = new Vector3(0f, -0.01f, 0f); + + Matrix4x4 matrix = Matrix4x4.TRS(drawLoc + shadowOffset, Quaternion.identity, scale); + Graphics.DrawMesh(MeshPool.plane10, matrix, shadowMat, 0); + } + // 计算当前位置的切线方向 private Vector3 GetCurrentDirection() { @@ -220,13 +267,9 @@ namespace WulaFallenEmpire float t = (float)ticksFlying / (float)totalTicks; if (t > 1f) t = 1f; - // 计算贝塞尔曲线的导数(切线向量) - // 对于二次贝塞尔曲线 B(t) = (1-t)²P₀ + 2(1-t)tP₁ + t²P₂ - // 导数 B'(t) = 2(1-t)(P₁-P₀) + 2t(P₂-P₁) float u = 1 - t; Vector3 tangent = 2 * u * (bezierControlPoint - originPos) + 2 * t * (destinationPos - bezierControlPoint); - // 如果切线向量为零,则使用默认方向 if (tangent.MagnitudeHorizontalSquared() < 0.0001f) { return (destinationPos - originPos).normalized; @@ -240,4 +283,4 @@ namespace WulaFallenEmpire base.Impact(hitThing, blockedByShield); } } -} \ No newline at end of file +} diff --git a/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompAreaDamage.cs b/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompAreaDamage.cs index 958031bd..4b257d5d 100644 --- a/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompAreaDamage.cs +++ b/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompAreaDamage.cs @@ -8,20 +8,23 @@ namespace WulaFallenEmpire public class CompAreaDamage : ThingComp { private int ticksUntilNextDamage; + private bool enabled; public CompProperties_AreaDamage Props => (CompProperties_AreaDamage)props; + public bool Enabled => enabled; public override void Initialize(CompProperties props) { base.Initialize(props); ticksUntilNextDamage = Props.damageIntervalTicks; + enabled = Props.startEnabled; } public override void CompTick() { base.CompTick(); - if (!parent.Spawned) + if (!parent.Spawned || !enabled) return; ticksUntilNextDamage--; @@ -32,6 +35,16 @@ namespace WulaFallenEmpire } } + public void Toggle() + { + enabled = !enabled; + } + + public void SetEnabled(bool newState) + { + enabled = newState; + } + private void DoAreaDamage() { Map map = parent.Map; @@ -227,6 +240,50 @@ namespace WulaFallenEmpire { base.PostExposeData(); Scribe_Values.Look(ref ticksUntilNextDamage, "ticksUntilNextDamage", Props.damageIntervalTicks); + Scribe_Values.Look(ref enabled, "enabled", Props.startEnabled); + } + + public override IEnumerable CompGetGizmosExtra() + { + // 只有拥有者可以操作开关 + if (parent.Faction != null && parent.Faction != Faction.OfPlayer && !parent.Faction.IsPlayer) + yield break; + + // 创建切换开关的 Gizmo + Command_Toggle toggleCommand = new Command_Toggle + { + defaultLabel = Props.toggleLabel.Translate(), + defaultDesc = Props.toggleDescription.Translate(), + icon = LoadToggleIcon(), + isActive = () => enabled, + toggleAction = () => Toggle() + }; + + yield return toggleCommand; + } + + private Texture2D LoadToggleIcon() + { + if (!string.IsNullOrEmpty(Props.toggleIconPath)) + { + return ContentFinder.Get(Props.toggleIconPath, false); + } + + // 默认图标 + return TexCommand.DesirePower; + } + + public override string CompInspectStringExtra() + { + string baseString = base.CompInspectStringExtra(); + string statusText = enabled ? + "AreaDamageEnabled".Translate() : + "AreaDamageDisabled".Translate(); + + if (string.IsNullOrEmpty(baseString)) + return statusText; + else + return baseString + "\n" + statusText; } } } diff --git a/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompProperties_AreaDamage.cs b/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompProperties_AreaDamage.cs index 5e0343ef..d56a6371 100644 --- a/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompProperties_AreaDamage.cs +++ b/Source/WulaFallenEmpire/ThingComp/WULA_AreaDamage/CompProperties_AreaDamage.cs @@ -33,6 +33,12 @@ namespace WulaFallenEmpire // 特殊效果 public bool showDamageNumbers = false; // 显示伤害数值(调试用) + // 新增:开关设置 + public bool startEnabled = true; // 初始是否启用 + public string toggleLabel = "Toggle Area Damage"; // 开关标签 + public string toggleDescription = "Enable or disable the area damage effect"; // 开关描述 + public string toggleIconPath; // 开关图标路径 + public CompProperties_AreaDamage() { compClass = typeof(CompAreaDamage); diff --git a/美术与文本源文件/Wula/Building/WULA_Turret.sai2 b/美术与文本源文件/Wula/Building/WULA_Turret.sai2 index 1cc30259..c203033a 100644 Binary files a/美术与文本源文件/Wula/Building/WULA_Turret.sai2 and b/美术与文本源文件/Wula/Building/WULA_Turret.sai2 differ diff --git a/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 b/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 index 5a8120cb..b21d8063 100644 Binary files a/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 and b/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 differ diff --git a/美术与文本源文件/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.sai2 b/美术与文本源文件/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.sai2 index d76e658c..9facc853 100644 Binary files a/美术与文本源文件/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.sai2 and b/美术与文本源文件/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.sai2 differ diff --git a/美术与文本源文件/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.sai2 b/美术与文本源文件/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.sai2 new file mode 100644 index 00000000..4374bb7b Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/Wula_Psi_Titan_AreaDamage.sai2 differ