Hooks
static bool BeforeCvPlayer_SetProximityToPlayer(CvPlayer* self, PlayerTypes ePlayer, PlayerProximityTypes eProximity);static void AfterCvPlayer_SetProximityToPlayer(CvPlayer* self, PlayerTypes ePlayer, PlayerProximityTypes eProximity);static void ReplaceCvPlayer_SetProximityToPlayer(void (*original)(CvPlayer*, PlayerTypes, PlayerProximityTypes), CvPlayer* self, PlayerTypes ePlayer, PlayerProximityTypes eProximity);CivRegisterBefore<CivHooks::CvPlayer_SetProximityToPlayer>(host, &BeforeCvPlayer_SetProximityToPlayer);CivRegisterAfter<CivHooks::CvPlayer_SetProximityToPlayer>(host, &AfterCvPlayer_SetProximityToPlayer);CivRegisterReplace<CivHooks::CvPlayer_SetProximityToPlayer>(host, &ReplaceCvPlayer_SetProximityToPlayer);
Code
19103/// Sets how "close" we are to another player (useful for diplomacy, war planning, etc.)19104void CvPlayer::SetProximityToPlayer(PlayerTypes ePlayer, PlayerProximityTypes eProximity)19105{19106 CvAssertMsg(ePlayer >= 0, "eIndex is expected to be non-negative (invalid Index)");19107 CvAssertMsg(ePlayer < MAX_PLAYERS, "eIndex is expected to be within maximum bounds (invalid Index)");1910819109 CvAssertMsg(GetID() != ePlayer, "Trying to calculate proximity to oneself. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");1911019111 CvAssertMsg(eProximity >= NO_PLAYER_PROXIMITY, "eIndex is expected to be non-negative (invalid Index)"); // NO_PLAYER_PROXIMITY is valid because some players may have no Cities (e.g. on the first turn)19112 CvAssertMsg(eProximity < NUM_PLAYER_PROXIMITIES, "eIndex is expected to be within maximum bounds (invalid Index)");1911319114 if((GC.getLogging() && GC.getAILogging()))19115 {19116 if(eProximity != m_aiProximityToPlayer[ePlayer])19117 {19118 // Open the log file19119 CvString strFileName = "PlayerProximityLog.csv";19120 FILogFile* pLog;19121 pLog = LOGFILEMGR.GetLog(strFileName, FILogFile::kDontTimeStamp);19122 CvString strLog, strTemp;1912319124 CvString strPlayerName;19125 strPlayerName = getCivilizationShortDescription();19126 strLog += strPlayerName;19127 strLog += ",";1912819129 strTemp.Format("%d,", GC.getGame().getGameTurn()); // turn19130 strLog += strTemp;19131 CvString strOtherPlayerName;19132 strOtherPlayerName = GET_PLAYER(ePlayer).getCivilizationShortDescription();19133 strLog += strOtherPlayerName;19134 strLog += ",";1913519136 switch(m_aiProximityToPlayer[ePlayer])19137 {19138 case NO_PLAYER_PROXIMITY:19139 strLog += "No player proximity,";19140 break;19141 case PLAYER_PROXIMITY_NEIGHBORS:19142 strLog += "Neighbors,";19143 break;19144 case PLAYER_PROXIMITY_CLOSE:19145 strLog += "Close,";19146 break;19147 case PLAYER_PROXIMITY_FAR:19148 strLog += "Far,";19149 break;19150 case PLAYER_PROXIMITY_DISTANT:19151 strLog += "Distant,";19152 break;19153 }1915419155 strLog += "-->,";1915619157 switch(eProximity)19158 {19159 case NO_PLAYER_PROXIMITY:19160 strLog += "No player proximity,";19161 break;19162 case PLAYER_PROXIMITY_NEIGHBORS:19163 strLog += "Neighbors,";19164 break;19165 case PLAYER_PROXIMITY_CLOSE:19166 strLog += "Close,";19167 break;19168 case PLAYER_PROXIMITY_FAR:19169 strLog += "Far,";19170 break;19171 case PLAYER_PROXIMITY_DISTANT:19172 strLog += "Distant,";19173 break;19174 }1917519176 pLog->Msg(strLog);19177 }19178 }1917919180 m_aiProximityToPlayer.setAt(ePlayer, eProximity);19181}