returning a leader creates a treaty (#2408)

Former-commit-id: e32c9c24f3c3d89afcec0104d3f6975c706eb72a
This commit is contained in:
2022-12-12 21:37:36 -08:00
committed by GitHub
parent 76f2659a68
commit cf96a106a4
4 changed files with 81 additions and 2 deletions
@@ -224,4 +224,5 @@ monthsReconConsideredRecent 12
aiMinimumCharismaForSwornBrother 65
aiMinimumConstitutionForSwornBrother 65
vassalMinimumGoldToSendSupplies 100
vassalMinimumFoodToSendSupplies 200
vassalMinimumFoodToSendSupplies 200
treatyMonthsFromReturningLeader 12
1 actionVigorCost 15
224 aiMinimumCharismaForSwornBrother 65
225 aiMinimumConstitutionForSwornBrother 65
226 vassalMinimumGoldToSendSupplies 100
227 vassalMinimumFoodToSendSupplies 200
228 treatyMonthsFromReturningLeader 12
@@ -539,6 +539,7 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/library/actions/impl/common:action",
"//src/main/scala/net/eagle0/eagle/library/actions/impl/common:immediate_single_result_action",
"//src/main/scala/net/eagle0/eagle/library/settings",
"//src/main/scala/net/eagle0/eagle/library/util:date_utils",
"//src/main/scala/net/eagle0/eagle/library/util:eagle_require",
"//src/main/scala/net/eagle0/eagle/library/util:faction_utils",
"//src/main/scala/net/eagle0/eagle/library/util:province_distances",
@@ -24,12 +24,14 @@ import net.eagle0.eagle.common.action_result_type.ActionResultType.{
CAPTURED_HERO_RETURNED,
RECRUIT_HEROES
}
import net.eagle0.eagle.common.treaty.Treaty
import net.eagle0.eagle.common.unaffiliated_hero.UnaffiliatedHero
import net.eagle0.eagle.common.unaffiliated_hero.UnaffiliatedHero.Type.{
OUTLAW,
PRISONER
}
import net.eagle0.eagle.internal.action_result.ActionResult
import net.eagle0.eagle.internal.changed_faction.ChangedFaction
import net.eagle0.eagle.internal.changed_hero.ChangedHero
import net.eagle0.eagle.internal.changed_hero.ChangedHero.Loyalty
import net.eagle0.eagle.internal.changed_province.ChangedProvince
@@ -60,6 +62,10 @@ object HandleCapturedHeroesCommand
Settings.getDouble(SettingsKeys.factionBiasAgainstFormerOnExile)
private def startingLoyalty: Double =
Settings.getDouble(SettingsKeys.startingLoyalty)
private def treatyMonthsFromReturningLeader: Int =
Settings.getInt(SettingsKeys.treatyMonthsFromReturningLeader)
import net.eagle0.eagle.library.util.DateUtils._Date
private case class HandleCapturedHeroesCommand(
sc: HandleCapturedHeroSelectedCommand,
@@ -208,6 +214,30 @@ object HandleCapturedHeroesCommand
addedRulingPlayerHeroIds = Vector(capturedHeroId)
)
),
changedFactions = Vector(
ChangedFaction(
id = actingFactionId,
removedTreatyPartners = Vector(capturedFromFactionId),
addedTreaties = Vector(
Treaty(
targetFactionId = capturedFromFactionId,
endDate =
gs.currentDate.addMonths(treatyMonthsFromReturningLeader)
)
)
),
ChangedFaction(
id = capturedFromFactionId,
removedTreatyPartners = Vector(actingFactionId),
addedTreaties = Vector(
Treaty(
targetFactionId = actingFactionId,
endDate =
gs.currentDate.addMonths(treatyMonthsFromReturningLeader)
)
)
)
),
notificationDetails = CapturedHeroReturnedDetails(
capturedFromFactionId = capturedFromFactionId,
provinceId = provinceId,
@@ -14,11 +14,13 @@ import net.eagle0.eagle.common.action_result_type.ActionResultType.{
CAPTURED_HERO_IMPRISONED,
CAPTURED_HERO_RETURNED
}
import net.eagle0.eagle.common.date.Date
import net.eagle0.eagle.common.recruitment_info.RecruitmentInfo
import net.eagle0.eagle.common.recruitment_info.RecruitmentStatus.{
RECRUITMENT_STATUS_OUTLAW,
RECRUITMENT_STATUS_PRISONER
}
import net.eagle0.eagle.common.treaty.Treaty
import net.eagle0.eagle.common.unaffiliated_hero.UnaffiliatedHero
import net.eagle0.eagle.common.unaffiliated_hero.UnaffiliatedHero.Type.{
OUTLAW,
@@ -44,6 +46,7 @@ class HandleCapturedHeroesCommandTest
val capturedHeroFaction = 12
private val gameState: GameState = GameState(
currentDate = Date(year = 343, month = 4),
provinces = Map(
19 -> Province(
id = 19,
@@ -100,7 +103,8 @@ class HandleCapturedHeroesCommandTest
SettingsKeys.recruitmentAdjustmentForOutlaw -> "50",
SettingsKeys.recruitmentAdjustmentPerTurnForPrisoner -> "5",
SettingsKeys.minOddsForQuest -> "-150",
SettingsKeys.minOddsForRecruitment -> "80"
SettingsKeys.minOddsForRecruitment -> "80",
SettingsKeys.treatyMonthsFromReturningLeader -> "10"
)
)
}
@@ -238,4 +242,47 @@ class HandleCapturedHeroesCommandTest
)
)
}
it should "add a treaty if Return chosen" in {
val selectedCommand = HandleCapturedHeroSelectedCommand(
selectedOption = RETURN_CAPTURED_HERO_OPTION,
heroId = 6
)
val commandWithReturnOption = availableCommand.update(
_.availableHeroes.head.options :+= RETURN_CAPTURED_HERO_OPTION
)
val result = HandleCapturedHeroesCommand
.make(
actingFactionId = actingFactionId,
gameState = gameState,
availableCommand = commandWithReturnOption,
selectedCommand = selectedCommand
)
.immediateExecute
result.`type` shouldBe CAPTURED_HERO_RETURNED
result.changedFactions.head.id shouldBe actingFactionId
result.changedFactions.head.addedTreaties shouldBe Vector(
Treaty(
targetFactionId = capturedHeroFaction,
endDate = Date(year = 344, month = 2)
)
)
result.changedFactions.head.removedTreatyPartners shouldBe Vector(
capturedHeroFaction
)
result.changedFactions.last.id shouldBe capturedHeroFaction
result.changedFactions.last.addedTreaties shouldBe Vector(
Treaty(
targetFactionId = actingFactionId,
endDate = Date(year = 344, month = 2)
)
)
result.changedFactions.last.removedTreatyPartners shouldBe Vector(
actingFactionId
)
}
}