diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 507a7cd6..f121f1c5 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/BackstoryDefs/Solid/Solid_Adult_WULA.xml b/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml index 645a8741..6b53300f 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 @@ -1040,6 +1040,21 @@ + + WULA_Adult_Backstory_Legion + Adulthood + 「军团」分体 + 「军团」分体 + [PAWN_nameDef]实际上没有自主心智,它直接链接乌拉帝国行星封锁机关的超级AI「军团」,作为其在外活动时的耳目。 + AllWork + Thin + Thin + Thin + +
  • Wula_Backstory_Categories_Legion
  • +
    +
    + WULA_Adult_Backstory999 diff --git a/1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml b/1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml index d5bffaf1..f51e9e94 100644 --- a/1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml +++ b/1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml @@ -40,6 +40,12 @@ Wula_PawnKind 乌拉帝国合成人 乌拉帝国合成人 + true + 总控 + true + +
  • WULA_Legion_PawnKind
  • +
    1 NamerFaction_Wula_PIA_Legion_Faction Wula/World/WorldObjects/Expanding/Wula_PIA_Legion_Faction diff --git a/1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml b/1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml index 29d970db..0621f514 100644 --- a/1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml +++ b/1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml @@ -34,4 +34,15 @@ WulaFallenEmpire.JobDriver_RecycleMechanoid 正在准备进入猫猫地堡。 + + + + WULA_InspectBuilding + WulaFallenEmpire.JobDriver_InspectBuilding + 正在考察TargetA. + true + Always + false + false + \ 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 61a4e445..4ca123b7 100644 --- a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml +++ b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml @@ -29,8 +29,6 @@
  • Wula_Apparel_Init
  • - - 0 1 1000~2000 @@ -374,4 +372,99 @@ + + + + WULA_Legion_PawnKind + + WulaSpecies + +
  • + + Wula/Item/WULA_Species_Icon + SRA/Pawn/Mechanoid/AllegianceOverlays/None + CutoutWithOverlay + Graphic_Multi + 1.1 + + (0.2, 0.3, 0.2) + + +
  • +
    + 0 + true + 18 + 20 + true + 10~20 + 10~20 + Wula_PIA_Legion_Faction + false + +
  • Wula_Legion_Apparel
  • +
    + +
  • Wula_Melee_Weapon_T2
  • +
    + 3000~8000 + 0 + 0 + 99999~99999 +
    + + Wula_PIA_Legion_Escort_Unit + + WulaSpecies + +
  • + + Wula/Item/WULA_Species_Icon + SRA/Pawn/Mechanoid/AllegianceOverlays/None + CutoutWithOverlay + Graphic_Multi + 1.1 + + (0.2, 0.3, 0.2) + + +
  • +
    + 18 + 20 + 500 + 10~20 + 10~20 + Poor + Poor + Poor + true + +
  • Wula_Armor_Super_Heavy
  • +
    + +
  • Wula_Melee_Weapon_T2
  • +
    + +
  • WULA_Heavy_Infantry_PowerArmor
  • +
  • WULA_Heavy_Infantry_Helmet
  • +
    + 3000~8000 + 1 + 1 + 1 + 999999~999999 + 999999~999999 + +
  • DeathAcidifier
  • +
    + + +
  • + +
  • Wula_Backstory_Categories
  • + + +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/QuestScriptDefs/WULA_Base_Tex_Quest.xml b/1.6/1.6/Defs/QuestScriptDefs/WULA_Base_Tex_Quest.xml new file mode 100644 index 00000000..eff06bf3 --- /dev/null +++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Base_Tex_Quest.xml @@ -0,0 +1,227 @@ + + + + + WULA_GiveQuest_Base_Tex + GiveQuest + + +
  • Map_PlayerHome
  • +
    + WULA_Base_Tex_Quest + IncidentWorker_GiveQuest + 0 + True +
    + + WULA_Base_Tex_Quest + 0 + true + false + 1 + true + false + + + +
  • questName->WULA_Base_Tex_Quest_questName
  • +
    +
    + + +
  • QuestHospitalityCommon
  • +
    + +
  • questDescription->WULA_Intro_Spy_questDescription
  • +
    +
    + + + + + +
  • + +
  • + WULA_Base_Tex_Reward + permissionReward +
  • + + +
  • WULA_GlobalStorageSenderPod
  • + + +
  • Wula_PIA_Legion_Faction
  • +
    + +
  • + taxAmount + 1 +
  • +
  • + taxInterval + 250 +
  • + +
  • + $points + 1 + taxAmount +
  • +
  • + Silver + $taxAmount + $taxInterval + TaxPaymentSuccess + TaxPaymentFailed + true + true +
  • + + +
  • + + 唯死亡和税收不可避免——按时上交什一税是乌拉帝国殖民地的光荣义务。\n\n查看任务列表以了解更多。 + NegativeEvent +
  • + + +
  • + TaxPaymentSuccess + + +
  • + + 帝国已经接收了税款,为了表彰你在纳税上的良好表现,一封税金缴纳凭证已经送到你的殖民地中! + PositiveEvent +
  • +
  • + $permissionReward +
  • +
  • + Wula_PIA_Legion_Faction + 10 + WULA_Base_Tex_Quest_Handle_Intime +
  • +
  • + Success + false +
  • +
    + + + + +
  • + 2 + Handle_Outtime_Counter + + +
  • + 60000 + + + Wula_PIA_Legion_Faction + -5 + WULA_Base_Tex_Quest_Handle_Outtime + +
  • + + + +
  • + 180000 + + + +
  • + Handle_Outtime +
  • + + + + +
  • + Handle_Outtime + + +
  • + Handle_Outtime + WULA_Base_Tex_Quest_UI_1 +
  • +
  • + + 作为乌拉帝国的殖民地,你被发现未按时纳税——或许一次两次她们可以原谅你,但是一直拖欠必然会激怒她们! + NegativeEvent +
  • +
  • + Wula_PIA_Legion_Faction + -10 + WULA_Base_Tex_Quest_Handle_Outtime +
  • +
  • + Fail +
  • + + + + +
    +
    + + WULA_Base_Tex_Quest_Handle_Intime + + + + WULA_Base_Tex_Quest_Handle_Outtime + + + + WULA_Base_Tex_Reward + + +
  • + 1 + + + + +
  • WULA_Tex_Voucher
  • + + + 1 + + + +
    +
    +
    + + WULA_Base_Tex_Quest_UI_1 + + Wula/Events/Portraits/WULA_Legion_6 + 「军团」,P.I.A + +
  • 你们没有按时交税——你们应该知道吧?\n\n<color=#820D13><i>我们都希望局势不会进一步恶化。</i></color>
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • + +
  • + + +
    +
    +
    \ 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 new file mode 100644 index 00000000..53a6976c --- /dev/null +++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Colony_Promotion.xml @@ -0,0 +1,457 @@ + + + + + WULA_GiveQuest_Colony_Promotion + GiveQuest + + +
  • Map_PlayerHome
  • +
    + WULA_Colony_Promotion + IncidentWorker_GiveQuest + 0 +
    + + WULA_Colony_Promotion + 3 + true + false + true + + + +
  • questName->WULA_Colony_Promotion_questName
  • +
    +
    + + +
  • QuestHospitalityCommon
  • +
    + +
  • questDescription->WULA_Colony_Promotion_questDescription
  • +
    +
    + + +
  • + + +
  • + map.MapRemoved + Fail + NotYetAcceptedOnly +
  • +
  • + map.MapRemoved + Fail + OngoingOnly + true +
  • + + +
  • + WULA_Legion_PawnKind + Wula_PIA_Legion_Faction + + true + WULA_Child_Backstory01 + WULA_Adult_Backstory_Legion + + asker +
  • + + +
  • + faction + $asker + false + true + true +
  • + +
  • + faction.BecameHostileToPlayer + + LetterTextFactionBecameHostile +
  • +
  • + faction.BecameHostileToPlayer + Fail +
  • +
  • + faction.BecameHostileToPlayer + InvalidPreAcceptance + NotYetAcceptedOnly +
  • + + + +
  • + lodgers + $asker +
  • + + +
  • + 2 + + Wula_PIA_Legion_Faction + Wula_PIA_Legion_Escort_Unit + lodgers + 1 + 1 + true + false + false + +
  • + + +
  • + $asker +
  • + + +
  • + $lodgers + Wula_PIA_Legion_Faction + HomeFaction + +
  • lodgers.RanWild
  • +
  • lodgers.BecameMutant
  • + + + + +
  • + $lodgers +
  • + + +
  • + $asker +
  • + + +
  • + $lodgers + false + lodgers.RanWild +
  • + + +
  • + + +
  • + $lodgers + true + false +
  • + +
  • + + +
  • + Util_TransportShip_DropOff + + $lodgers + Wula_PIA_Legion_Faction + +
  • + +
  • + goodwillChangeOnShuttleDestroyed + -50 +
  • + +
  • + pawnsLabelDef + [asker_nameDef] +
  • + +
  • + dropoffShipThing.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]. +
  • +
  • + Fail + $goodwillChangeOnShuttleDestroyed + $asker + ShuttleDestroyed +
  • +
    + + + + + + + + +
  • + asker.Destroyed + pickupShipThing.SentWithExtraColonists + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect, has died. [failLetterEndingCommon] + OngoingOrNotYetAccepted +
  • +
  • + Fail + -25 + $asker + QuestPawnLost + OngoingOrNotYetAccepted +
  • + + + + + +
  • + shuttleDelayTicks + 720000 +
  • +
  • + $shuttleDelayTicks + $lodgers + + +
  • + Util_TransportShip_Pickup + + $(3*60000) + $lodgers + 999999999 + $lodgers + +
  • +
  • + $lodgers + Should depart on shuttle +
  • +
  • + + 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. + $pickupShipThing +
  • + + + + + + + + + + + +
  • + enemyFaction + Pirate +
  • +
  • + + + Raids + 1.0 + 0.5 + 0.04 + 1~2 + 1.75 + 1000 + + +
  • + + + + + + +
  • + lodgersMoodThreshold + 0.25 +
  • +
  • + $asker + $lodgersMoodThreshold + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect and keep happy, has been below the minimum mood of [lodgersMoodThreshold] too long. [failLetterEndingCommon] +
  • +
  • + Fail +
  • + + + + + +
  • + lodgers.Arrested + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect, has been arrested. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + QuestPawnArrested +
  • + + + + + +
  • + lodgers.SurgeryViolation + + +
  • + + NegativeEvent + Unauthorized, violating surgery has been performed on {SUBJECT_definite}, who you were charged to protect. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + PerformedHarmfulSurgery +
  • + + + + + +
  • + lodgers.XenogermAbsorbed + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect, has had {SUBJECT_possessive} xenogerm forcibly absorbed. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + XenogermAbsorbed +
  • + + + + + +
  • + asker.LeftMap + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect, has left the assigned settlement. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + QuestPawnLost +
  • + + + + + +
  • + pickupShipThing.Destroyed + + +
  • + + NegativeEvent + The shuttle sent to collect the [asker_faction_leaderTitle] has been destroyed. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + ShuttleDestroyed +
  • + + + + + +
  • + asker.RanWild + + +
  • + + NegativeEvent + {SUBJECT_definite}, who you were charged to protect, has run wild. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + QuestPawnLost +
  • + + + + + +
  • + pickupShipThing.SentSatisfied + + Success + true + +
  • +
  • + pickupShipThing.SentUnsatisfied + + +
  • + + NegativeEvent + The shuttle sent to collect the [asker_faction_leaderTitle] has departed without [asker_objective]. [asker_pronoun] will now leave on foot. [failLetterEndingCommon] +
  • +
  • + Fail + -5 + $asker + MemberMissedShuttle +
  • + + + + +
    +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_NewColony.xml b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_NewColony.xml new file mode 100644 index 00000000..5b6ec346 --- /dev/null +++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_NewColony.xml @@ -0,0 +1,413 @@ + + + + WULA_Intro_NewColony + 0 + true + false + 1 + true + false + + + +
  • questName->WULA_Intro_NewColony_questName
  • +
    +
    + + +
  • QuestHospitalityCommon
  • +
    + +
  • questDescription->WULA_Intro_NewColony_questDescription
  • +
    +
    + + + + +
  • + 60 + + + +
  • + UI_Start +
  • +
  • + UI_Start + Wula_Intro_NewColony_UI_1 +
  • +
  • + Success + false +
  • +
    + + + +
    +
    + + Wula_Intro_NewColony_UI_1 + + Wula/Events/Portraits/WULA_Legion_2 + 「军团」,P.I.A + +
  • 这里是行星封锁机关P.I.A,看起来你们已经成功抵达地表了。根据规划,你们应该是第一批部署在这个星球地表的乌拉帝国合成人——遵照异族接触法则做事,建立本地根据地,如果有必要就呼叫舰队的支援。
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_2 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_5 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • + Wula_Intro_NewColony_UI_11 +
  • +
  • + +
  • + + +
    +
    + + Wula_Intro_NewColony_UI_2 + + Wula/Events/Portraits/WULA_Legion_3 + 「军团」,P.I.A + +
  • 第一次参加开拓任务?\n\n好吧,你们可以叫我「军团」,我是负责管理乌拉帝国行星封锁机关舰队的AI,根据你们的编制来说,我是你们的顶头上司。在登陆地表前,机械行会没有给你们设置正确的记忆扇区吗?
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_3 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_4 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_10 +
  • + + + + +
    +
    + + Wula_Intro_NewColony_UI_3 + + Wula/Events/Portraits/WULA_Legion_3 + 「军团」,P.I.A + +
  • 行星封锁机关是隶属于乌拉帝国开发署的暴力机关,控制着开发署所有的舰队,负责在疆域开拓中的侵略性接触。\n\n通常来说,类似边缘世界这样的星球,我们会直接封锁轨道,轰炸所有现存聚居地然后再投放殖民者,不过看起来这个世界还有救,所以你们作为第一批先遣队投放到星球上,和其他异族接触试探一下,明白了吗?
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_2 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_10 +
  • + + + + +
    +
    + + Wula_Intro_NewColony_UI_4 + + Wula/Events/Portraits/WULA_Legion_3 + 「军团」,P.I.A + +
  • 乌拉帝国机械行会负责所有的合成人的生产、审查、投放和初始化,你们在部署到舰队上时,应该会有一个机械师帮你们设置好预载了记忆的扇区,但是很显然那家伙失职了,才让你们在这里拿着一堆你们早该知道的事情来烦我。
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_2 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_10 +
  • + + + + +
    +
    + + Wula_Intro_NewColony_UI_5 + + Wula/Events/Portraits/WULA_Legion_3 + 「军团」,P.I.A + +
  • 你们的意思是,你们连不知道要干什么就被丢下来了?\n\n哎,你们要做的就是施展你们的百般武艺活下来,建立一个根据地。根据帝国税收法,你们每个一段时间需要上交税款——作为帝国殖民地,舰队和机群将成为你们的后盾。\n\n如果你们觉得你们准备好了,可以申请权限进阶审查,我会部署一个带卫队的分体去你们的殖民地考察一段时间,然后根据评级决定是否给你们晋升。晋升后的殖民地会获得更多的许可,允许调用更加强大的武备和支援。
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_2 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_10 +
  • + + + + +
    +
    + + Wula_Intro_NewColony_UI_10 + + Wula/Events/Portraits/WULA_Legion_2 + 「军团」,P.I.A + +
  • 还有什么事吗?
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_2 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • +
  • + Wula_Intro_NewColony_UI_5 +
  • + + + + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • + Wula_Intro_NewColony_UI_11 +
  • +
  • + +
  • + + +
    +
    + + Wula_Intro_NewColony_UI_11 + + Wula/Events/Portraits/WULA_Legion_2 + 「军团」,P.I.A + +
  • 帝国荣光永存。\n\n快去吧,有一整个世界在等着我们征服。
  • +
    + +
  • + + true + (255,255,255,255) + (157,201,185,195) + (255,255,255,255) + (255,255,255,255) + +
  • + +
  • + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/QuestScriptDefs/WULA_Base_QuestScript.xml b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml similarity index 52% rename from 1.6/1.6/Defs/QuestScriptDefs/WULA_Base_QuestScript.xml rename to 1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml index ab98eb50..0a9836fe 100644 --- a/1.6/1.6/Defs/QuestScriptDefs/WULA_Base_QuestScript.xml +++ b/1.6/1.6/Defs/QuestScriptDefs/WULA_Intro_Spy.xml @@ -1,428 +1,16 @@ - - WULA_Intro_NewColony - 0 - true - false - 1 - true - false - - - -
  • questName->WULA_Intro_NewColony_questName
  • -
    -
    - - -
  • QuestHospitalityCommon
  • -
    - -
  • questDescription->WULA_Intro_NewColony_questDescription
  • -
    -
    - - - - -
  • - 60 - - - -
  • - UI_Start -
  • -
  • - UI_Start - Wula_Intro_NewColony_UI_1 -
  • -
  • - Success - false -
  • -
    - - - -
    -
    - - Wula_Intro_NewColony_UI_1 - - Wula/Events/Portraits/WULA_Legion_2 - 「军团」,P.I.A - -
  • 这里是行星封锁机关P.I.A,看起来你们已经成功抵达地表了。根据规划,你们应该是第一批部署在这个星球地表的乌拉帝国合成人——遵照异族接触法则做事,建立本地根据地,如果有必要就呼叫舰队的支援。
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_2 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_5 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • - Wula_Intro_NewColony_UI_11 -
  • -
  • - -
  • - - -
    -
    - - Wula_Intro_NewColony_UI_2 - - Wula/Events/Portraits/WULA_Legion_3 - 「军团」,P.I.A - -
  • 第一次参加开拓任务?\n\n好吧,你们可以叫我「军团」,我是负责管理乌拉帝国行星封锁机关舰队的AI,根据你们的编制来说,我是你们的顶头上司。在登陆地表前,机械行会没有给你们设置正确的记忆扇区吗?
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_3 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_4 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_10 -
  • - - - - -
    -
    - - Wula_Intro_NewColony_UI_3 - - Wula/Events/Portraits/WULA_Legion_3 - 「军团」,P.I.A - -
  • 行星封锁机关是隶属于乌拉帝国开发署的暴力机关,控制着开发署所有的舰队,负责在疆域开拓中的侵略性接触。\n\n通常来说,类似边缘世界这样的星球,我们会直接封锁轨道,轰炸所有现存聚居地然后再投放殖民者,不过看起来这个世界还有救,所以你们作为第一批先遣队投放到星球上,和其他异族接触试探一下,明白了吗?
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_2 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_10 -
  • - - - - -
    -
    - - Wula_Intro_NewColony_UI_4 - - Wula/Events/Portraits/WULA_Legion_3 - 「军团」,P.I.A - -
  • 乌拉帝国机械行会负责所有的合成人的生产、审查、投放和初始化,你们在部署到舰队上时,应该会有一个机械师帮你们设置好预载了记忆的扇区,但是很显然那家伙失职了,才让你们在这里拿着一堆你们早该知道的事情来烦我。
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_2 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_10 -
  • - - - - -
    -
    - - Wula_Intro_NewColony_UI_5 - - Wula/Events/Portraits/WULA_Legion_3 - 「军团」,P.I.A - -
  • 你们的意思是,你们连不知道要干什么就被丢下来了?\n\n哎,你们要做的就是施展你们的百般武艺活下来,建立一个根据地。根据帝国税收法,你们每个一段时间需要上交税款——作为帝国殖民地,舰队和机群将成为你们的后盾。\n\n如果你们觉得你们准备好了,可以申请权限进阶审查,我会部署一个带卫队的分体去你们的殖民地考察一段时间,然后根据评级决定是否给你们晋升。晋升后的殖民地会获得更多的许可,允许调用更加强大的武备和支援。
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_2 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_10 -
  • - - - - -
    -
    - - Wula_Intro_NewColony_UI_10 - - Wula/Events/Portraits/WULA_Legion_2 - 「军团」,P.I.A - -
  • 还有什么事吗?
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_2 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • -
  • - Wula_Intro_NewColony_UI_5 -
  • - - - - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • - Wula_Intro_NewColony_UI_11 -
  • -
  • - -
  • - - -
    -
    - - Wula_Intro_NewColony_UI_11 - - Wula/Events/Portraits/WULA_Legion_2 - 「军团」,P.I.A - -
  • 帝国荣光永存。\n\n快去吧,有一整个世界在等着我们征服。
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • - -
  • - - -
    -
    - WULA_GiveQuest_Intro_Spy GiveQuest - +
  • Map_PlayerHome
  • WULA_Intro_Spy IncidentWorker_GiveQuest 0 - True
    WULA_Intro_Spy @@ -520,7 +108,7 @@
  • points - 50 + 350
  • @@ -1021,229 +609,4 @@
  • - - - - WULA_GiveQuest_Base_Tex - GiveQuest - - -
  • Map_PlayerHome
  • -
    - WULA_Base_Tex_Quest - IncidentWorker_GiveQuest - 0 - True -
    - - WULA_Base_Tex_Quest - 0 - true - false - 1 - true - false - - - -
  • questName->WULA_Base_Tex_Quest_questName
  • -
    -
    - - -
  • QuestHospitalityCommon
  • -
    - -
  • questDescription->WULA_Intro_Spy_questDescription
  • -
    -
    - - - - - -
  • - -
  • - WULA_Base_Tex_Reward - permissionReward -
  • - - -
  • WULA_GlobalStorageSenderPod
  • - - -
  • Wula_PIA_Legion_Faction
  • -
    - -
  • - taxAmount - 1 -
  • -
  • - taxInterval - 250 -
  • - -
  • - $points - 1 - taxAmount -
  • -
  • - Silver - $taxAmount - $taxInterval - TaxPaymentSuccess - TaxPaymentFailed - true - true -
  • - - -
  • - - 唯死亡和税收不可避免——按时上交什一税是乌拉帝国殖民地的光荣义务。\n\n查看任务列表以了解更多。 - NegativeEvent -
  • - - -
  • - TaxPaymentSuccess - - -
  • - - 帝国已经接收了税款,为了表彰你在纳税上的良好表现,一封税金缴纳凭证已经送到你的殖民地中! - PositiveEvent -
  • -
  • - $permissionReward -
  • -
  • - Wula_PIA_Legion_Faction - 10 - WULA_Base_Tex_Quest_Handle_Intime -
  • -
  • - Success - false -
  • -
    - - - - -
  • - 2 - Handle_Outtime_Counter - - -
  • - 60000 - - - Wula_PIA_Legion_Faction - -5 - WULA_Base_Tex_Quest_Handle_Outtime - -
  • - - - -
  • - 180000 - - - -
  • - Handle_Outtime -
  • - - - - -
  • - Handle_Outtime - - -
  • - Handle_Outtime - WULA_Base_Tex_Quest_UI_1 -
  • -
  • - - 作为乌拉帝国的殖民地,你被发现未按时纳税——或许一次两次她们可以原谅你,但是一直拖欠必然会激怒她们! - NegativeEvent -
  • -
  • - Wula_PIA_Legion_Faction - -10 - WULA_Base_Tex_Quest_Handle_Outtime -
  • -
  • - Fail -
  • - - - - -
    -
    - - WULA_Base_Tex_Quest_Handle_Intime - - - - WULA_Base_Tex_Quest_Handle_Outtime - - - - WULA_Base_Tex_Reward - - -
  • - 1 - - - - -
  • WULA_Tex_Voucher
  • - - - 1 - - - -
    -
    -
    - - WULA_Base_Tex_Quest_UI_1 - - Wula/Events/Portraits/WULA_Legion_6 - 「军团」,P.I.A - -
  • 你们没有按时交税——你们应该知道吧?\n\n<color=#820D13><i>我们都希望局势不会进一步恶化。</i></color>
  • -
    - -
  • - - true - (255,255,255,255) - (157,201,185,195) - (255,255,255,255) - (255,255,255,255) - -
  • - -
  • - -
  • - - -
    -
    \ No newline at end of file diff --git a/1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml b/1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml index 388414f8..c45aa107 100644 --- a/1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml +++ b/1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml @@ -198,6 +198,23 @@
  • Map_PlayerHome
  • + + +
  • + WULA_Colony_License_LV1_Technology + WULA_GiveQuest_Base_Tex + WULA_Base_Tex_Quest + + + 0 + 15 + + + false + false + + Wula_PIA_Legion_Faction +
  • \ No newline at end of file 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 d2d431dc..07a87676 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 @@ -670,7 +670,7 @@ Wula/Building/Flag/WULA_Flag_Building_A (3,3) 0 - (0,0,3) + (0,1,3) 1.5 0.2 0 @@ -679,7 +679,7 @@ Wula/Building/Flag/WULA_Flag_Building_Mount (1,1) 1 - (0,0,0) + (0,1,0) 0 0 0 diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml b/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml index 2770cd34..56c137b4 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml @@ -337,6 +337,9 @@ Wula/Apparel/WULA_Bodystocking + +
  • Wula_Legion_Apparel
  • +
    Wula/Apparel/WULA_Bodystocking
    @@ -381,6 +384,39 @@ + + WULA_Eggplant_Hat + + 这也是帽子吗——茄子柄有了,那茄子在哪呢? + + Wula/Apparel/WULA_Eggplant_Hat + + + WULA_Synth_Clothes_1_Technology + + + +
  • UpperHead
  • +
    + +
  • Middle
  • +
    + Wula/Apparel/WULA_Eggplant_Hat + false + false + false +
    + + 20 + + + 200 + 500 + 2 + 0.1 + 0 + +
    WULA_Maid_Uniform @@ -463,6 +499,44 @@ 0.05 + + + WULA_Legion_Cloth + + 由乌拉帝国指挥官所穿的鎏金四溢的华服。\n\n你还想听什么介绍?你觉得这个东西你有足够的身份穿吗? + + Wula/Apparel/WULA_Legion_Cloth + + + +
  • Wula_Legion_Apparel
  • +
    + +
  • Torso
  • +
  • Neck
  • +
  • Shoulders
  • +
  • Arms
  • +
  • Legs
  • +
    + +
  • Middle
  • +
    + Wula/Apparel/WULA_Legion_Cloth + false + false + false +
    + + 300 + 100 + + + 500 + 12000 + 1 + 1 + +
    WULA_Assault_Troop_PowerArmor @@ -677,7 +751,7 @@ 1.5 1.5 2.0 - 15 + 5 -0.1 diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Manpack_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Manpack_Weapon.xml index 9dd51465..bab1412f 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Manpack_Weapon.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Manpack_Weapon.xml @@ -257,9 +257,6 @@
  • Wula_Melee_Weapon_T2
  • - -
  • RewardStandardQualitySuper
  • -
  • Wula/Weapon/WULA_MW_ChainSword/WULA_MW_ChainSword_Anim @@ -969,9 +966,6 @@
  • Wula_Ranged_Weapon_T2
  • - -
  • RewardStandardQualitySuper
  • -
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml index bfe770d1..1909e0d2 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml @@ -402,6 +402,22 @@
  • Humanlike_PostMain
  • + + + +
  • + WULA_Legion_PawnKind + +
  • + Misc + +
  • + 4.0 +
  • + + + +
  • diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Base_Tex_Quest.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Base_Tex_Quest.xml new file mode 100644 index 00000000..45a7358b --- /dev/null +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Base_Tex_Quest.xml @@ -0,0 +1,9 @@ + + + +
  • questName->什一税税收
  • + + +
  • questDescription->唯死亡和税收不可避免——按时上交什一税是乌拉帝国殖民地的光荣义务。\n\n乌拉帝国每隔一个季度(15天)收一次什一税,什一税会从殖民地储存在舰队中的资产里面扣除,你可以建造<color=#6BB7B7><i>乌拉帝国物资输送舱</i></color>来将物资输送到位于轨道上的舰队。\n\n乌拉帝国对积极纳税的殖民地会给予更多关照——但是如果拖延,则每延期一天都会惹其不快,最后甚至有可能被定性为叛国!
  • +
    + \ No newline at end of file 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 new file mode 100644 index 00000000..ee6e40e3 --- /dev/null +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Colony_Promotion.xml @@ -0,0 +1,62 @@ + + + +
  • questName->殖民地考察
  • +
    + +
  • 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_NewColony.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_NewColony.xml new file mode 100644 index 00000000..4f2c9d02 --- /dev/null +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_NewColony.xml @@ -0,0 +1,9 @@ + + + +
  • questName->新殖民地
  • +
    + +
  • questDescription->乌拉帝国的先遣队已经抵达地表,舰队给她们发来了第一条通讯。
  • +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/Wula_Base_QuestScript.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml similarity index 86% rename from 1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/Wula_Base_QuestScript.xml rename to 1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml index f7882bd0..4452ada8 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/Wula_Base_QuestScript.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/DefInjected/QuestScriptDef/WULA_Intro_Spy.xml @@ -1,12 +1,5 @@  - -
  • questName->新殖民地
  • -
    - -
  • questDescription->乌拉帝国的先遣队已经抵达地表,舰队给她们发来了第一条通讯。
  • -
    -
  • questName->掩护帝国密探
  • @@ -62,11 +55,4 @@ 任务失败:[resolvedQuestName] 前来迎接[asker_nameDef]的穿梭机在离开时因为一些原因落下了[asker_objective]。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon] - - -
  • questName->什一税税收
  • -
    - -
  • questDescription->唯死亡和税收不可避免——按时上交什一税是乌拉帝国殖民地的光荣义务。\n\n乌拉帝国的什一税会从殖民地储存在舰队中的资产里面扣除,你可以建造<color=#6BB7B7><i>乌拉帝国物资输送舱</i></color>来将物资输送到位于轨道上的舰队。\n\n乌拉帝国对积极纳税的殖民地会给予更多关照——但是如果拖延,则每延期一天都会惹其不快,最后甚至有可能被定性为叛国!
  • -
    \ No newline at end of file diff --git a/Content/Textures/Wula/Apparel/WULA_Body_Suit.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit.png deleted file mode 100644 index 790f53b6..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Body_Suit.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png deleted file mode 100644 index ac3c9e07..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png deleted file mode 100644 index 7ad97ed8..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png deleted file mode 100644 index 8a429797..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat.png b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat.png new file mode 100644 index 00000000..d769d2fb Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_east.png new file mode 100644 index 00000000..c6f196f4 Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_east.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_north.png new file mode 100644 index 00000000..beabd7bf Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_north.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_south.png new file mode 100644 index 00000000..a303f45a Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Eggplant_Hat_Thin_south.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png index a473d26d..bc5f26e3 100644 Binary files a/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png and b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet.png deleted file mode 100644 index 88c50670..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png deleted file mode 100644 index 148ec6c1..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png deleted file mode 100644 index c5dbe5aa..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png deleted file mode 100644 index 045b4430..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png deleted file mode 100644 index 2dbb1410..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png deleted file mode 100644 index 3cbd7109..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png deleted file mode 100644 index d8849be4..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png deleted file mode 100644 index a7ec9597..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png deleted file mode 100644 index 7c2cd5a4..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Legion_Cloth.png b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth.png new file mode 100644 index 00000000..7b3047ba Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_east.png new file mode 100644 index 00000000..df13c068 Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_east.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_north.png new file mode 100644 index 00000000..3c1d0b56 Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_north.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_south.png new file mode 100644 index 00000000..f14bde80 Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Legion_Cloth_Thin_south.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_east.png index 0e9d0b54..7382eb25 100644 Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_east.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_east.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_north.png new file mode 100644 index 00000000..b403e2cc Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_north.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_south.png index 19efa43f..967083eb 100644 Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_south.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_Thin_south.png differ diff --git a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic.png deleted file mode 100644 index 3573208f..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png deleted file mode 100644 index c932f157..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png deleted file mode 100644 index b3b52580..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png deleted file mode 100644 index aee38ecb..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png deleted file mode 100644 index a6ea0387..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png deleted file mode 100644 index 4f0a2c15..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png deleted file mode 100644 index ae5a9ff1..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png deleted file mode 100644 index f7c53703..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil.png deleted file mode 100644 index c326f288..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png deleted file mode 100644 index 7a582a92..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png deleted file mode 100644 index 9973517c..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png and /dev/null differ diff --git a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png deleted file mode 100644 index 95d3d12e..00000000 Binary files a/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png and /dev/null differ diff --git a/Source/WulaFallenEmpire/Job/JobDriver_InspectBuilding.cs b/Source/WulaFallenEmpire/Job/JobDriver_InspectBuilding.cs new file mode 100644 index 00000000..e239c6ff --- /dev/null +++ b/Source/WulaFallenEmpire/Job/JobDriver_InspectBuilding.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class JobDriver_InspectBuilding : JobDriver + { + private const TargetIndex BuildingIndex = TargetIndex.A; + + private int ticksLeft; + + // 定义考察效果 - 可以使用现有的效果或创建自定义效果 + private static readonly EffecterDef InspectEffect = EffecterDefOf.Research; // 使用研究效果作为临时替代 + private static readonly SoundDef InspectSound = SoundDefOf.Interact_CleanFilth; // 使用建造声音作为临时替代 + + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + // 预订目标建筑 + return pawn.Reserve(job.targetA, job, 1, 1, null, errorOnFailed); + } + + protected override IEnumerable MakeNewToils() + { + // 失败条件 + this.FailOnDestroyedOrNull(BuildingIndex); + this.FailOnDespawnedOrNull(BuildingIndex); + this.FailOn(() => !pawn.health.capacities.CapableOf(PawnCapacityDefOf.Moving)); + + // 第一步:前往目标建筑 + yield return Toils_Goto.GotoCell(BuildingIndex, PathEndMode.Touch) + .FailOnSomeonePhysicallyInteracting(BuildingIndex); + + // 第二步:进行考察(带动画效果) + Toil inspectToil = CreateInspectionToil(); + yield return inspectToil; + } + + /// + /// 创建带动画效果的考察工作 + /// + private Toil CreateInspectionToil() + { + Toil inspectToil = new Toil(); + + inspectToil.initAction = () => + { + ticksLeft = job.expiryInterval; + + // 记录日志 + if (Prefs.DevMode) + { + Log.Message($"[JobDriver_InspectBuilding] {pawn.Name} started inspecting {TargetThingA.Label} for {ticksLeft} ticks"); + } + }; + + inspectToil.tickAction = () => + { + ticksLeft--; + + // 每 tick 检查是否完成 + if (ticksLeft <= 0) + { + ReadyForNextToil(); + } + }; + + inspectToil.defaultCompleteMode = ToilCompleteMode.Delay; + inspectToil.defaultDuration = job.expiryInterval; + + // 添加动画效果 + inspectToil.WithEffect(InspectEffect, BuildingIndex); + + // 添加音效 + inspectToil.PlaySustainerOrSound(() => InspectSound); + + // 添加进度条(可选) + inspectToil.WithProgressBar(BuildingIndex, + () => 1f - ((float)ticksLeft / job.expiryInterval), + interpolateBetweenActorAndTarget: true); + + inspectToil.AddFinishAction(() => + { + // 考察完成后的处理 + OnInspectionComplete(); + }); + + return inspectToil; + } + + /// + /// 考察完成时的处理 + /// + private void OnInspectionComplete() + { + // 可以在这里添加考察完成后的效果 + // 例如:增加技能经验、触发事件等 + + if (Prefs.DevMode) + { + Log.Message($"[JobDriver_InspectBuilding] {pawn.Name} completed inspection of {TargetThingA.Label}"); + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref ticksLeft, "ticksLeft", 0); + } + } +} diff --git a/Source/WulaFallenEmpire/Job/JobGiver_InspectBuilding.cs b/Source/WulaFallenEmpire/Job/JobGiver_InspectBuilding.cs new file mode 100644 index 00000000..30513f24 --- /dev/null +++ b/Source/WulaFallenEmpire/Job/JobGiver_InspectBuilding.cs @@ -0,0 +1,307 @@ +using RimWorld; +using RimWorld.Planet; +using System.Collections.Generic; +using System.Linq; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class JobGiver_InspectBuilding : ThinkNode_JobGiver + { + // 检查间隔(ticks) + private const int CheckInterval = 120; // 2秒检查一次 + + // 最大考察距离 + private const float MaxDistance = 20f; + + // 默认最小间隔(ticks)- 5分钟 + private const int DefaultMinIntervalTicks = 300 * 60; // 5分钟 * 60秒/分钟 * 60ticks/秒 + + // 存储每个 Pawn 的最后考察时间 + private static Dictionary lastInspectionTicks = new Dictionary(); + + protected override Job TryGiveJob(Pawn pawn) + { + // 检查 Pawn 是否有效 + if (pawn == null || pawn.Destroyed || !pawn.Spawned || pawn.Map == null) + return null; + + // 检查 Pawn 是否能够工作 + if (pawn.Downed || pawn.InMentalState || !pawn.health.capacities.CanBeAwake) + return null; + + // 检查 Pawn 是否能够移动 + if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Moving)) + return null; + + // 检查背景故事是否为军团背景 + if (!HasLegionBackstory(pawn)) + return null; + + // 检查是否已经有工作 + if (pawn.CurJob != null && pawn.CurJob.def == JobDefOf_WULA.WULA_InspectBuilding) + return null; + + // 检查冷却时间 + if (!CanInspectNow(pawn)) + return null; + + // 寻找合适的考察目标 + Thing inspectionTarget = FindRandomInspectionTarget(pawn); + if (inspectionTarget == null) + return null; + + // 创建考察工作 + Job job = JobMaker.MakeJob(JobDefOf_WULA.WULA_InspectBuilding, inspectionTarget); + job.expiryInterval = Rand.Range(300, 600); // 5-10秒的随机时间 + job.checkOverrideOnExpire = true; + + // 记录开始考察时间 + RecordInspectionStart(pawn); + + // 记录调试信息 + if (Prefs.DevMode) + { + Log.Message($"[JobGiver_InspectBuilding] Assigned inspection job to {pawn.Name} at {inspectionTarget.Label}"); + } + + return job; + } + + /// + /// 检查 Pawn 是否具有军团背景故事 + /// + private bool HasLegionBackstory(Pawn pawn) + { + if (pawn.story == null) + return false; + + // 检查成年背景故事是否为军团背景 + if (pawn.story.Adulthood != null && pawn.story.Adulthood.identifier == "WULA_Adult_Backstory_Legion") + return true; + + return false; + } + + /// + /// 检查 Pawn 是否可以开始新的考察(冷却时间检查) + /// + private bool CanInspectNow(Pawn pawn) + { + // 获取设置的最小间隔时间 + int minIntervalTicks = GetMinInspectionIntervalTicks(); + + // 如果 Pawn 没有记录,说明可以立即开始 + if (!lastInspectionTicks.ContainsKey(pawn)) + return true; + + int lastTick = lastInspectionTicks[pawn]; + int currentTick = Find.TickManager.TicksGame; + int elapsedTicks = currentTick - lastTick; + + // 检查是否已经过了最小间隔时间 + bool canInspect = elapsedTicks >= minIntervalTicks; + + if (Prefs.DevMode && !canInspect) + { + int remainingTicks = minIntervalTicks - elapsedTicks; + float remainingSeconds = remainingTicks / 60f; + Log.Message($"[JobGiver_InspectBuilding] {pawn.Name} must wait {remainingSeconds:F1} seconds before next inspection"); + } + + return canInspect; + } + + /// + /// 记录 Pawn 开始考察的时间 + /// + private void RecordInspectionStart(Pawn pawn) + { + lastInspectionTicks[pawn] = Find.TickManager.TicksGame; + + if (Prefs.DevMode) + { + Log.Message($"[JobGiver_InspectBuilding] Recorded inspection start for {pawn.Name} at tick {lastInspectionTicks[pawn]}"); + } + } + + /// + /// 获取最小考察间隔时间(ticks) + /// + private int GetMinInspectionIntervalTicks() + { + // 这里可以从 Mod 设置中获取值 + // 暂时返回默认值,您可以根据需要修改 + return DefaultMinIntervalTicks; + } + + /// + /// 随机寻找合适的考察目标 + /// + private Thing FindRandomInspectionTarget(Pawn pawn) + { + // 获取地图上所有符合条件的建筑 + List validBuildings = new List(); + + // 遍历地图上的所有建筑 + foreach (Thing thing in pawn.Map.listerThings.ThingsInGroup(ThingRequestGroup.BuildingArtificial)) + { + if (IsValidInspectionTarget(thing, pawn)) + { + validBuildings.Add(thing); + } + } + + // 如果没有找到合适的建筑,返回null + if (validBuildings.Count == 0) + { + if (Prefs.DevMode) + { + Log.Message($"[JobGiver_InspectBuilding] No valid inspection targets found for {pawn.Name}"); + } + return null; + } + + // 随机选择一个建筑 + Thing selectedBuilding = validBuildings.RandomElement(); + + if (Prefs.DevMode) + { + Log.Message($"[JobGiver_InspectBuilding] Randomly selected {selectedBuilding.Label} from {validBuildings.Count} valid targets"); + } + + return selectedBuilding; + } + + /// + /// 检查是否有效的考察目标 + /// + private bool IsValidInspectionTarget(Thing thing, Pawn pawn) + { + // 基本检查 + if (thing == null || thing.Destroyed) + return false; + + // 检查是否玩家拥有 + if (thing.Faction != Faction.OfPlayer) + return false; + + // 检查是否可到达 + if (!pawn.CanReach(thing, PathEndMode.Touch, Danger.None)) + return false; + + // 排除一些不适合的建筑类型 + if (thing.def.IsFrame || thing.def.IsBlueprint) + return false; + + // 确保建筑是完整的 + if (thing is Building building && (building.IsBurning() || building.IsBrokenDown())) + return false; + + // 确保不是禁止进入的区域 + if (thing.IsForbidden(pawn)) + return false; + + // 确保没有其他 Pawn 正在考察这个建筑 + if (IsBeingInspectedByOther(thing, pawn)) + return false; + + // 排除墙壁建筑 + if (IsWall(thing)) + return false; + + // 距离检查(可选,但为了性能考虑可以保留) + if (pawn.Position.DistanceTo(thing.Position) > MaxDistance) + return false; + + return true; + } + + /// + /// 检查是否为墙壁 + /// + private bool IsWall(Thing thing) + { + // 检查建筑的 def 中是否有 isWall 标签 + if (thing.def?.building != null && thing.def.building.isWall) + { + if (Prefs.DevMode) + { + Log.Message($"[JobGiver_InspectBuilding] Excluding wall: {thing.Label}"); + } + return true; + } + + // 额外的检查:通过 defName 或标签判断 + if (thing.def?.defName == "Wall" || + (thing.def?.thingCategories?.Any(c => c.defName == "Walls") ?? false)) + { + return true; + } + + return false; + } + + /// + /// 检查是否有其他 Pawn 正在考察这个建筑 + /// + private bool IsBeingInspectedByOther(Thing thing, Pawn currentPawn) + { + foreach (Pawn otherPawn in thing.Map.mapPawns.AllPawnsSpawned) + { + if (otherPawn != currentPawn && + otherPawn.CurJob != null && + otherPawn.CurJob.def == JobDefOf_WULA.WULA_InspectBuilding && + otherPawn.CurJob.targetA.Thing == thing) + { + return true; + } + } + return false; + } + + /// + /// 清理不再存在的 Pawn 的记录 + /// + public static void CleanupInspectionRecords() + { + List toRemove = new List(); + + foreach (var pair in lastInspectionTicks) + { + if (pair.Key.Destroyed || !pair.Key.Spawned) + { + toRemove.Add(pair.Key); + } + } + + foreach (Pawn pawn in toRemove) + { + lastInspectionTicks.Remove(pawn); + } + + if (Prefs.DevMode && toRemove.Count > 0) + { + Log.Message($"[JobGiver_InspectBuilding] Cleaned up {toRemove.Count} inspection records"); + } + } + + public class InspectionCleanupComponent : WorldComponent + { + private int lastCleanupTick = 0; + private const int CleanupIntervalTicks = 6000; // 每100秒清理一次 + public InspectionCleanupComponent(World world) : base(world) { } + public override void WorldComponentTick() + { + base.WorldComponentTick(); + int currentTick = Find.TickManager.TicksGame; + if (currentTick - lastCleanupTick > CleanupIntervalTicks) + { + JobGiver_InspectBuilding.CleanupInspectionRecords(); + lastCleanupTick = currentTick; + } + } + } + } +} diff --git a/Source/WulaFallenEmpire/QuestNodes/QuestNode_AddInspectionJob.cs b/Source/WulaFallenEmpire/QuestNodes/QuestNode_AddInspectionJob.cs new file mode 100644 index 00000000..2c5fffe2 --- /dev/null +++ b/Source/WulaFallenEmpire/QuestNodes/QuestNode_AddInspectionJob.cs @@ -0,0 +1,221 @@ +using RimWorld; +using RimWorld.QuestGen; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class QuestNode_AddInspectionJob : QuestNode + { + public SlateRef pawn; // 直接接收 Pawn 对象 + + public SlateRef inspectionJobDef; // 考察工作定义 + public SlateRef inspectionDuration; // 考察停留时间(秒) + public SlateRef requirePlayerOwned; // 是否要求玩家拥有 + public SlateRef requireAccessible; // 是否要求可到达 + + protected override bool TestRunInt(Slate slate) + { + if (inspectionJobDef.GetValue(slate) == null) + { + Log.Error("[QuestNode_AddInspectionJob] inspectionJobDef is null"); + return false; + } + + return true; + } + + protected override void RunInt() + { + Slate slate = QuestGen.slate; + + // 直接获取 Pawn 对象 + Pawn pawnValue = pawn.GetValue(slate); + if (pawnValue == null) + { + Log.Error("[QuestNode_AddInspectionJob] pawn is null"); + return; + } + + // 检查 Pawn 是否有效且已生成 + if (!IsPawnValidAndSpawned(pawnValue)) + { + // 如果 Pawn 无效或未生成,记录调试信息但不报错 + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Pawn {pawnValue.Name} is not ready for job assignment (Destroyed: {pawnValue.Destroyed}, Spawned: {pawnValue.Spawned}, Map: {pawnValue.Map?.Index ?? -1})"); + } + return; + } + + // 获取工作定义 + JobDef jobDef = inspectionJobDef.GetValue(slate) ?? JobDefOf.Wait; + + // 创建并分配工作 + Job job = CreateInspectionJob(pawnValue, jobDef, slate); + if (job != null) + { + pawnValue.jobs.TryTakeOrderedJob(job, JobTag.Misc); + + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Assigned inspection job to {pawnValue.Name} at position {pawnValue.Position}"); + } + } + else + { + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Failed to create inspection job for {pawnValue.Name}"); + } + } + } + + /// + /// 检查 Pawn 是否有效且已生成 + /// + private bool IsPawnValidAndSpawned(Pawn pawn) + { + if (pawn == null || pawn.Destroyed) + return false; + + if (!pawn.Spawned) + return false; + + if (pawn.Map == null) + return false; + + return true; + } + + /// + /// 创建考察工作 + /// + private Job CreateInspectionJob(Pawn pawn, JobDef jobDef, Slate slate) + { + // 寻找合适的考察目标 + Thing inspectionTarget = FindInspectionTarget(pawn, slate); + if (inspectionTarget == null) + { + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] No valid inspection target found for {pawn.Name} on map {pawn.Map}"); + } + return null; + } + + // 创建工作 + Job job = JobMaker.MakeJob(jobDef, inspectionTarget); + + // 设置停留时间(转换为 ticks) + float duration = inspectionDuration.GetValue(slate); + if (duration > 0) + { + job.expiryInterval = (int)(duration * 60f); // 秒转换为 ticks + } + else + { + job.expiryInterval = Rand.Range(180, 300); // 3-5 秒的随机时间 + } + + // 设置工作标签 + job.def.joyDuration = job.expiryInterval; + + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Created inspection job for {pawn.Name} at {inspectionTarget.Label} (Position: {inspectionTarget.Position})"); + } + + return job; + } + + /// + /// 寻找考察目标 + /// + private Thing FindInspectionTarget(Pawn pawn, Slate slate) + { + bool requirePlayerOwnedValue = requirePlayerOwned.GetValue(slate); + bool requireAccessibleValue = requireAccessible.GetValue(slate); + + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Searching for inspection target for {pawn.Name}"); + Log.Message($"[QuestNode_AddInspectionJob] Require player owned: {requirePlayerOwnedValue}, Require accessible: {requireAccessibleValue}"); + } + + // 寻找玩家拥有的建筑 + Thing target = GenClosest.ClosestThingReachable( + pawn.Position, + pawn.Map, + ThingRequest.ForGroup(ThingRequestGroup.BuildingArtificial), + PathEndMode.Touch, + TraverseParms.For(pawn), + maxDistance: 50f, + validator: (Thing t) => IsValidInspectionTarget(t, pawn, requirePlayerOwnedValue, requireAccessibleValue) + ); + + if (QuestGen.slate.Get("debugLogging", false)) + { + if (target != null) + { + Log.Message($"[QuestNode_AddInspectionJob] Found target: {target.Label} at {target.Position}"); + } + else + { + Log.Message($"[QuestNode_AddInspectionJob] No target found within range"); + } + } + + return target; + } + + /// + /// 检查是否有效的考察目标 + /// + private bool IsValidInspectionTarget(Thing thing, Pawn pawn, bool requirePlayerOwned, bool requireAccessible) + { + // 基本检查 + if (thing == null || thing.Destroyed) + return false; + + // 检查是否玩家拥有 + if (requirePlayerOwned && thing.Faction != Faction.OfPlayer) + { + if (QuestGen.slate.Get("debugLogging", false) && thing.Faction != null) + { + Log.Message($"[QuestNode_AddInspectionJob] Target {thing.Label} faction: {thing.Faction.Name}, required: Player"); + } + return false; + } + + // 检查是否可到达 + if (requireAccessible && !pawn.CanReach(thing, PathEndMode.Touch, Danger.None)) + { + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Target {thing.Label} at {thing.Position} is not reachable by {pawn.Name}"); + } + return false; + } + + // 排除一些不适合的建筑类型 + if (thing.def.IsFrame || thing.def.IsBlueprint) + return false; + + // 确保建筑是完整的 + if (thing is Building building && (building.IsBurning() || building.IsBrokenDown())) + return false; + + // 确保不是禁止进入的区域 + if (thing.IsForbidden(pawn)) + return false; + + if (QuestGen.slate.Get("debugLogging", false)) + { + Log.Message($"[QuestNode_AddInspectionJob] Target {thing.Label} at {thing.Position} is valid"); + } + + return true; + } + } +} diff --git a/Source/WulaFallenEmpire/QuestNodes/QuestNode_GeneratePawnWithCustomization.cs b/Source/WulaFallenEmpire/QuestNodes/QuestNode_GeneratePawnWithCustomization.cs new file mode 100644 index 00000000..43e03a23 --- /dev/null +++ b/Source/WulaFallenEmpire/QuestNodes/QuestNode_GeneratePawnWithCustomization.cs @@ -0,0 +1,194 @@ +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using RimWorld.Planet; +using RimWorld.QuestGen; +using Verse; + +namespace WulaFallenEmpire +{ + public class QuestNode_GeneratePawnWithCustomization : QuestNode + { + [NoTranslate] + public SlateRef storeAs; + + [NoTranslate] + public SlateRef addToList; + + [NoTranslate] + public SlateRef> addToLists; + + public SlateRef kindDef; + + public SlateRef faction; + + public SlateRef forbidAnyTitle; + + public SlateRef ensureNonNumericName; + + public SlateRef> forcedTraits; + + public SlateRef> prohibitedTraits; + + public SlateRef extraPawnForExtraRelationChance; + + public SlateRef relationWithExtraPawnChanceFactor; + + public SlateRef allowAddictions; + + public SlateRef biocodeWeaponChance; + + public SlateRef biocodeApparelChance; + + public SlateRef mustBeCapableOfViolence; + + public SlateRef isChild; + + public SlateRef allowPregnant; + + public SlateRef fixedGender; + + public SlateRef giveDependentDrugs; + + // 只保留自定义背景故事功能 + public SlateRef childhoodBackstory; + public SlateRef adulthoodBackstory; + public SlateRef useCustomBackstories; + + private const int MinExpertSkill = 11; + + protected override bool TestRunInt(Slate slate) + { + return true; + } + + protected virtual DevelopmentalStage GetDevelopmentalStage(Slate slate) + { + if (!Find.Storyteller.difficulty.ChildrenAllowed || !isChild.GetValue(slate)) + { + return DevelopmentalStage.Adult; + } + return DevelopmentalStage.Child; + } + + protected override void RunInt() + { + Slate slate = QuestGen.slate; + PawnKindDef value = kindDef.GetValue(slate); + Faction value2 = faction.GetValue(slate); + bool flag = allowAddictions.GetValue(slate) ?? true; + bool value3 = allowPregnant.GetValue(slate); + IEnumerable value4 = forcedTraits.GetValue(slate); + IEnumerable value5 = prohibitedTraits.GetValue(slate); + float value6 = biocodeWeaponChance.GetValue(slate); + bool value7 = mustBeCapableOfViolence.GetValue(slate); + Pawn value8 = extraPawnForExtraRelationChance.GetValue(slate); + float value9 = relationWithExtraPawnChanceFactor.GetValue(slate); + Gender? value10 = fixedGender.GetValue(slate); + float value11 = biocodeApparelChance.GetValue(slate); + DevelopmentalStage developmentalStage = GetDevelopmentalStage(slate); + + // 获取自定义背景故事设置 + BackstoryDef childhoodBackstoryValue = childhoodBackstory.GetValue(slate); + BackstoryDef adulthoodBackstoryValue = adulthoodBackstory.GetValue(slate); + bool useCustomBackstoriesValue = useCustomBackstories.GetValue(slate); + + PawnGenerationRequest request = new PawnGenerationRequest( + value, value2, PawnGenerationContext.NonPlayer, null, + forceGenerateNewPawn: false, allowDead: false, allowDowned: false, + canGeneratePawnRelations: true, value7, 1f, forceAddFreeWarmLayerIfNeeded: false, + allowGay: true, value3, allowFood: true, flag, inhabitant: false, + certainlyBeenInCryptosleep: false, forceRedressWorldPawnIfFormerColonist: false, + worldPawnFactionDoesntMatter: false, value6, value11, value8, value9, + null, null, value4, value5, null, null, null, value10, null, null, null, + null, forceNoIdeo: false, forceNoBackstory: false, forbidAnyTitle: false, + forceDead: false, null, null, null, null, null, 0f, developmentalStage); + + request.BiocodeApparelChance = biocodeApparelChance.GetValue(slate); + request.ForbidAnyTitle = forbidAnyTitle.GetValue(slate); + + Pawn pawn = PawnGenerator.GeneratePawn(request); + + // 确保名字不是数字(如果设置了) + if (ensureNonNumericName.GetValue(slate) && (pawn.Name == null || pawn.Name.Numerical)) + { + pawn.Name = PawnBioAndNameGenerator.GeneratePawnName(pawn); + } + + // 应用自定义背景故事 + if (useCustomBackstoriesValue) + { + ApplyCustomBackstories(pawn, childhoodBackstoryValue, adulthoodBackstoryValue); + } + + if (giveDependentDrugs.GetValue(slate) && ModsConfig.BiotechActive && pawn.genes != null) + { + foreach (Gene item in pawn.genes.GenesListForReading) + { + if (item.Active) + { + Gene_ChemicalDependency dep = item as Gene_ChemicalDependency; + if (dep != null && DefDatabase.AllDefs.Where((ThingDef x) => x.IsDrug && x.GetCompProperties().chemical == dep.def.chemical).TryRandomElementByWeight((ThingDef x) => x.generateCommonality, out var result)) + { + Thing thing = ThingMaker.MakeThing(result); + thing.stackCount = Rand.Range(1, 3); + pawn.inventory.innerContainer.TryAddOrTransfer(thing); + } + } + } + } + + if (storeAs.GetValue(slate) != null) + { + QuestGen.slate.Set(storeAs.GetValue(slate), pawn); + } + + if (addToList.GetValue(slate) != null) + { + QuestGenUtility.AddToOrMakeList(QuestGen.slate, addToList.GetValue(slate), pawn); + } + + if (addToLists.GetValue(slate) != null) + { + foreach (string item2 in addToLists.GetValue(slate)) + { + QuestGenUtility.AddToOrMakeList(QuestGen.slate, item2, pawn); + } + } + + QuestGen.AddToGeneratedPawns(pawn); + if (!pawn.IsWorldPawn()) + { + Find.WorldPawns.PassToWorld(pawn); + } + } + + /// + /// 应用自定义背景故事 + /// + private void ApplyCustomBackstories(Pawn pawn, BackstoryDef childhood, BackstoryDef adulthood) + { + if (childhood != null) + { + pawn.story.Childhood = childhood; + } + + if (adulthood != null) + { + pawn.story.Adulthood = adulthood; + } + + // 重新计算技能,因为背景故事会影响技能 + if (pawn.skills != null) + { + pawn.skills.Notify_SkillDisablesChanged(); + } + + // 重新计算工作类型 + if (pawn.workSettings != null) + { + pawn.workSettings.Notify_DisabledWorkTypesChanged(); + } + } + } +} diff --git a/Source/WulaFallenEmpire/Storyteller/StorytellerCompProperties_ImportantQuestWithFactionFilter.cs b/Source/WulaFallenEmpire/Storyteller/WULA_ImportantQuestWithFactionFilter/StorytellerCompProperties_ImportantQuestWithFactionFilter.cs similarity index 100% rename from Source/WulaFallenEmpire/Storyteller/StorytellerCompProperties_ImportantQuestWithFactionFilter.cs rename to Source/WulaFallenEmpire/Storyteller/WULA_ImportantQuestWithFactionFilter/StorytellerCompProperties_ImportantQuestWithFactionFilter.cs diff --git a/Source/WulaFallenEmpire/Storyteller/StorytellerComp_ImportantQuestWithFactionFilter.cs b/Source/WulaFallenEmpire/Storyteller/WULA_ImportantQuestWithFactionFilter/StorytellerComp_ImportantQuestWithFactionFilter.cs similarity index 100% rename from Source/WulaFallenEmpire/Storyteller/StorytellerComp_ImportantQuestWithFactionFilter.cs rename to Source/WulaFallenEmpire/Storyteller/WULA_ImportantQuestWithFactionFilter/StorytellerComp_ImportantQuestWithFactionFilter.cs diff --git a/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerCompProperties_SimpleTechnologyTrigger.cs b/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerCompProperties_SimpleTechnologyTrigger.cs new file mode 100644 index 00000000..e4e880d9 --- /dev/null +++ b/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerCompProperties_SimpleTechnologyTrigger.cs @@ -0,0 +1,40 @@ +using RimWorld; +using System.Collections.Generic; +using Verse; + +namespace WulaFallenEmpire +{ + public class StorytellerCompProperties_SimpleTechnologyTrigger : StorytellerCompProperties + { + // 必需配置 + public ResearchProjectDef technology; // 要检测的科技 + public IncidentDef incident; // 要触发的事件 + + // 时间配置 + public float fireAfterDaysPassed = 0f; // 游戏开始后多少天开始检测 + public float checkIntervalDays = 5f; // 检查间隔(天) + + // 任务相关配置 + public QuestScriptDef questDef; // 关联的任务定义(可选) + public bool preventDuplicateQuests = true; // 防止重复任务 + + // 派系关系校验 - 新增字段 + public FactionDef requiredFaction; // 必须存在的派系 + public bool requireNonHostileRelation = true; // 是否要求非敌对关系(默认true) + public bool requireFactionExists = true; // 是否要求派系必须存在(默认true) + + // 调试配置 + public bool debugLogging = false; // 启用调试日志 + + // 派系过滤(可选) + public List factionTypeWhitelist; + public List factionTypeBlacklist; + public bool useFactionFilter = false; + public FactionFilterDefaultBehavior defaultBehavior = FactionFilterDefaultBehavior.Allow; + + public StorytellerCompProperties_SimpleTechnologyTrigger() + { + compClass = typeof(StorytellerComp_SimpleTechnologyTrigger); + } + } +} diff --git a/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerComp_SimpleTechnologyTrigger.cs b/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerComp_SimpleTechnologyTrigger.cs new file mode 100644 index 00000000..fca17fde --- /dev/null +++ b/Source/WulaFallenEmpire/Storyteller/WULA_SimpleTechnologyTrigger/StorytellerComp_SimpleTechnologyTrigger.cs @@ -0,0 +1,308 @@ +using RimWorld; +using System.Collections.Generic; +using Verse; +using System.Linq; +using System.Text; +using RimWorld.Planet; + +namespace WulaFallenEmpire +{ + public class StorytellerComp_SimpleTechnologyTrigger : StorytellerComp + { + private StorytellerCompProperties_SimpleTechnologyTrigger SimpleProps => + (StorytellerCompProperties_SimpleTechnologyTrigger)props; + + // 重新实现基类的私有属性 + private static int IntervalsPassed => Find.TickManager.TicksGame / 1000; + + public override IEnumerable MakeIntervalIncidents(IIncidentTarget target) + { + // 检查基础条件(天数) + if (IntervalsPassed <= SimpleProps.fireAfterDaysPassed * 60) + yield break; + + // 检查是否满足周期 + if (!PassesIntervalCheck()) + yield break; + + // 检查派系关系条件 - 新增检查 + if (!PassesRequiredFactionCheck()) + yield break; + + // 检查派系过滤条件 + if (!PassesFactionFilter(target)) + yield break; + + // 检查科技条件 + if (!PassesTechnologyCheck()) + yield break; + + // 检查是否防止重复任务 + if (SimpleProps.preventDuplicateQuests && HasActiveQuest()) + yield break; + + // 触发事件 + IncidentDef techIncident = SimpleProps.incident; + if (techIncident.TargetAllowed(target)) + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Triggering incident {techIncident.defName} for technology {SimpleProps.technology.defName}"); + } + + yield return new FiringIncident(techIncident, this, GenerateParms(techIncident.category, target)); + } + } + + /// + /// 检查必需派系关系条件 - 新增方法 + /// + private bool PassesRequiredFactionCheck() + { + // 如果没有配置必需派系,直接通过 + if (SimpleProps.requiredFaction == null) + return true; + + // 查找派系 + Faction requiredFactionInstance = Find.FactionManager.FirstFactionOfDef(SimpleProps.requiredFaction); + + // 检查派系是否存在 + if (SimpleProps.requireFactionExists) + { + if (requiredFactionInstance == null || requiredFactionInstance.defeated) + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Required faction {SimpleProps.requiredFaction.defName} does not exist or is defeated"); + } + return false; + } + } + + // 检查派系关系 + if (SimpleProps.requireNonHostileRelation && requiredFactionInstance != null) + { + Faction playerFaction = Faction.OfPlayer; + if (requiredFactionInstance.HostileTo(playerFaction)) + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Required faction {SimpleProps.requiredFaction.defName} is hostile to player"); + } + return false; + } + } + + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Required faction {SimpleProps.requiredFaction.defName} check passed"); + } + + return true; + } + + /// + /// 检查是否满足触发周期 + /// + private bool PassesIntervalCheck() + { + // 简单的周期检查:每 X 天检查一次 + int currentInterval = IntervalsPassed; + int checkInterval = (int)(SimpleProps.checkIntervalDays * 60); + + // 如果检查间隔为0,则每个间隔都检查 + if (checkInterval <= 0) + return true; + + return currentInterval % checkInterval == 0; + } + + /// + /// 检查科技条件 + /// + private bool PassesTechnologyCheck() + { + if (SimpleProps.technology == null) + { + Log.Error("[SimpleTechnologyTrigger] No technology specified in props"); + return false; + } + + // 简单检查科技是否已研究完成 + bool hasTechnology = SimpleProps.technology.IsFinished; + + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Technology {SimpleProps.technology.defName} research status: {hasTechnology}"); + } + + return hasTechnology; + } + + /// + /// 检查派系过滤条件 + /// + private bool PassesFactionFilter(IIncidentTarget target) + { + // 如果不启用派系过滤,直接通过 + if (!SimpleProps.useFactionFilter) + return true; + + // 获取目标的派系 + Faction faction = GetTargetFaction(target); + if (faction == null) + return false; + + // 检查黑名单 + if (SimpleProps.factionTypeBlacklist != null && + SimpleProps.factionTypeBlacklist.Contains(faction.def)) + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Faction {faction.def.defName} is in blacklist"); + } + return false; + } + + // 检查白名单 + if (SimpleProps.factionTypeWhitelist != null && + SimpleProps.factionTypeWhitelist.Count > 0) + { + bool inWhitelist = SimpleProps.factionTypeWhitelist.Contains(faction.def); + + switch (SimpleProps.defaultBehavior) + { + case FactionFilterDefaultBehavior.Allow: + // 白名单模式:在白名单中或默认允许 + if (SimpleProps.debugLogging && !inWhitelist) + { + Log.Message($"[SimpleTechnologyTrigger] Faction {faction.def.defName} not in whitelist, but default behavior is Allow"); + } + return true; + case FactionFilterDefaultBehavior.Deny: + // 白名单模式:只有在白名单中才允许 + if (inWhitelist) + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Faction {faction.def.defName} is in whitelist"); + } + return true; + } + else + { + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] Faction {faction.def.defName} not in whitelist and default behavior is Deny"); + } + return false; + } + } + } + + // 如果没有设置白名单,根据默认行为决定 + switch (SimpleProps.defaultBehavior) + { + case FactionFilterDefaultBehavior.Allow: + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] No whitelist, default behavior is Allow"); + } + return true; + case FactionFilterDefaultBehavior.Deny: + if (SimpleProps.debugLogging) + { + Log.Message($"[SimpleTechnologyTrigger] No whitelist, default behavior is Deny"); + } + return false; + default: + return true; + } + } + + /// + /// 获取目标的派系 + /// + private Faction GetTargetFaction(IIncidentTarget target) + { + if (target is Map map) + { + return map.ParentFaction ?? Faction.OfPlayer; + } + else if (target is World world) + { + return Faction.OfPlayer; + } + else if (target is Caravan caravan) + { + return caravan.Faction; + } + + return Faction.OfPlayer; + } + + /// + /// 检查是否存在活跃的相同任务 + /// + private bool HasActiveQuest() + { + if (SimpleProps.questDef == null) + return false; + + bool hasActiveQuest = Find.QuestManager.QuestsListForReading.Any((Quest q) => + q.root == SimpleProps.questDef && !q.Historical); + + if (SimpleProps.debugLogging && hasActiveQuest) + { + Log.Message($"[SimpleTechnologyTrigger] Active quest {SimpleProps.questDef.defName} found, skipping trigger"); + } + + return hasActiveQuest; + } + + /// + /// 调试方法:显示当前科技触发状态 + /// + public string GetSimpleTechnologyTriggerStatus() + { + StringBuilder status = new StringBuilder(); + status.AppendLine($"Simple Technology Trigger: {SimpleProps.technology?.defName ?? "NULL"}"); + status.AppendLine($"Research Status: {(PassesTechnologyCheck() ? "✅ COMPLETED" : "❌ NOT COMPLETED")}"); + status.AppendLine($"Required Faction: {SimpleProps.requiredFaction?.defName ?? "NONE"}"); + status.AppendLine($"Faction Relation: {(PassesRequiredFactionCheck() ? "✅ VALID" : "❌ INVALID")}"); + status.AppendLine($"Check Interval: {SimpleProps.checkIntervalDays} days"); + status.AppendLine($"Current Interval: {IntervalsPassed}"); + status.AppendLine($"Next Check: {GetNextCheckInterval()} intervals"); + status.AppendLine($"Can Trigger Now: {PassesIntervalCheck() && PassesTechnologyCheck() && PassesRequiredFactionCheck()}"); + + // 详细派系信息 + if (SimpleProps.requiredFaction != null) + { + Faction faction = Find.FactionManager.FirstFactionOfDef(SimpleProps.requiredFaction); + if (faction != null) + { + status.AppendLine($"Required Faction Status: {(faction.defeated ? "DEFEATED" : "ACTIVE")}"); + status.AppendLine($"Relation with Player: {(faction.HostileTo(Faction.OfPlayer) ? "HOSTILE" : "NON-HOSTILE")}"); + } + else + { + status.AppendLine($"Required Faction Status: NOT FOUND IN GAME"); + } + } + + return status.ToString(); + } + + /// + /// 计算下一次检查的间隔 + /// + private int GetNextCheckInterval() + { + int checkInterval = (int)(SimpleProps.checkIntervalDays * 60); + if (checkInterval <= 0) return 0; + + int currentInterval = IntervalsPassed; + return ((currentInterval / checkInterval) + 1) * checkInterval; + } + } +} diff --git a/Source/WulaFallenEmpire/WulaDefOf.cs b/Source/WulaFallenEmpire/WulaDefOf.cs index 9f9adc77..62b68b75 100644 --- a/Source/WulaFallenEmpire/WulaDefOf.cs +++ b/Source/WulaFallenEmpire/WulaDefOf.cs @@ -23,6 +23,7 @@ namespace WulaFallenEmpire { public static JobDef WULA_EnterMaintenancePod; public static JobDef WULA_HaulToMaintenancePod; + public static JobDef WULA_InspectBuilding; static JobDefOf_WULA() { diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 61d88bb1..c3279e8a 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -177,6 +177,8 @@ + + @@ -228,14 +230,18 @@ + + - - + + + + diff --git a/美术与文本源文件/Wula/Apparel/WULA_Eggplant_Hat_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Eggplant_Hat_south.sai2 new file mode 100644 index 00000000..8691b541 Binary files /dev/null and b/美术与文本源文件/Wula/Apparel/WULA_Eggplant_Hat_south.sai2 differ diff --git a/美术与文本源文件/Wula/Apparel/WULA_Legion_Cloth_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Legion_Cloth_Thin_south.sai2 new file mode 100644 index 00000000..ba8877ad Binary files /dev/null and b/美术与文本源文件/Wula/Apparel/WULA_Legion_Cloth_Thin_south.sai2 differ diff --git a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 index b49d8036..7675838b 100644 Binary files a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 and b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 differ diff --git a/美术与文本源文件/Wula/Projectile/WULA_Mortar_Shell.png b/美术与文本源文件/Wula/Projectile/WULA_Mortar_Shell.png deleted file mode 100644 index 6c01ec2f..00000000 Binary files a/美术与文本源文件/Wula/Projectile/WULA_Mortar_Shell.png and /dev/null differ