mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-20 12:48:56 +07:00
Moddable quest weighting for city-states
This commit is contained in:
@ -11,7 +11,6 @@ import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.city.INonPerpetualConstruction
|
||||
import com.unciv.logic.city.PerpetualConstruction
|
||||
import com.unciv.logic.civilization.AlertType
|
||||
import com.unciv.logic.civilization.CityStateType
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.civilization.NotificationIcon
|
||||
import com.unciv.logic.civilization.PlayerType
|
||||
@ -289,7 +288,7 @@ object NextTurnAutomation {
|
||||
|
||||
if (civInfo.wantsToFocusOn(Victory.Focus.Culture)) {
|
||||
for (cityState in civInfo.getKnownCivs()
|
||||
.filter { it.isCityState() && it.cityStateType == CityStateType.Cultured }) {
|
||||
.filter { it.isCityState() && it.cityStateFunctions.canGiveStat(Stat.Culture) }) {
|
||||
val diploManager = cityState.getDiplomacyManager(civInfo)
|
||||
if (diploManager.getInfluence() < 40) { // we want to gain influence with them
|
||||
tryGainInfluence(civInfo, cityState)
|
||||
|
@ -641,115 +641,13 @@ class QuestManager : IsPartOfGameInfoSerialization {
|
||||
*/
|
||||
private fun getQuestWeight(questName: String): Float {
|
||||
var weight = 1f
|
||||
val trait = civInfo.cityStateType
|
||||
val personality = civInfo.cityStatePersonality
|
||||
when (questName) {
|
||||
QuestName.Route.value -> {
|
||||
when (personality) {
|
||||
CityStatePersonality.Friendly -> weight *= 2f
|
||||
CityStatePersonality.Hostile -> weight *= .2f
|
||||
else -> {}
|
||||
}
|
||||
when (trait) {
|
||||
CityStateType.Maritime -> weight *= 1.2f
|
||||
CityStateType.Mercantile -> weight *= 1.5f
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
QuestName.ConnectResource.value -> {
|
||||
when (trait) {
|
||||
CityStateType.Maritime -> weight *= 2f
|
||||
CityStateType.Mercantile -> weight *= 3f
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
QuestName.ConstructWonder.value -> {
|
||||
if (trait == CityStateType.Cultured)
|
||||
weight *= 3f
|
||||
}
|
||||
QuestName.GreatPerson.value -> {
|
||||
if (trait == CityStateType.Cultured)
|
||||
weight *= 3f
|
||||
}
|
||||
QuestName.ConquerCityState.value -> {
|
||||
if (trait == CityStateType.Militaristic)
|
||||
weight *= 2f
|
||||
when (personality) {
|
||||
CityStatePersonality.Hostile -> weight *= 2f
|
||||
CityStatePersonality.Neutral -> weight *= .4f
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
QuestName.FindPlayer.value -> {
|
||||
when (trait) {
|
||||
CityStateType.Maritime -> weight *= 3f
|
||||
CityStateType.Mercantile -> weight *= 2f
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
QuestName.FindNaturalWonder.value -> {
|
||||
if (trait == CityStateType.Militaristic)
|
||||
weight *= .5f
|
||||
if (personality == CityStatePersonality.Hostile)
|
||||
weight *= .3f
|
||||
}
|
||||
QuestName.ClearBarbarianCamp.value -> {
|
||||
weight *= 3f
|
||||
if (trait == CityStateType.Militaristic)
|
||||
weight *= 3f
|
||||
}
|
||||
QuestName.GiveGold.value -> {
|
||||
weight *= when (trait) {
|
||||
CityStateType.Militaristic -> 2f
|
||||
CityStateType.Mercantile -> 3.5f
|
||||
else -> 3f
|
||||
}
|
||||
}
|
||||
QuestName.PledgeToProtect.value -> {
|
||||
weight *= when (trait) {
|
||||
CityStateType.Militaristic -> 2f
|
||||
CityStateType.Cultured -> 3.5f
|
||||
else -> 3f
|
||||
}
|
||||
}
|
||||
QuestName.BullyCityState.value -> {
|
||||
when (personality) {
|
||||
CityStatePersonality.Hostile -> weight *= 2f
|
||||
CityStatePersonality.Irrational -> weight *= 1.5f
|
||||
CityStatePersonality.Friendly -> weight *= .3f
|
||||
CityStatePersonality.Neutral -> {}
|
||||
}
|
||||
}
|
||||
QuestName.DenounceCiv.value -> {
|
||||
weight *= when (trait) {
|
||||
CityStateType.Religious -> 2.5f
|
||||
CityStateType.Maritime -> 2f
|
||||
else -> 1.5f
|
||||
}
|
||||
}
|
||||
QuestName.SpreadReligion.value -> {
|
||||
if (trait == CityStateType.Religious)
|
||||
weight *= 3f
|
||||
}
|
||||
QuestName.ContestCulture.value -> {
|
||||
if (trait == CityStateType.Cultured)
|
||||
weight *= 2f
|
||||
}
|
||||
QuestName.ContestFaith.value -> {
|
||||
weight *= when (trait) {
|
||||
CityStateType.Religious -> 2f
|
||||
else -> .5f
|
||||
}
|
||||
}
|
||||
QuestName.ContestTech.value -> {
|
||||
if (trait == CityStateType.Religious)
|
||||
weight *= .5f
|
||||
}
|
||||
QuestName.Invest.value -> {
|
||||
if (trait == CityStateType.Mercantile)
|
||||
weight *= 1.5f
|
||||
}
|
||||
}
|
||||
val quest = civInfo.gameInfo.ruleSet.quests[questName] ?: return 0f
|
||||
|
||||
val personalityWeight = quest.weightForCityStateType[civInfo.cityStatePersonality.name]
|
||||
if (personalityWeight != null) weight *= personalityWeight
|
||||
|
||||
val traitWeight = quest.weightForCityStateType[civInfo.cityStateType.name]
|
||||
if (traitWeight != null) weight *= traitWeight
|
||||
return weight
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,12 @@ class Quest : INamed {
|
||||
* quests [type]. */
|
||||
var minimumCivs: Int = 1
|
||||
|
||||
/** Certain city states are more likely to give certain quests
|
||||
* This is based on both personality and city-state type
|
||||
* Both are mapped here as 'how much to multiply the weight of this quest for this kind of city-state' */
|
||||
var weightForCityStateType = HashMap<String, Float>()
|
||||
|
||||
/** Checks if [this] is a Global quest */
|
||||
fun isGlobal(): Boolean = type == QuestType.Global
|
||||
fun isIndividual(): Boolean = !isGlobal()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user