Hooks
static bool BeforeCvTeam_SetHasEmbassyAtTeam(CvTeam* self, TeamTypes eIndex, bool bNewValue);static void AfterCvTeam_SetHasEmbassyAtTeam(CvTeam* self, TeamTypes eIndex, bool bNewValue);static void ReplaceCvTeam_SetHasEmbassyAtTeam(void (*original)(CvTeam*, TeamTypes, bool), CvTeam* self, TeamTypes eIndex, bool bNewValue);CivRegisterBefore<CivHooks::CvTeam_SetHasEmbassyAtTeam>(host, &BeforeCvTeam_SetHasEmbassyAtTeam);CivRegisterAfter<CivHooks::CvTeam_SetHasEmbassyAtTeam>(host, &AfterCvTeam_SetHasEmbassyAtTeam);CivRegisterReplace<CivHooks::CvTeam_SetHasEmbassyAtTeam>(host, &ReplaceCvTeam_SetHasEmbassyAtTeam);
Code
4096void CvTeam::SetHasEmbassyAtTeam(TeamTypes eIndex, bool bNewValue)4097{4098 CvAssertMsg(eIndex >= 0, "eIndex is expected to be non-negative (invalid Index)");4099 CvAssertMsg(eIndex < MAX_TEAMS, "eIndex is expected to be within maximum bounds (invalid Index)");41004101 if(HasEmbassyAtTeam(eIndex) != bNewValue)4102 {4103 m_abEmbassy[eIndex] = bNewValue;4104 bool bRevealPlots = false;41054106 // find capital of team4107 // reveal hexes around capital4108 for(int iPlayer = 0; iPlayer < MAX_MAJOR_CIVS; iPlayer++)4109 {4110 PlayerTypes ePlayer = (PlayerTypes)iPlayer;4111 if(GET_PLAYER(ePlayer).getTeam() == eIndex)4112 {4113 CvCity* pCity = GET_PLAYER(ePlayer).getCapitalCity();4114 if(pCity)4115 {4116 CvPlot* pPlot = pCity->plot();4117 CvAssertMsg(pPlot, "Capital city lacks plot? How'd that happen?");4118 if(pPlot)4119 {4120 const int iPopRange = 2;4121 for(int iDX = -(iPopRange); iDX <= iPopRange; iDX++)4122 {4123 for(int iDY = -(iPopRange); iDY <= iPopRange; iDY++)4124 {4125 CvPlot* pLoopPlot = plotXYWithRangeCheck(pPlot->getX(), pPlot->getY(), iDX, iDY, iPopRange);4126 if(pLoopPlot == NULL)4127 {4128 continue;4129 }41304131 pLoopPlot->setRevealed(GetID(), true);4132 }4133 }4134 bRevealPlots = true;4135 }4136 }4137 }4138 }41394140 if(bRevealPlots)4141 {4142 GC.getMap().updateDeferredFog();4143 }41444145 GC.getMap().verifyUnitValidPlot();41464147 if((GetID() == GC.getGame().getActiveTeam()) || (eIndex == GC.getGame().getActiveTeam()))4148 {4149 DLLUI->setDirty(Score_DIRTY_BIT, true);4150 }41514152 // logging4153 for (uint uiMyPlayer = 0; uiMyPlayer < MAX_MAJOR_CIVS; uiMyPlayer++)4154 {4155 PlayerTypes eMyPlayer = (PlayerTypes)uiMyPlayer;4156 if (GET_PLAYER(eMyPlayer).getTeam() == m_eID)4157 {4158 for (uint uiOtherPlayer = 0; uiOtherPlayer < MAX_MAJOR_CIVS; uiOtherPlayer++)4159 {4160 PlayerTypes eOtherPlayer = (PlayerTypes)uiOtherPlayer;4161 CvPlayer& kOtherPlayer = GET_PLAYER(eOtherPlayer);4162 if (kOtherPlayer.getTeam() == eIndex && kOtherPlayer.isAlive())4163 {4164 if (bNewValue)4165 {4166 GET_PLAYER(eMyPlayer).GetDiplomacyAI()->LogOpenEmbassy(eOtherPlayer);4167 }4168 else4169 {4170 GET_PLAYER(eMyPlayer).GetDiplomacyAI()->LogCloseEmbassy(eOtherPlayer);4171 }4172 }4173 }4174 }4175 }4176 }4177}