From 8be9cd6a7691deb6753bc5a6ad219b12b553708a Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 24 May 2023 11:46:31 +0300 Subject: [PATCH] Modding: units can transform without limit on destination unit --- .../worldscreen/unit/actions/UnitActions.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 37488dd433..22af5fd9ce 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -327,30 +327,32 @@ object UnitActions { val transformList = ArrayList() for (unique in unit.baseUnit().getMatchingUniques(UniqueType.CanTransform, StateForConditionals(unit = unit, civInfo = civInfo, tile = unitTile))) { - val upgradedUnit = civInfo.getEquivalentUnit(unique.params[0]) - // don't show if haven't researched/is obsolete - if (!unit.upgrade.canUpgrade(unitToUpgradeTo = upgradedUnit)) continue + val unitToTransformTo = civInfo.getEquivalentUnit(unique.params[0]) + + val stateForConditionals = StateForConditionals(unit.civ, unit = unit) + if (unitToTransformTo.getMatchingUniques(UniqueType.OnlyAvailableWhen).any { !it.conditionalsApply(stateForConditionals) }) + continue // Check _new_ resource requirements // Using Counter to aggregate is a bit exaggerated, but - respect the mad modder. val resourceRequirementsDelta = Counter() for ((resource, amount) in unit.baseUnit().getResourceRequirementsPerTurn()) resourceRequirementsDelta.add(resource, -amount) - for ((resource, amount) in upgradedUnit.getResourceRequirementsPerTurn()) + for ((resource, amount) in unitToTransformTo.getResourceRequirementsPerTurn()) resourceRequirementsDelta.add(resource, amount) val newResourceRequirementsString = resourceRequirementsDelta.entries .filter { it.value > 0 } .joinToString { "${it.value} {${it.key}}".tr() } val title = if (newResourceRequirementsString.isEmpty()) - "Transform to [${upgradedUnit.name}]" - else "Transform to [${upgradedUnit.name}]\n([$newResourceRequirementsString])" + "Transform to [${unitToTransformTo.name}]" + else "Transform to [${unitToTransformTo.name}]\n([$newResourceRequirementsString])" transformList.add(UnitAction(UnitActionType.Transform, title = title, action = { unit.destroy() - val newUnit = civInfo.units.placeUnitNearTile(unitTile.position, upgradedUnit.name) + val newUnit = civInfo.units.placeUnitNearTile(unitTile.position, unitToTransformTo.name) /** We were UNABLE to place the new unit, which means that the unit failed to upgrade! * The only known cause of this currently is "land units upgrading to water units" which fail to be placed. @@ -363,9 +365,7 @@ object UnitActions { newUnit.currentMovement = 0f } }.takeIf { - unit.currentMovement > 0 - && !unit.isEmbarked() - && unit.upgrade.canUpgrade(unitToUpgradeTo = upgradedUnit) + unit.currentMovement > 0 && !unit.isEmbarked() } ) ) }