Bazaar developer reference

CvEconomicAI::LogMonitor()

Defined in
CvEconomicAI.cpp, line 1296
Class
CvEconomicAI
Hook name
CivHooks::CvEconomicAI_LogMonitor

Hooks

static bool BeforeCvEconomicAI_LogMonitor(CvEconomicAI* self);static void AfterCvEconomicAI_LogMonitor(CvEconomicAI* self);static void ReplaceCvEconomicAI_LogMonitor(void (*original)(CvEconomicAI*), CvEconomicAI* self);CivRegisterBefore<CivHooks::CvEconomicAI_LogMonitor>(host, &BeforeCvEconomicAI_LogMonitor);CivRegisterAfter<CivHooks::CvEconomicAI_LogMonitor>(host, &AfterCvEconomicAI_LogMonitor);CivRegisterReplace<CivHooks::CvEconomicAI_LogMonitor>(host, &ReplaceCvEconomicAI_LogMonitor);

Code

1295/// Make a master log so that we can evaluate and compare changes to the economic AI1296void CvEconomicAI::LogMonitor(void)1297{1298	if(!(GC.getLogging() && GC.getAILogging()))1299	{1300		return;1301	}13021303	// don't log minor civs for now1304	if(m_pPlayer->isMinorCiv())1305	{1306		return;1307	}13081309	static bool bFirstRun = true;1310	bool bBuildHeader = false;1311	CvString strHeader;1312	if(bFirstRun)1313	{1314		bFirstRun = false;1315		bBuildHeader = true;1316	}13171318	CvString strLog;13191320	// Find the name of this civ and city1321	CvString strPlayerName;1322	strPlayerName = m_pPlayer->getCivilizationShortDescription();1323	CvString strLogName;13241325	// Open the log file1326	if(GC.getPlayerAndCityAILogSplit())1327	{1328		strLogName = "EconomicMonitorLog_" + strPlayerName + ".csv";1329	}1330	else1331	{1332		strLogName = "EconomicMonitorLog.csv";1333	}13341335	FILogFile* pLog;1336	pLog = LOGFILEMGR.GetLog(strLogName, FILogFile::kDontTimeStamp);13371338	CvString str;13391340	// civ name1341	AppendToLog(strHeader, strLog, "Civ Name", strPlayerName);13421343	// turn1344	AppendToLog(strHeader, strLog, "Turn", GC.getGame().getGameTurn());13451346	// # cities1347	AppendToLog(strHeader, strLog, "# Cities", GetPlayer()->getNumCities());13481349	// total pop1350	int iPop = 0;1351	int iLoopCity = 0;1352	CvCity* pLoopCity = NULL;1353	for(pLoopCity = m_pPlayer->firstCity(&iLoopCity); pLoopCity != NULL; pLoopCity = GetPlayer()->nextCity(&iLoopCity))1354	{1355		iPop += pLoopCity->getPopulation();1356	}1357	AppendToLog(strHeader, strLog, "Pop", iPop);13581359	// total yields this turn1360	for(uint ui = 0; ui < NUM_YIELD_TYPES; ui++)1361	{1362		switch(ui)1363		{1364		case YIELD_FOOD:1365			AppendToLog(strHeader, strLog, "Food", m_pPlayer->calculateTotalYield((YieldTypes)ui));1366			break;1367		case YIELD_PRODUCTION:1368			AppendToLog(strHeader, strLog, "Production", m_pPlayer->calculateTotalYield((YieldTypes)ui));1369			break;1370		case YIELD_GOLD:1371			AppendToLog(strHeader, strLog, "City Gold", m_pPlayer->calculateTotalYield((YieldTypes)ui));1372			break;1373		case YIELD_SCIENCE:1374			AppendToLog(strHeader, strLog, "Science", m_pPlayer->calculateTotalYield((YieldTypes)ui));1375			break;1376		case YIELD_CULTURE:1377			AppendToLog(strHeader, strLog, "Culture", m_pPlayer->GetTotalJONSCulturePerTurn());1378			break;1379		case YIELD_FAITH:1380			AppendToLog(strHeader, strLog, "Faith", m_pPlayer->GetTotalFaithPerTurn());1381			break;1382#if defined(MOD_API_UNIFIED_YIELDS_TOURISM)1383		case YIELD_TOURISM:1384			AppendToLog(strHeader, strLog, "Tourism", m_pPlayer->calculateTotalYield((YieldTypes)ui));1385			break;1386#endif1387#if defined(MOD_API_UNIFIED_YIELDS_GOLDEN_AGE)1388		case YIELD_GOLDEN_AGE_POINTS:1389			AppendToLog(strHeader, strLog, "Golden Age", m_pPlayer->calculateTotalYield((YieldTypes)ui));1390			break;1391#endif1392		}1393	}13941395	// Num Techs1396	AppendToLog(strHeader, strLog, "Num Techs", GET_TEAM(GetPlayer()->getTeam()).GetTeamTechs()->GetNumTechsKnown());13971398	// Culture1399#if defined(MOD_BUGFIX_DUMMY_POLICIES)1400	AppendToLog(strHeader, strLog, "Policies", GetPlayer()->GetPlayerPolicies()->GetNumPoliciesOwned(false));1401#else1402	AppendToLog(strHeader, strLog, "Policies", GetPlayer()->GetPlayerPolicies()->GetNumPoliciesOwned());1403#endif1404	AppendToLog(strHeader, strLog, "Culture (lifetime)", GetPlayer()->GetJONSCultureEverGenerated());14051406	// Faith1407	AppendToLog(strHeader, strLog, "Faith", GetPlayer()->GetFaith());14081409	// workers1410	int iWorkerCount = 0;1411	CvUnit* pLoopUnit;1412	int iLoopUnit;1413	for(pLoopUnit = m_pPlayer->firstUnit(&iLoopUnit); pLoopUnit != NULL; pLoopUnit = m_pPlayer->nextUnit(&iLoopUnit))1414	{1415		if(pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER)1416		{1417			iWorkerCount++;1418		}1419	}1420	AppendToLog(strHeader, strLog, "# Workers", iWorkerCount);1421	AppendToLog(strHeader, strLog, "Positive Happiness",  m_pPlayer->GetHappiness());1422	AppendToLog(strHeader, strLog, "Negative Happiness", m_pPlayer->GetUnhappiness());1423	AppendToLog(strHeader, strLog, "Net Happiness", m_pPlayer->GetExcessHappiness());14241425	// # of each improvement constructed1426	FFastVector<int, true> m_aiNumImprovements;1427	m_aiNumImprovements.push_back_copy(-1, GC.getNumImprovementInfos());14281429	// go through all the plots the player has under their control1430	CvPlotsVector& aiPlots = m_pPlayer->GetPlots();14311432	// worked tiles1433	int iTiles = 0;1434	int iWorkedTiles = 0;1435	int iImprovedTiles = 0;1436	for(uint uiPlotIndex = 0; uiPlotIndex < aiPlots.size(); uiPlotIndex++)1437	{1438		// when we encounter the first plot that is invalid, the rest of the list will be invalid1439		if(aiPlots[uiPlotIndex] == -1)1440		{1441			break;1442		}14431444		CvPlot* pPlot = GC.getMap().plotByIndex(aiPlots[uiPlotIndex]);1445		if(!pPlot)1446		{1447			continue;1448		}14491450		iTiles++;14511452		// plot has city in it, don't count1453		if(pPlot->getPlotCity())1454		{1455			continue;1456		}14571458		if(pPlot->isBeingWorked())1459		{1460			iWorkedTiles++;1461		}14621463		if(pPlot->getImprovementType() != NO_IMPROVEMENT)1464		{1465			iImprovedTiles++;1466		}1467	}14681469	AppendToLog(strHeader, strLog, "Tiles", iTiles);1470	AppendToLog(strHeader, strLog, "Worked (non-city) tiles", iWorkedTiles);1471	AppendToLog(strHeader, strLog, "Improved tiles", iImprovedTiles);14721473	AppendToLog(strHeader, strLog, "Trade Routes established", m_pPlayer->GetTrade()->GetNumTradeRoutesUsed(false));1474	AppendToLog(strHeader, strLog, "Trade Routes available", (int)m_pPlayer->GetTrade()->GetNumTradeRoutesPossible());14751476	CvTreasury *pTreasury = m_pPlayer->GetTreasury();14771478	int iInternationalTradeGPT = pTreasury->GetGoldFromCitiesTimes100(false) - pTreasury->GetGoldFromCitiesTimes100(true);1479	AppendToLog(strHeader, strLog, "Gold From Cities", pTreasury->GetGoldFromCitiesTimes100(true) / 100);1480	AppendToLog(strHeader, strLog, "Gold From Trade Routes", (int)(iInternationalTradeGPT / 100));1481	AppendToLog(strHeader, strLog, "Treasury", pTreasury->GetGold());1482	AppendToLog(strHeader, strLog, "GPT - Connects", pTreasury->GetCityConnectionGold());1483	AppendToLog(strHeader, strLog, "GPT - Diplo", pTreasury->GetGoldPerTurnFromDiplomacy());1484	AppendToLog(strHeader, strLog, "GPT - Religion", pTreasury->GetGoldPerTurnFromReligion());1485	AppendToLog(strHeader, strLog, "GPT - Traits", pTreasury->GetGoldPerTurnFromTraits());14861487	int iGoldFromCitiesMinusTR = pTreasury->GetGoldFromCitiesTimes100(true) / 100;1488	int iGPTFromDiplomacy = pTreasury->GetGoldPerTurnFromDiplomacy();1489	int iGoldFromCityConnect = pTreasury->GetCityConnectionGoldTimes100() / 100;1490	int iGPTFromReligion = pTreasury->GetGoldPerTurnFromReligion();1491	int iGPTFromTraits = pTreasury->GetGoldPerTurnFromTraits();1492	int iTradeRouteGold = (int)(iInternationalTradeGPT / 100);1493	int iTotalIncome = iGoldFromCitiesMinusTR + iGPTFromDiplomacy + iGoldFromCityConnect + iGPTFromReligion + iGPTFromTraits + iTradeRouteGold;1494	AppendToLog(strHeader, strLog, "Total Income", iTotalIncome);14951496	// Gold breakdown1497	int iExpenses = pTreasury->GetExpensePerTurnUnitMaintenance() + pTreasury->GetBuildingGoldMaintenance() + pTreasury->GetImprovementGoldMaintenance();1498	AppendToLog(strHeader, strLog, "Unit Maint", pTreasury->GetExpensePerTurnUnitMaintenance());1499	AppendToLog(strHeader, strLog, "Build Maint", pTreasury->GetBuildingGoldMaintenance());1500	AppendToLog(strHeader, strLog, "Improve Maint", pTreasury->GetImprovementGoldMaintenance());1501	AppendToLog(strHeader, strLog, "Total Expenses", iExpenses);1502	AppendToLog(strHeader, strLog, "Net GPT", iTotalIncome - iExpenses);15031504	if(bBuildHeader)1505	{1506		pLog->Msg(strHeader);1507	}1508	pLog->Msg(strLog);1509}

Calls

Called by