This commit is contained in:
Tourswen
2025-12-05 12:52:15 +08:00
2 changed files with 225 additions and 0 deletions

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<QuestScriptDef>
<defName>WULA_Attack_Robber_Camp</defName>
<rootSelectionWeight>0</rootSelectionWeight>
<expireDaysRange>1</expireDaysRange>
<sendAvailableLetter>true</sendAvailableLetter>
<isRootSpecial>true</isRootSpecial> <!-- 特殊任务 -->
<questNameRules>
<rulesStrings>
<li>questName->The [bandit] [camp]</li>
<li>questName->[bandit] [camp]</li>
<li>questName->[asker_nameDef] and the [camp]</li>
<li>camp->Camp</li>
<li>camp->Outpost</li>
<li>camp->Lair</li>
<li>camp->Encampment</li>
<li>bandit->Bandit</li>
<li>bandit->Raider</li>
<li>bandit->Outlaw</li>
<li>bandit->Desperado</li>
<li>bandit->Fugitive</li>
<li>bandit->Marauder</li>
<li>bandit->Robber</li>
<li>bandit->Brigand</li>
</rulesStrings>
</questNameRules>
<questDescriptionRules>
<rulesStrings>
<li>questDescription->WULA_Attack_Robber_Camp_questDescription</li>
</rulesStrings>
</questDescriptionRules>
<root Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_SubScript">
<def>Util_RandomizePointsChallengeRating</def>
<parms>
<pointsFactorTwoStar>1.5</pointsFactorTwoStar>
<pointsFactorThreeStar>2</pointsFactorThreeStar>
</parms>
</li>
<li Class="QuestNode_SubScript">
<def>Util_AdjustPointsForDistantFight</def>
</li>
<li Class="QuestNode_GetMap">
<canBeSpace>true</canBeSpace>
</li>
<li Class="QuestNode_GetPawn">
<storeAs>asker</storeAs>
<mustBeFactionLeader>true</mustBeFactionLeader>
<allowPermanentEnemyFaction>false</allowPermanentEnemyFaction>
<hostileWeight>0.15</hostileWeight>
</li>
<li Class="QuestNode_GetSiteTile">
<storeAs>siteTile</storeAs>
<preferCloserTiles>true</preferCloserTiles>
<selectLandmarkChance>0.5</selectLandmarkChance>
<allowedLandmarks>
<li MayRequire="Ludeon.RimWorld.Odyssey">Oasis</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Lake</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">LakeWithIsland</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">LakeWithIslands</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Pond</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">DryLake</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">ToxicLake</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Wetland</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">HotSprings</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Archipelago</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">CoastalIsland</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Peninsula</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Bay</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Valley</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Cavern</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Chasm</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Cliffs</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Hollow</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">TerraformingScar</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">LavaLake</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Dunes</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">AncientHeatVent</li>
</allowedLandmarks>
</li>
<li Class="QuestNode_GetSitePartDefsByTagsAndFaction">
<storeAs>sitePartDefs</storeAs>
<storeFactionAs>siteFaction</storeFactionAs>
<sitePartsTags>
<li><tag>BanditCamp</tag></li>
</sitePartsTags>
<mustBeHostileToFactionOf>$asker</mustBeHostileToFactionOf>
</li>
<li Class="QuestNode_GetDefaultSitePartsParams">
<tile>$siteTile</tile>
<faction>$siteFaction</faction>
<sitePartDefs>$sitePartDefs</sitePartDefs>
<storeSitePartsParamsAs>sitePartsParams</storeSitePartsParamsAs>
</li>
<li Class="QuestNode_GetSiteThreatPoints">
<storeAs>sitePoints</storeAs>
<sitePartsParams>$sitePartsParams</sitePartsParams>
</li>
<li Class="QuestNode_SubScript">
<def>Util_GetDefaultRewardValueFromPoints</def>
<parms>
<!-- Use the actual threat points generated (some site parts define a minimum threshold) -->
<points>$sitePoints</points>
</parms>
</li>
<!-- Inflate reward value. Since we're basing the reward value on the threat points generated, we need to do this
even though the threat points was deflated from the input points already. -->
<li Class="QuestNode_Multiply">
<value1>$rewardValue</value1>
<value2>1.75</value2>
<storeAs>rewardValue</storeAs>
</li>
<li Class="QuestNode_SubScript">
<def>Util_GenerateSite</def>
</li>
<li Class="QuestNode_SpawnWorldObjects">
<worldObjects>$site</worldObjects>
</li>
<li Class="QuestNode_WorldObjectTimeout">
<worldObject>$site</worldObject>
<isQuestTimeout>true</isQuestTimeout>
<delayTicks>$(randInt(12,28)*60000)</delayTicks>
<inSignalDisable>site.MapGenerated</inSignalDisable>
<destroyOnCleanup>true</destroyOnCleanup>
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelQuestExpired">Quest expired: [resolvedQuestName]</label>
<text TKey="LetterTextQuestExpired">The bandit camp has packed up and moved on. The quest [resolvedQuestName] has expired.</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
</li>
</nodes>
</node>
</li>
<!-- If we enter and leave, the map is destroyed. Fail the quest. -->
<li Class="QuestNode_Signal">
<inSignal>site.Destroyed</inSignal>
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelQuestFailed">Quest failed: [resolvedQuestName]</label>
<text TKey="LetterTextQuestFailed">After being discovered, the bandit camp has dispersed. The quest [resolvedQuestName] has ended.</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
</li>
</nodes>
</node>
</li>
<li Class="QuestNode_Signal">
<inSignal>site.AllEnemiesDefeated</inSignal>
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Notify_PlayerRaidedSomeone">
<getRaidersFromMapParent>$site</getRaidersFromMapParent>
</li>
<li Class="QuestNode_GiveRewards">
<parms>
<allowGoodwill>true</allowGoodwill>
<allowRoyalFavor>true</allowRoyalFavor>
<chosenPawnSignal>ChosenPawnForReward</chosenPawnSignal>
</parms>
<addCampLootReward>true</addCampLootReward>
<customLetterLabel TKey="LetterLabelPaymentArrived">Payment arrived</customLetterLabel>
<customLetterText TKey="LetterTextPaymentArrived">You have defeated the bandit camp!\n\nThe payment from [asker_faction_name] has arrived.</customLetterText>
<nodeIfChosenPawnSignalUsed Class="QuestNode_Letter">
<letterDef>ChoosePawn</letterDef>
<label TKey="LetterLabelFavorReceiver">[asker_faction_royalFavorLabel]</label>
<text TKey="LetterTextFavorReceiver">These colonists participated in the victory for the quest [resolvedQuestName]. [asker_definite] wants to know who should receive the [royalFavorReward_amount] [asker_faction_royalFavorLabel] for this service.</text>
<useColonistsOnMap>$site</useColonistsOnMap>
<chosenPawnSignal>ChosenPawnForReward</chosenPawnSignal>
</nodeIfChosenPawnSignalUsed>
</li>
</nodes>
</node>
</li>
<li Class="QuestNode_End">
<inSignal>site.AllEnemiesDefeated</inSignal>
<outcome>Success</outcome>
</li>
</nodes>
</root>
</QuestScriptDef>
</Defs>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<LanguageData>
<WULA_Attack_Robber_Camp.questNameRules.rulesStrings>
<li>questName->[bandit][camp]</li>
<li>questName->[bandit][camp]</li>
<li>questName->[asker_nameDef]与[camp]</li>
<li>camp->营地</li>
<li>camp->哨所</li>
<li>camp->窝点</li>
<li>camp->据点</li>
<li>bandit->土匪</li>
<li>bandit->劫掠者</li>
<li>bandit->逃犯</li>
<li>bandit->暴徒</li>
<li>bandit->亡命者</li>
<li>bandit->掠夺者</li>
<li>bandit->强盗</li>
<li>bandit->劫匪</li>
</WULA_Attack_Robber_Camp.questNameRules.rulesStrings>
<WULA_Attack_Robber_Camp.questDescriptionRules.rulesStrings>
<li>questDescription->[asker_faction_name]的[asker_faction_leaderTitle][asker_nameFull],向我们发来了一条讯息。根据他们掌握的情报,一个属于[siteFaction_name]派系,由[siteFaction_pawnsPlural]建立的营地一直在袭击他们的远行队。\n\n[asker_nameDef]请求我们帮助他们摧毁这个营地,彻底消灭敌人的成员和炮塔。[asker_label]还提醒我们:\n\n[sitePart0_description]。</li>
</WULA_Attack_Robber_Camp.questDescriptionRules.rulesStrings>
</LanguageData>