Hooks
static bool BeforeCvPlayer_reset(CvPlayer* self, PlayerTypes eID, bool bConstructorCall);static void AfterCvPlayer_reset(CvPlayer* self, PlayerTypes eID, bool bConstructorCall);static void ReplaceCvPlayer_reset(void (*original)(CvPlayer*, PlayerTypes, bool), CvPlayer* self, PlayerTypes eID, bool bConstructorCall);CivRegisterBefore<CivHooks::CvPlayer_reset>(host, &BeforeCvPlayer_reset);CivRegisterAfter<CivHooks::CvPlayer_reset>(host, &AfterCvPlayer_reset);CivRegisterReplace<CivHooks::CvPlayer_reset>(host, &ReplaceCvPlayer_reset);
Code
1110// FUNCTION: reset()1111// Initializes data members that are serialized.1112void CvPlayer::reset(PlayerTypes eID, bool bConstructorCall)1113{1114 m_syncArchive.reset();1115 //--------------------------------1116 // Uninit class1117 uninit();11181119 m_eID = eID;1120 if(m_eID != NO_PLAYER)1121 {1122 m_ePersonalityType = CvPreGame::leaderHead(m_eID); //??? Is this repeated data???1123 }1124 else1125 {1126 m_ePersonalityType = NO_LEADER;1127 }11281129 // tutorial info1130 m_bEverPoppedGoody = false;11311132 m_aiCityYieldChange.clear();1133 m_aiCityYieldChange.resize(NUM_YIELD_TYPES, 0);11341135 m_aiCoastalCityYieldChange.clear();1136 m_aiCoastalCityYieldChange.resize(NUM_YIELD_TYPES, 0);11371138 m_aiCapitalYieldChange.clear();1139 m_aiCapitalYieldChange.resize(NUM_YIELD_TYPES, 0);11401141 m_aiCapitalYieldPerPopChange.clear();1142 m_aiCapitalYieldPerPopChange.resize(NUM_YIELD_TYPES, 0);11431144 m_aiSeaPlotYield.clear();1145 m_aiSeaPlotYield.resize(NUM_YIELD_TYPES, 0);11461147 m_aiYieldRateModifier.clear();1148 m_aiYieldRateModifier.resize(NUM_YIELD_TYPES, 0);11491150 m_aiCapitalYieldRateModifier.clear();1151 m_aiCapitalYieldRateModifier.resize(NUM_YIELD_TYPES, 0);11521153 m_aiGreatWorkYieldChange.clear();1154 m_aiGreatWorkYieldChange.resize(NUM_YIELD_TYPES, 0);11551156 m_aiExtraYieldThreshold.clear();1157 m_aiExtraYieldThreshold.resize(NUM_YIELD_TYPES, 0);11581159 m_aiSpecialistExtraYield.clear();1160 m_aiSpecialistExtraYield.resize(NUM_YIELD_TYPES, 0);11611162 m_aiProximityToPlayer.clear();1163 m_aiProximityToPlayer.resize(MAX_PLAYERS, 0);11641165 m_aiResearchAgreementCounter.clear();1166 m_aiResearchAgreementCounter.resize(MAX_PLAYERS, 0);11671168 m_aiIncomingUnitTypes.clear();1169 m_aiIncomingUnitTypes.resize(MAX_PLAYERS, NO_UNIT);11701171 m_aiIncomingUnitCountdowns.clear();1172 m_aiIncomingUnitCountdowns.resize(MAX_PLAYERS, -1);11731174 m_aiMinorFriendshipAnchors.clear();1175 m_aiMinorFriendshipAnchors.resize(MAX_PLAYERS, 0);11761177 m_aiSiphonLuxuryCount.clear();1178 m_aiSiphonLuxuryCount.resize(MAX_PLAYERS, 0);11791180 m_aOptions.clear();11811182 m_strReligionKey = "";1183 m_strScriptData = "";1184 m_strEmbarkedGraphicOverride = "";11851186 if(!bConstructorCall)1187 {1188 CvAssertMsg(0 < GC.getNumResourceInfos(), "GC.getNumResourceInfos() is not greater than zero but it is used to allocate memory in CvPlayer::reset");1189 m_paiNumResourceUsed.clear();1190 m_paiNumResourceUsed.resize(GC.getNumResourceInfos(), 0);11911192 m_paiNumResourceTotal.clear();1193 m_paiNumResourceTotal.resize(GC.getNumResourceInfos(), 0);11941195 m_paiResourceGiftedToMinors.clear();1196 m_paiResourceGiftedToMinors.resize(GC.getNumResourceInfos(), 0);11971198 m_paiResourceExport.clear();1199 m_paiResourceExport.resize(GC.getNumResourceInfos(), 0);12001201 m_paiResourceImport.clear();1202 m_paiResourceImport.resize(GC.getNumResourceInfos(), 0);12031204 m_paiResourceFromMinors.clear();1205 m_paiResourceFromMinors.resize(GC.getNumResourceInfos(), 0);12061207 m_paiResourcesSiphoned.clear();1208 m_paiResourcesSiphoned.resize(GC.getNumResourceInfos(), 0);12091210 CvAssertMsg(0 < GC.getNumImprovementInfos(), "GC.getNumImprovementInfos() is not greater than zero but it is used to allocate memory in CvPlayer::reset");1211 m_paiImprovementCount.clear();1212 m_paiImprovementCount.resize(GC.getNumImprovementInfos(), 0);12131214 m_paiUnitCombatProductionModifiers.clear();1215 m_paiUnitCombatProductionModifiers.resize(GC.getNumUnitCombatClassInfos(), 0);12161217 m_paiUnitCombatFreeExperiences.clear();1218 m_paiUnitCombatFreeExperiences.resize(GC.getNumUnitCombatClassInfos(), 0);12191220 m_paiFreeBuildingCount.clear();1221 m_paiFreeBuildingCount.resize(GC.getNumBuildingInfos(), 0);12221223 m_paiFreePromotionCount.clear();1224 m_paiFreePromotionCount.resize(GC.getNumPromotionInfos(), 0);12251226 m_paiUnitClassCount.clear();1227 m_paiUnitClassCount.resize(GC.getNumUnitClassInfos(), 0);12281229 m_paiUnitClassMaking.clear();1230 m_paiUnitClassMaking.resize(GC.getNumUnitClassInfos(), 0);12311232 m_paiBuildingClassCount.clear();1233 m_paiBuildingClassCount.resize(GC.getNumBuildingClassInfos(), 0);12341235 m_paiBuildingClassMaking.clear();1236 m_paiBuildingClassMaking.resize(GC.getNumBuildingClassInfos(), 0);12371238 m_paiProjectMaking.clear();1239 m_paiProjectMaking.resize(GC.getNumProjectInfos(), 0);12401241 m_paiHurryCount.clear();1242 m_paiHurryCount.resize(GC.getNumHurryInfos(), 0);12431244 m_paiHurryModifier.clear();1245 m_paiHurryModifier.resize(GC.getNumHurryInfos(), 0);12461247 m_pabLoyalMember.clear();1248 m_pabLoyalMember.resize(GC.getNumVoteSourceInfos(), true);12491250 m_pabGetsScienceFromPlayer.clear();1251 m_pabGetsScienceFromPlayer.resize(MAX_CIV_PLAYERS, false);12521253 m_pEconomicAI->Init(GC.GetGameEconomicAIStrategies(), this);1254 m_pMilitaryAI->Init(GC.GetGameMilitaryAIStrategies(), this, GetDiplomacyAI());1255 m_pCitySpecializationAI->Init(GC.GetGameCitySpecializations(), this);1256 m_pWonderProductionAI->Init(GC.GetGameBuildings(), this, false);1257 m_pGrandStrategyAI->Init(GC.GetGameAIGrandStrategies(), this);1258 m_pDiplomacyAI->Init(this);1259 m_pReligions->Init(this);1260 m_pReligionAI->Init(GC.GetGameBeliefs(), this);1261 m_pPlayerTechs->Init(GC.GetGameTechs(), this, false);1262 m_pPlayerPolicies->Init(GC.GetGamePolicies(), this, false);1263 m_pTacticalAI->Init(this);1264 m_pHomelandAI->Init(this);1265 m_pMinorCivAI->Init(this);1266 m_pDealAI->Init(this);1267 m_pBuilderTaskingAI->Init(this);1268 m_pCityConnections->Init(this);1269 if(m_pNotifications)1270 {1271 m_pNotifications->Init(eID);1272 }1273#if defined(MOD_API_PLAYER_LOGS)1274 if(m_pDiplomacyLog)1275 {1276 m_pDiplomacyLog->Init(eID);1277 }1278 if(m_pMilitaryLog)1279 {1280 m_pMilitaryLog->Init(eID);1281 }1282#endif1283 if(m_pDiplomacyRequests)1284 {1285 m_pDiplomacyRequests->Init(eID);1286 }1287 m_pDangerPlots->Init(eID, false /*bAllocate*/);1288 m_pTreasury->Init(this);1289 m_pTraits->Init(GC.GetGameTraits(), this);1290 m_pEspionage->Init(this);1291 m_pEspionageAI->Init(this);1292 m_pTrade->Init(this);1293 m_pTradeAI->Init(this);1294 m_pLeagueAI->Init(this);1295 m_pCulture->Init(this);12961297 // Set up flavor manager1298 m_pFlavorManager->Init(this);12991300 // And if this is a real player, hook up the player-level flavor recipients1301 PlayerTypes p = GetID();1302 if(p != NO_PLAYER)1303 {1304 SlotStatus s = CvPreGame::slotStatus(p);1305 if((s == SS_TAKEN || s == SS_COMPUTER) && !isBarbarian())1306 {1307 m_pFlavorManager->AddFlavorRecipient(m_pPlayerTechs);1308 m_pFlavorManager->AddFlavorRecipient(m_pPlayerPolicies);1309 m_pFlavorManager->AddFlavorRecipient(m_pWonderProductionAI);1310 }1311 }13121313 Firaxis::Array< int, NUM_YIELD_TYPES > yield;1314 for(unsigned int j = 0; j < NUM_YIELD_TYPES; ++j)1315 {1316 yield[j] = 0;1317 }13181319 m_ppaaiSpecialistExtraYield.clear();1320 m_ppaaiSpecialistExtraYield.resize(GC.getNumSpecialistInfos());1321 for(unsigned int i = 0; i < m_ppaaiSpecialistExtraYield.size(); ++i)1322 {1323 m_ppaaiSpecialistExtraYield.setAt(i, yield);1324 }13251326#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)1327 m_ppiPlotYieldChange.clear();1328 m_ppiPlotYieldChange.resize(GC.getNumPlotInfos());1329 for(unsigned int i = 0; i < m_ppiPlotYieldChange.size(); ++i)1330 {1331 m_ppiPlotYieldChange[i] = yield;1332 }1333#endif13341335#if defined(MOD_API_UNIFIED_YIELDS)1336 m_ppiFeatureYieldChange.clear();1337 m_ppiFeatureYieldChange.resize(GC.getNumFeatureInfos());1338 for(unsigned int i = 0; i < m_ppiFeatureYieldChange.size(); ++i)1339 {1340 m_ppiFeatureYieldChange[i] = yield;1341 }1342 1343 m_ppiResourceYieldChange.clear();1344 m_ppiResourceYieldChange.resize(GC.getNumResourceInfos());1345 for(unsigned int i = 0; i < m_ppiResourceYieldChange.size(); ++i)1346 {1347 m_ppiResourceYieldChange[i] = yield;1348 }1349 1350 m_ppiTerrainYieldChange.clear();1351 m_ppiTerrainYieldChange.resize(GC.getNumTerrainInfos());1352 for(unsigned int i = 0; i < m_ppiTerrainYieldChange.size(); ++i)1353 {1354 m_ppiTerrainYieldChange[i] = yield;1355 }1356 1357 m_ppiTradeRouteYieldChange.clear();1358 m_ppiTradeRouteYieldChange.resize(NUM_DOMAIN_TYPES);1359 for(unsigned int i = 0; i < m_ppiTradeRouteYieldChange.size(); ++i)1360 {1361 m_ppiTradeRouteYieldChange[i] = yield;1362 }1363 1364 m_ppiSpecialistYieldChange.clear();1365 m_ppiSpecialistYieldChange.resize(GC.getNumSpecialistInfos());1366 for(unsigned int i = 0; i < m_ppiSpecialistYieldChange.size(); ++i)1367 {1368 m_ppiSpecialistYieldChange[i] = yield;1369 }1370 1371 m_ppiGreatPersonExpendedYield.clear();1372 m_ppiGreatPersonExpendedYield.resize(GC.getNumGreatPersonInfos());1373 for(unsigned int i = 0; i < m_ppiGreatPersonExpendedYield.size(); ++i)1374 {1375 m_ppiGreatPersonExpendedYield[i] = yield;1376 }1377 1378 m_piGoldenAgeGreatPersonRateModifier.clear();1379 m_piGoldenAgeGreatPersonRateModifier.resize(GC.getNumGreatPersonInfos(), 0);13801381 m_ppiUnimprovedFeatureYieldChange.clear();1382 m_ppiUnimprovedFeatureYieldChange.resize(GC.getNumFeatureInfos());1383 for(unsigned int i = 0; i < m_ppiUnimprovedFeatureYieldChange.size(); ++i)1384 {1385 m_ppiUnimprovedFeatureYieldChange[i] = yield;1386 }1387 1388 m_ppiCityYieldFromUnimprovedFeature.clear();1389 m_ppiCityYieldFromUnimprovedFeature.resize(GC.getNumFeatureInfos());1390 for(unsigned int i = 0; i < m_ppiCityYieldFromUnimprovedFeature.size(); ++i)1391 {1392 m_ppiCityYieldFromUnimprovedFeature[i] = yield;1393 }1394 1395 m_piYieldFromKills.clear();1396 m_piYieldFromKills.resize(NUM_YIELD_TYPES, 0);13971398 m_piYieldFromBarbarianKills.clear();1399 m_piYieldFromBarbarianKills.resize(NUM_YIELD_TYPES, 0);14001401 m_piYieldChangeTradeRoute.clear();1402 m_piYieldChangeTradeRoute.resize(NUM_YIELD_TYPES, 0);14031404 m_piYieldChangesNaturalWonder.clear();1405 m_piYieldChangesNaturalWonder.resize(NUM_YIELD_TYPES, 0);14061407 m_piYieldChangeWorldWonder.clear();1408 m_piYieldChangeWorldWonder.resize(NUM_YIELD_TYPES, 0);14091410 m_ppiBuildingClassYieldChange.clear();1411 m_ppiBuildingClassYieldChange.resize(GC.getNumBuildingClassInfos());1412 for(unsigned int i = 0; i < m_ppiBuildingClassYieldChange.size(); ++i)1413 {1414 m_ppiBuildingClassYieldChange.setAt(i, yield);1415 }1416#endif14171418 m_ppaaiImprovementYieldChange.clear();1419 m_ppaaiImprovementYieldChange.resize(GC.getNumImprovementInfos());1420 for(unsigned int i = 0; i < m_ppaaiImprovementYieldChange.size(); ++i)1421 {1422 m_ppaaiImprovementYieldChange.setAt(i, yield);1423 }14241425 m_ppaaiBuildingClassYieldMod.clear();1426 m_ppaaiBuildingClassYieldMod.resize(GC.getNumBuildingClassInfos());1427 for(unsigned int i = 0; i < m_ppaaiBuildingClassYieldMod.size(); ++i)1428 {1429 m_ppaaiBuildingClassYieldMod.setAt(i, yield);1430 }14311432 m_aVote.clear();1433 m_aUnitExtraCosts.clear();1434 }14351436 m_cities.RemoveAll();14371438 m_units.RemoveAll();14391440 m_armyAIs.RemoveAll();14411442 // loop through all entries freeing them up1443 std::map<int , CvAIOperation*>::iterator iter;1444 for(iter = m_AIOperations.begin(); iter != m_AIOperations.end(); ++iter)1445 {1446 delete(iter->second);1447 }1448 m_AIOperations.clear();14491450 if(!bConstructorCall)1451 {1452 AI_reset();1453 }1454}