From 5d9c1266d7803ab60e720cb450785b317fde509c Mon Sep 17 00:00:00 2001 From: Xander Lenstra <71121390+xlenstra@users.noreply.github.com> Date: Mon, 25 Oct 2021 18:09:39 +0200 Subject: [PATCH] Fixed ruins having two faith bonuses that could apply at the same time (#5545) * Fixed ruins having two faith bonuses that could apply at the same time * Added turn restrictions on ruins --- android/assets/jsons/Civ V - Vanilla/Ruins.json | 6 +++--- .../civilization/RuinsManager/RuinsManager.kt | 14 +++++++++----- .../com/unciv/models/ruleset/unique/UniqueType.kt | 11 +++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/android/assets/jsons/Civ V - Vanilla/Ruins.json b/android/assets/jsons/Civ V - Vanilla/Ruins.json index 1ddf8e5ea0..744df2f807 100644 --- a/android/assets/jsons/Civ V - Vanilla/Ruins.json +++ b/android/assets/jsons/Civ V - Vanilla/Ruins.json @@ -20,7 +20,7 @@ { "name": "your exploring unit receives training", "notification": "An ancient tribe trained us in their ways of combat!", - "uniques": ["This Unit gains [10] XP"] + "uniques": ["This Unit gains [10] XP", "Only available after [10] turns"] }, { "name": "survivors (adds population to a city)", @@ -58,13 +58,13 @@ { "name": "discover holy symbols", "notification": "We have found holy symbols in the ruins, giving us a deeper understanding of religion! (+[faithAmount] Faith)", - "uniques": ["Hidden when religion is disabled", "Gain enough Faith for a Pantheon"], + "uniques": ["Hidden when religion is disabled", "Gain enough Faith for a Pantheon", "Hidden after founding a Pantheon", "Only available after [20] turns"], "color": "#CDDDF4" }, { "name": "an ancient prophecy", "notification": "We have found an ancient prophecy in the ruins, greatly increasing our spiritual connection! (+[faithAmount] Faith)", - "uniques": ["Hidden when religion is disabled", "Gain enough Faith for [33]% of a Great Prophet", "Hidden after generating a Great Prophet"], + "uniques": ["Hidden when religion is disabled", "Gain enough Faith for [33]% of a Great Prophet", "Hidden after generating a Great Prophet", "Hidden before founding a Pantheon", "Only available after [20] turns"], "color": "#CDDDF4" } ] \ No newline at end of file diff --git a/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt b/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt index 81831969ca..90bd6bbb9c 100644 --- a/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt +++ b/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt @@ -2,8 +2,10 @@ package com.unciv.logic.civilization.RuinsManager import com.unciv.Constants import com.unciv.logic.civilization.CivilizationInfo +import com.unciv.logic.civilization.ReligionState import com.unciv.logic.map.MapUnit import com.unciv.models.ruleset.RuinReward +import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType import kotlin.random.Random @@ -43,13 +45,15 @@ class RuinsManager { for (possibleReward in possibleRewards) { if (civInfo.gameInfo.difficulty in possibleReward.excludedDifficulties) continue if (possibleReward.hasUnique(UniqueType.HiddenWithoutReligion) && !civInfo.gameInfo.isReligionEnabled()) continue - if ("Hidden after generating a Great Prophet" in possibleReward.uniques + if (possibleReward.hasUnique(UniqueType.HiddenAfterGreatProphet) && civInfo.civConstructions.boughtItemsWithIncreasingPrice[civInfo.religionManager.getGreatProphetEquivalent()] ?: 0 > 0 ) continue - if (possibleReward.uniqueObjects.any { unique -> - unique.placeholderText == "Only available after [] turns" - && unique.params[0].toInt() < civInfo.gameInfo.turns - }) continue + if (possibleReward.hasUnique(UniqueType.HiddenAfterPantheon) && civInfo.religionManager.religionState >= ReligionState.Pantheon) + continue + if (possibleReward.hasUnique(UniqueType.HiddenBeforePantheon) && civInfo.religionManager.religionState == ReligionState.None) + continue + if (possibleReward.getMatchingUniques(UniqueType.AvailableAfterCertainTurns).any { it.params[0].toInt() < civInfo.gameInfo.turns }) + continue var atLeastOneUniqueHadEffect = false for (unique in possibleReward.uniqueObjects) { diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index fcd6c70a39..402b45f364 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -264,8 +264,6 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) { CanEnterIceTiles("Can enter ice tiles", UniqueTarget.Unit), CannotEnterOcean("Cannot enter ocean tiles", UniqueTarget.Unit), CannotEnterOceanUntilAstronomy("Cannot enter ocean tiles until Astronomy", UniqueTarget.Unit), - - HiddenWithoutReligion("Hidden when religion is disabled", UniqueTarget.Unit, UniqueTarget.Building, UniqueTarget.Ruins), ///////////////////////////////////////// TILE UNIQUES ///////////////////////////////////////// @@ -408,6 +406,15 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) { TimedAttackStrength("+[amount]% attack strength to all [mapUnitFilter] Units for [amount] turns", UniqueTarget.Global), // used in Policy FreeStatBuildings("Provides the cheapest [stat] building in your first [amount] cities for free", UniqueTarget.Global), // used in Policy FreeSpecificBuildings("Provides a [buildingName] in your first [amount] cities for free", UniqueTarget.Global), // used in Policy + + ///////////////////////////////////////////// META ///////////////////////////////////////////// + + + HiddenWithoutReligion("Hidden when religion is disabled", UniqueTarget.Unit, UniqueTarget.Building, UniqueTarget.Ruins), + HiddenBeforePantheon("Hidden before founding a Pantheon", UniqueTarget.Ruins), + HiddenAfterPantheon("Hidden after founding a Pantheon", UniqueTarget.Ruins), + HiddenAfterGreatProphet("Hidden after generating a Great Prophet", UniqueTarget.Ruins), + AvailableAfterCertainTurns("Only available after [amount] turns", UniqueTarget.Ruins), ; /** For uniques that have "special" parameters that can accept multiple types, we can override them manually