GameEvents.PlayerDoTurn (Civ5 API)
This page is a part of the Lua and UI Reference (Civ5).
This function is a member of GameEvents. This is a static method, invoke it with a dot. |
Fired once per turn for each player (not just active/human player). Modder experimentation has found that it is fired at the start of turn; also, it seems not to run for the first turn of the game (for all players), runs only for human player on the second turn, and thereafter it runs for all players. There is no indication as to why this is.
Usage
void GameEvents.PlayerDoTurn(PlayerID player)
Event Type
- Unknown
Parameters
player: The ID of the player whose turn is in question
Source code samples
Too many occurences. Only 50 out of 5 are listed.
TurnsRemaining.lua - DLC_02 DLC
DLC/DLC_02/Scenarios/NewWorldScenario/TurnsRemaining.lua
0302
|
GameEvents.PlayerDoTurn.Add(function(iPlayer) |
0304
|
-- Only on first player's turn |
0305
|
if (iPlayer > 0) then |
0306
|
return false; |
0307
|
end |
0309
|
--(KLUDGE - using an unused modern era CvGame data field as a counter) |
0310
|
local iGenerateTreasureTurn = Game:GetNoNukesCount(); |
0311
|
local iGameTurn = Game.GetGameTurn(); |
0312
|
local iFeatureID; |
0314
|
-- Time to generate a treasure? |
0315
|
if (iGameTurn > iGenerateTreasureTurn) then |
0317
|
iFeatureID = GameInfoTypes["FEATURE_EL_DORADO"]; |
0318
|
SpawnTreasure(iFeatureID); |
0320
|
iFeatureID = GameInfoTypes["FEATURE_POTOSI"]; |
0321
|
SpawnTreasure(iFeatureID); |
0323
|
-- Reset turn of next treasure generation |
0324
|
local iRandom = Game.Rand(20, "Delay between natural wonder treasures"); |
0325
|
Game:ChangeNoNukesCount(5 + iRandom); |
0326
|
end |
0328
|
-- AI units on high difficulty |
0329
|
local unit; |
0330
|
local iHandicap = Game:GetHandicapType(); |
0332
|
if (iGameTurn == 10) then |
0333
|
for iLoopPlayer = 1, 5, 1 do |
0334
|
local pLoopPlayer = Players[iLoopPlayer]; |
0335
|
if (pLoopPlayer:IsAlive() and pLoopPlayer:GetStartingPlot():GetX() > 50) then |
0336
|
if (iHandicap > 5) then |
0337
|
iUnitID = GameInfoTypes["UNIT_SETTLER"]; |
0338
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0339
|
unit:JumpToNearestValidPlot(); |
0340
|
iUnitID = GameInfoTypes["UNIT_PIKEMAN"]; |
0341
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0342
|
unit:JumpToNearestValidPlot(); |
0343
|
end |
0344
|
if (iHandicap > 6) then |
0345
|
iUnitID = GameInfoTypes["UNIT_CARAVEL"]; |
0346
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY(), GameInfoTypes.UNITAI_EXPLORE_SEA, DirectionTypes.DIRECTION_WEST); |
0347
|
unit:JumpToNearestValidPlot(); |
0348
|
end |
0349
|
end |
0350
|
end |
0351
|
end |
0353
|
if (iGameTurn == 15) then |
0354
|
for iLoopPlayer = 1, 5, 1 do |
0355
|
local pLoopPlayer = Players[iLoopPlayer]; |
0356
|
if (pLoopPlayer:IsAlive()and pLoopPlayer:GetStartingPlot():GetX() > 50) then |
0357
|
if (iHandicap > 6) then |
0358
|
iUnitID = GameInfoTypes["UNIT_SETTLER"]; |
0359
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0360
|
unit:JumpToNearestValidPlot(); |
0361
|
iUnitID = GameInfoTypes["UNIT_PIKEMAN"]; |
0362
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0363
|
unit:JumpToNearestValidPlot(); |
0364
|
end |
0365
|
end |
0366
|
end |
0367
|
end |
0369
|
if (iGameTurn == 20) then |
0370
|
for iLoopPlayer = 1, 5, 1 do |
0371
|
local pLoopPlayer = Players[iLoopPlayer]; |
0372
|
if (pLoopPlayer:IsAlive() and pLoopPlayer:GetStartingPlot():GetX() > 50) then |
0373
|
if (iHandicap > 3) then |
0374
|
iUnitID = GameInfoTypes["UNIT_SETTLER"]; |
0375
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0376
|
unit:JumpToNearestValidPlot(); |
0377
|
iUnitID = GameInfoTypes["UNIT_PIKEMAN"]; |
0378
|
unit = pLoopPlayer:InitUnit (iUnitID, pLoopPlayer:GetStartingPlot():GetX(), pLoopPlayer:GetStartingPlot():GetY()); |
0379
|
unit:JumpToNearestValidPlot(); |
0380
|
end |
0381
|
end |
0382
|
end |
0383
|
end |
0385
|
return false; |
0386
|
end); |
TurnsRemaining.lua - DLC_04 DLC
DLC/DLC_04/Scenarios/1066Scenario/TurnsRemaining.lua
0222
|
GameEvents.PlayerDoTurn.Add(function(iPlayer) |
0224
|
-- Only on first player's turn |
0225
|
if (iPlayer > 0) then |
0226
|
return false; |
0227
|
end |
0230
|
local savedData = Modding.OpenSaveData(); |
0231
|
local iValue = savedData.GetValue("TurnsBetweenBonuses"); |
0233
|
if (iValue ~= nil) then |
0235
|
local iTemp = math.floor(Game.GetGameTurn() / iValue); |
0236
|
if (Game.GetGameTurn() > 0 and Game.GetGameTurn()< 51 and iTemp * iValue == Game.GetGameTurn()) then |
0238
|
for iPlayer = 0, 3, 1 do |
0240
|
local pPlayer = Players[iPlayer]; |
0241
|
local playerStartPlot = pPlayer:GetStartingPlot(); |
0243
|
-- Anglo-Saxon England? |
0244
|
if (playerStartPlot:GetX() == 43 and playerStartPlot:GetY() == 17) then |
0245
|
CollectTaxes(iPlayer); |
0246
|
else |
0247
|
NewRecruits(iPlayer); |
0248
|
end |
0249
|
end |
0250
|
end |
0251
|
end |
0252
|
end); |
TurnsRemaining.lua (G&K)
DLC/Expansion/Scenarios/SteampunkScenario/TurnsRemaining.lua
0498
|
GameEvents.PlayerDoTurn.Add(function(iPlayer) |
0499
|
local iTurn = Game.GetGameTurn(); |
0501
|
-- Update on Barbarian player's turn (after all major civs take their turn) so that we are fair to all players |
0502
|
if (iPlayer == 63) then |
0503
|
UpdateMostAdvancedUnits(); |
0504
|
UpdatePlayerStatus(); |
0505
|
end |
0507
|
return false; |
0508
|
end); |
TurnsRemaining.lua (G&K)
DLC/Expansion/Scenarios/MedievalScenario/TurnsRemaining.lua
0144
|
GameEvents.PlayerDoTurn.Add(function(iPlayer) |
0145
|
local iReformationTurn = GetPersistentProperty("ReformationStart"); |
0146
|
local iTurn = Game.GetGameTurn(); |
0148
|
-- Only on first player's turn |
0149
|
if (iPlayer > 0 or iTurn < 1) then |
0150
|
return false; |
0151
|
end |
0153
|
if (iReformationTurn > -1) then |
0154
|
if (iReformationTurn == iTurn) then |
0155
|
StartReformation(); |
0156
|
elseif (GetPersistentProperty("SecondReformer") == iTurn) then |
0157
|
ReformationPhaseTwo(); |
0158
|
elseif (GetPersistentProperty("ThirdReformer") == iTurn) then |
0159
|
ReformationPhaseThree(); |
0160
|
end |
0161
|
else |
0162
|
if (Game.GetGameTurnYear() > 1514) then |
0163
|
SetPersistentProperty("ReformationStart", iTurn + 1); |
0164
|
SetPersistentProperty("SecondReformer", iTurn + 4); |
0165
|
SetPersistentProperty("ThirdReformer", iTurn + 7); |
0166
|
end |
0167
|
end |
0169
|
ScoreHolyCities(); |
0171
|
if (iTurn == 40) then |
0172
|
BringInMongols(); |
0173
|
elseif (iTurn == 50 or iTurn == 60 or iTurn == 70 or iTurn == 85 or iTurn == 110) then |
0174
|
ReinforceMongols(); |
0175
|
elseif (iTurn == 150) then |
0176
|
MongolsPullOut(); |
0177
|
end |
0179
|
return false; |
0180
|
end); |
TurnsRemaining.lua (G&K)
DLC/Expansion/Scenarios/FallOfRomeScenario/TurnsRemaining.lua
0233
|
GameEvents.PlayerDoTurn.Add(function(iPlayer) |
0235
|
--if (iPlayer ~= nil) then |
0236
|
-- print("GameEvents.PlayerDoTurn.Add, iPlayer: " .. iPlayer); |
0237
|
--else |
0238
|
-- print("GameEvents.PlayerDoTurn.Add, iPlayer: nil"); |
0239
|
--end |
0241
|
local savedData = Modding.OpenSaveData(); |
0242
|
local iCitiesCaptured = 0; |
0243
|
if (IsWesternRoman(iPlayer)) then |
0244
|
iCitiesCaptured = savedData.GetValue("WesternRomeCitiesCaptured"); |
0245
|
savedData.SetValue("WesternRomeCitiesCaptured", 0); |
0246
|
elseif (IsEasternRoman(iPlayer)) then |
0247
|
iCitiesCaptured = savedData.GetValue("EasternRomeCitiesCaptured") |
0248
|
savedData.SetValue("EasternRomeCitiesCaptured", 0); |
0249
|
end |
0251
|
print("GameEvents.PlayerDoTurn.Add, iCitiesCaptured: " .. iCitiesCaptured); |
0252
|
if (iCitiesCaptured > 0) then |
0253
|
print("GameEvents.PlayerDoTurn.Add, rewarding culture"); |
0254
|
Players[iPlayer]:ChangeJONSCulture(20 * iCitiesCaptured); |
0255
|
end |
0257
|
if (Players[iPlayer]:HasPolicy(GameInfo.Policies["POLICY_BARBARIAN_FINISHER"].ID)) then |
0258
|
if (Players[iPlayer]:GetJONSCulture() > 0) then |
0259
|
local iDiv = Players[iPlayer]:GetJONSCulture() / 3; |
0260
|
local iMod = Players[iPlayer]:GetJONSCulture() % 3; |
0261
|
Players[iPlayer]:ChangeGold(iDiv); |
0262
|
Players[iPlayer]:SetJONSCulture(iMod); |
0263
|
end |
0264
|
end |
0266
|
if (Players[iPlayer]:HasPolicy(GameInfo.Policies["POLICY_SASSANID_FINISHER"].ID)) then |
0267
|
if (Players[iPlayer]:GetJONSCulture() > 0) then |
0268
|
local iDiv = Players[iPlayer]:GetJONSCulture() / 3; |
0269
|
local iMod = Players[iPlayer]:GetJONSCulture() % 3; |
0270
|
Players[iPlayer]:ChangeGold(iDiv); |
0271
|
Players[iPlayer]:SetJONSCulture(iMod); |
0272
|
end |
0273
|
end |
0275
|
-- Only on first player's turn |
0276
|
if (iPlayer > 0) then |
0277
|
return false; |
0278
|
end |
0280
|
--print("PlayerDoTurn"); |
0281
|
--print(iPlayer); |
0282
|
--local playerStartPlot = Players[iPlayer]:GetStartingPlot(); |
0283
|
--print(playerStartPlot:GetX()); |
0284
|
--print(playerStartPlot:GetY()); |
0286
|
for iPlayerLoop = 0, GameDefines.MAX_MAJOR_CIVS-1, 1 do |
0287
|
local pPlayer = Players[iPlayerLoop]; |
0288
|
if (pPlayer:IsAlive() and IsEmpire(iPlayerLoop)) then |
0289
|
local iScore = 0; |
0290
|
for pCity in pPlayer:Cities() do |
0291
|
local iOriginalOwner = pCity:GetOriginalOwner(); |
0292
|
-- if city owner is an empire and the original owner was an empire |
0293
|
if (IsEmpire(iOriginalOwner)) then |
0294
|
-- then give points according to how large the city is |
0295
|
iScore = iScore + pCity:GetPopulation(); |
0296
|
end |
0297
|
end |
0299
|
if (IsRoman(iPlayerLoop)) then |
0300
|
iScore = iScore / 2; |
0301
|
elseif (IsSassanid(iPlayerLoop)) then |
0302
|
iScore = (4 * iScore) / 3; |
0303
|
end |
0305
|
pPlayer:ChangeScoreFromTechs(iScore); |
0306
|
end |
0307
|
end |
0310
|
if (iCitiesCaptured > 0) then |
0311
|
--print("Doing city popup"); |
0312
|
local popupInfo = { |
0313
|
Data1 = 500, |
0314
|
Type = ButtonPopupTypes.BUTTONPOPUP_TEXT, |
0315
|
} |
0316
|
popupInfo.Text = Locale.ConvertTextKey("TXT_KEY_FOR_SCENARIO_ROMAN_CITY_CAPTURE_CULTURE", iCitiesCaptured, iCitiesCaptured * 20); |
0317
|
UI.AddPopup(popupInfo); |
0318
|
end |
0321
|
--if (not IsEmpire(iPlayer)) then |
0322
|
--return false; |
0323
|
--end |
0325
|
--local pPlayer = Players[iPlayer]; |
0326
|
--for pCity in pPlayer:Cities() do |
0327
|
--local iOriginalOwner = pCity:GetOriginalOwner(); |
0328
|
---- if city owner is an empire and the original owner was an empire |
0329
|
--if (IsEmpire(iOriginalOwner)) then |
0330
|
---- then give points according to how large the city is |
0331
|
--pPlayer:ChangeScoreFromTechs(pCity:GetPopulation()); |
0332
|
--end |
0333
|
--end |
0335
|
return false; |
0336
|
end); |
The initial version of this page was created by the Civ5 API Bot, see the Civ5 API Reference FAQ. Some of the texts come from the 2kgames' wiki and most of code samples are copyrighted to Firaxis.
Functions' signatures were either copied from the 2kgames' wiki, or infered from the Lua source files and the binaries. Errors are possible.
Contributors may find help in the Contributors guide to the Civ5 API.