---@meta

-- Unciv Lua 模组 API 类型定义（自动生成，请勿手工编辑）
-- Generated by LuaApiDefinitionWriter - never edit by hand.
-- Regenerate with: ./gradlew desktop:generateDocs
-- Unciv version: 4.21.8.3 (build 1255)
--
-- 用法 / Usage: install the LuaLS language server (VSCode extension "Lua" by sumneko),
-- then point workspace.library at this file in .luarc.json - you get autocompletion,
-- hover docs and immediate checking of ctx.civ.addGoldd(...)-style typos.
-- Note: signatures are best-effort; the runtime game (mod checker / mod-ci) is authoritative.

---@class UncivCiv
---@field id string
---@field name string
---@field isHuman boolean
---@field isAI boolean
---@field isAlive boolean
---@field isMajorCiv boolean
---@field isCityState boolean
---@field isBarbarian boolean
---@field isSpectator boolean
---@field getNation fun(): string
---@field getLeaderName fun(): string
---@field getScore fun(): number
---@field getForce fun(): number
---@field getGold fun(): number
---@field getHappiness fun(): number
---@field getStat fun(stat: string): number
---@field getStatYield fun(stat: string): number
---@field getGoldPerTurn fun(): number
---@field getSciencePerTurn fun(): number
---@field getCulturePerTurn fun(): number
---@field getFoodPerTurn fun(): number
---@field getProductionPerTurn fun(): number
---@field getResourceAmount fun(resourceName: string): number
---@field hasResource fun(resourceName: string): boolean
---@field getResourceStockpiles fun(): table
---@field getEra fun(): string
---@field getEraNumber fun(): number
---@field isResearched fun(techName: string): boolean
---@field canResearch fun(techName: string): boolean
---@field getResearchingTech fun(): string
---@field getResearchProgress fun(techName: string): number
---@field getTechCount fun(): number
---@field getTechsResearched fun(): string[]
---@field getAvailableTechs fun(): string[]
---@field getTechCost fun(techName: string): number
---@field grantTech fun(techName: string)
---@field discoverTech fun(techName: string)
---@field hasPolicy fun(policyName: string): boolean
---@field canAdoptPolicy fun(): boolean
---@field getAdoptedPolicyCount fun(): number
---@field getAdoptedPolicies fun(): string[]
---@field getAvailablePolicyBranches fun(): string[]
---@field grantPolicy fun(policyName: string)
---@field getCultureNeededForNextPolicy fun(): number
---@field isAtWarWith fun(civName: string): boolean
---@field hasOpenBordersWith fun(civName: string): boolean
---@field isAlliedWith fun(civName: string): boolean
---@field getDiplomaticStatus fun(civName: string): string
---@field getDiplomaticStatuses fun(): table
---@field getProximityTo fun(civName: string): string
---@field hasEmbassyWith fun(civName: string): boolean
---@field getInfluence fun(civName: string): number
---@field getKnownCivs fun(): string[]
---@field addInfluence fun(civName: string, amount: number)
---@field declareWarOn fun(civName: string)
---@field makePeaceWith fun(civName: string)
---@field hasReligion fun(): boolean
---@field getReligionName fun(): string
---@field getFaith fun(): number
---@field getCities fun(): UncivCity[]
---@field getCity fun(cityName: string): UncivCity|nil
---@field getCapital fun(): UncivCity|nil
---@field getCityCount fun(): number
---@field getCityNames fun(): string[]
---@field getTotalPopulation fun(): number
---@field getWondersBuilt fun(): string[]
---@field getUnits fun(): UncivUnit[]
---@field getUnitsMatching fun(filter: string): UncivUnit[]
---@field getUnitCount fun(): number
---@field isGoldenAge fun(): boolean
---@field getGoldenAgeTurnsRemaining fun(): number
---@field getSpyCount fun(): number
---@field getSpies fun(): table[]
---@field addSpy fun()
---@field getLeaderTitle fun(): string
---@field hasUnique fun(uniqueText: string): boolean
---@field addGold fun(amount: number)
---@field setGold fun(amount: number)
---@field addStat fun(stat: string, amount: number)
---@field addStats fun(statsText: string)
---@field addResource fun(resourceName: string, amount: number)
---@field consumeResource fun(resourceName: string, amount: number)
---@field triggerGoldenAge fun(turns: number?)
---@field grantFreeGreatPerson fun()
---@field setLeaderTitle fun(title: string)
---@field addNotification fun(text: string)
---@field addNotificationAt fun(text: string, x: number, y: number)
---@field addFreeTech fun()
---@field addUnit fun(unitName: string): boolean
---@field addUnitAtCity fun(unitName: string, cityName: string): boolean
---@field addUnitAtTile fun(unitName: string, x: number, y: number): boolean
---@field addRebelUnit fun(unitName: string): boolean

---@class UncivCity
---@field id string
---@field name string
---@field isCapital boolean
---@field isCoastal boolean
---@field isPuppet boolean
---@field isBeingRazed boolean
---@field isConnectedToCapital boolean
---@field population number
---@field health number
---@field getStatYield fun(stat: string): number
---@field getAllYields fun(): table
---@field getFood fun(): number
---@field getFoodSurplus fun(): number
---@field getFoodStorage fun(): number
---@field getFoodNeeded fun(): number
---@field getProductionProgress fun(): number
---@field getProductionCost fun(): number
---@field getTurnsToCompletion fun(): number
---@field getGarrisonedUnit fun(): UncivUnit|nil
---@field getStrength fun(): number
---@field getSpecialistCount fun(): number
---@field getUnemployedCount fun(): number
---@field getBuiltWonders fun(): string[]
---@field isInResistance fun(): boolean
---@field hasBuilding fun(buildingName: string): boolean
---@field getBuiltBuildings fun(): string[]
---@field getBuildingCount fun(): number
---@field getWonderCount fun(): number
---@field getPosition fun(): table
---@field getCenterTile fun(): UncivTile
---@field getTiles fun(): table
---@field getCurrentConstruction fun(): string
---@field getConstructionQueue fun(): string[]
---@field getMajorityReligion fun(): string
---@field isHolyCity fun(): boolean
---@field hasUnique fun(uniqueText: string): boolean
---@field addPopulation fun(amount: number)
---@field setPopulation fun(count: number)
---@field addFood fun(amount: number)
---@field addProduction fun(amount: number)
---@field addHealth fun(amount: number)
---@field setName fun(newName: string)
---@field addBuilding fun(buildingName: string)
---@field removeBuilding fun(buildingName: string)
---@field sellBuilding fun(buildingName: string)
---@field setProduction fun(itemName: string)
---@field addToQueue fun(itemName: string)
---@field clearQueue fun()

---@class UncivUnit
---@field id string
---@field name string
---@field instanceName string
---@field isCivilian boolean
---@field isMilitary boolean
---@field isRanged boolean
---@field isEmbarked boolean
---@field isFortified boolean
---@field isAutomated boolean
---@field base table
---@field health number
---@field getRange fun(): number
---@field getEraNumber fun(): number
---@field getMovement fun(): number
---@field getCurrentMovement fun(): number
---@field getXP fun(): number
---@field getMaxHealth fun(): number
---@field getDamage fun(): number
---@field getAttacksLeft fun(): number
---@field getVisibilityRange fun(): number
---@field getAction fun(): string
---@field canAttack fun(): boolean
---@field canPillage fun(): boolean
---@field isInEnemyTerritory fun(): boolean
---@field isInFriendlyTerritory fun(): boolean
---@field isGreatPerson fun(): boolean
---@field getReligionDisplayName fun(): string
---@field hasPromotion fun(promotionName: string): boolean
---@field hasUnique fun(uniqueText: string): boolean
---@field getPromotions fun(): string[]
---@field getPromotionCount fun(): number
---@field hasStatus fun(statusName: string): boolean
---@field getStatusTurns fun(statusName: string): number
---@field getPosition fun(): table
---@field canMoveTo fun(x: number, y: number): boolean
---@field getOwner fun(): string
---@field isOwnedBy fun(civName: string): boolean
---@field healBy fun(amount: number)
---@field takeDamage fun(amount: number)
---@field addXP fun(amount: number)
---@field setXP fun(amount: number)
---@field setHealth fun(amount: number)
---@field addPromotion fun(promotionName: string)
---@field removePromotion fun(promotionName: string)
---@field addMovement fun(amount: number)
---@field useMovement fun(amount: number)
---@field setStatus fun(statusName: string, turns: number)
---@field setAttacksLeft fun(count: number)
---@field fortify fun()
---@field moveByPath fun(path: table): number
---@field upgrade fun()
---@field destroy fun()
---@field attackTile fun(x: number, y: number): table|false
---@field getAttackingStrengthAgainst fun(x: number, y: number): number
---@field getDefendingStrengthAgainst fun(x: number, y: number): number
---@field predictDamageTo fun(x: number, y: number): number
---@field predictDamageFrom fun(x: number, y: number): number
---@field teleportTo fun(x: number, y: number)
---@field findPathTo fun(x: number, y: number): table|nil
---@field canReach fun(x: number, y: number): boolean

---@class UncivTile
---@field position table
---@field baseTerrain string
---@field isLand boolean
---@field isWater boolean
---@field isCoast boolean
---@field isHill boolean
---@field isMountain boolean
---@field resourceName string
---@field resourceAmount number
---@field improvementName string
---@field getX fun(): number
---@field getY fun(): number
---@field hasTerrainFeature fun(featureName: string): boolean
---@field getTerrainFeatures fun(): string[]
---@field isImpassable fun(): boolean
---@field isRiver fun(): boolean
---@field isAdjacentToCoast fun(): boolean
---@field hasRoad fun(): boolean
---@field hasRailroad fun(): boolean
---@field hasNaturalWonder fun(): boolean
---@field getNaturalWonder fun(): string
---@field hasResource fun(): boolean
---@field hasImprovement fun(): boolean
---@field isPillaged fun(): boolean
---@field getYield fun(): table
---@field isOwned fun(): boolean
---@field getOwner fun(): string
---@field isOwnedBy fun(civName: string): boolean
---@field isFriendlyTerritory fun(civName: string): boolean
---@field isEnemyTerritory fun(civName: string): boolean
---@field isCityCenter fun(): boolean
---@field getOwningCity fun(): string
---@field isExploredBy fun(civName: string): boolean
---@field getDistanceTo fun(x: number, y: number): number
---@field isAdjacentTo fun(x: number, y: number): boolean
---@field hasMilitaryUnit fun(): boolean
---@field hasCivilianUnit fun(): boolean
---@field getUnits fun(): UncivUnit[]
---@field getNeighbors fun(): UncivTile[]
---@field getNeighborAt fun(direction: number): UncivTile|nil
---@field getTilesInDistance fun(radius: number): UncivTile[]
---@field setExplored fun(civName: string, explored: boolean)
---@field setTerrain fun(terrainName: string)
---@field addTerrainFeature fun(featureName: string)
---@field removeTerrainFeature fun(featureName: string)
---@field setImprovement fun(improvementName: string)
---@field removeImprovement fun()
---@field removeResource fun()
---@field setResource fun(resourceName: string, amount: number)
---@field setRoad fun()
---@field setRailroad fun()
---@field removeRoad fun()

---@class UncivGame
---@field turn number
---@field speed string
---@field difficulty string
---@field getYear fun(): number
---@field getCurrentPlayer fun(): string
---@field getCurrentPlayerCiv fun(): UncivCiv|nil
---@field getCiv fun(civName: string): UncivCiv|nil
---@field getCivById fun(id: string): UncivCiv|nil
---@field getAllCivs fun(): UncivCiv[]
---@field getCivNames fun(): string[]
---@field getHumanCivs fun(): UncivCiv[]
---@field getAliveMajorCivs fun(): UncivCiv[]
---@field getAliveCityStates fun(): UncivCiv[]
---@field getBarbarianCiv fun(): UncivCiv
---@field getTile fun(x: number, y: number): UncivTile|nil
---@field findTiles fun(criteria: table): UncivTile[]
---@field getMapWidth fun(): number
---@field getMapHeight fun(): number
---@field getMapName fun(): string
---@field getMapType fun(): string
---@field isWrapped fun(): boolean
---@field getTilesNear fun(x: number, y: number, radius: number): UncivTile[]
---@field getEraNames fun(): string[]
---@field getVictoryTypes fun(): string[]
---@field getMods fun(): string[]
---@field getBaseRuleset fun(): string
---@field getRulesetBuildings fun(): string[]
---@field getRulesetUnits fun(): string[]
---@field getRulesetTechs fun(): string[]
---@field getRulesetPolicies fun(): string[]
---@field getRulesetEras fun(): string[]
---@field getRulesetPromotions fun(): string[]
---@field getRulesetTerrains fun(): string[]
---@field getRulesetResources fun(): string[]
---@field getRulesetImprovements fun(): string[]
---@field getRulesetNations fun(): string[]
---@field getRulesetReligions fun(): string[]
---@field getRulesetBeliefs fun(): string[]
---@field getRulesetEvents fun(): string[]
---@field getRulesetNaturalWonders fun(): string[]
---@field getRulesetUnitTypes fun(): string[]
---@field doesBuildingExist fun(buildingName: string): boolean
---@field doesUnitExist fun(unitName: string): boolean
---@field doesTechExist fun(techName: string): boolean
---@field doesPolicyExist fun(policyName: string): boolean
---@field doesEraExist fun(eraName: string): boolean
---@field doesPromotionExist fun(promotionName: string): boolean
---@field doesTerrainExist fun(terrainName: string): boolean
---@field doesResourceExist fun(resourceName: string): boolean
---@field doesImprovementExist fun(improvementName: string): boolean
---@field doesNationExist fun(nationName: string): boolean
---@field doesBeliefExist fun(beliefName: string): boolean
---@field doesEventExist fun(eventName: string): boolean
---@field addGlobalNotification fun(text: string)
---@field revealEntireMap fun(civName: string)
---@field revealTilesAround fun(civName: string, x: number, y: number, radius: number)

---@class UncivStore
---@field get fun(key: string, default: string?): string
---@field set fun(key: string, value: string)

---@class UncivCtx
---@field parameter string
---@field value number|nil
---@field modifier number|nil
---@field attackerStrength number|nil
---@field defenderStrength number|nil
---@field modifiers table|nil
---@field randomnessFactor number|nil
---@field healthRatio number|nil
---@field damageToAttacker boolean|nil
---@field tileStats table|nil
---@field city UncivCity
---@field unit UncivUnit
---@field tile UncivTile
---@field civ UncivCiv
---@field game UncivGame
---@field otherCiv UncivCiv|nil
---@field attacker UncivUnit|UncivCity|nil
---@field defender UncivUnit|UncivCity|nil
---@field target UncivUnit|UncivCity|nil
---@field combatAction string|nil
---@field log fun(msg: string)
---@field count fun(expr: string): string
---@field evaluateConditional fun(condition: string): boolean
---@field store UncivStore
---@field random fun(): number
---@field randomInt fun(min: number, max: number): number
