Hooks
static bool BeforeCvPlayer_raze(CvPlayer* self, CvCity* pCity);static void AfterCvPlayer_raze(CvPlayer* self, CvCity* pCity);static void ReplaceCvPlayer_raze(void (*original)(CvPlayer*, CvCity*), CvPlayer* self, CvCity* pCity);CivRegisterBefore<CivHooks::CvPlayer_raze>(host, &BeforeCvPlayer_raze);CivRegisterAfter<CivHooks::CvPlayer_raze>(host, &AfterCvPlayer_raze);CivRegisterReplace<CivHooks::CvPlayer_raze>(host, &ReplaceCvPlayer_raze);
Code
6155void CvPlayer::raze(CvCity* pCity)6156{6157 char szBuffer[1024];6158 const size_t lenBuffer = 1024;6159 int iI;61606161 if(!canRaze(pCity))6162 {6163 return;6164 }61656166 CvAssert(pCity->getOwner() == GetID());61676168 if(GetID() == GC.getGame().getActivePlayer())6169 {6170 sprintf_s(szBuffer, lenBuffer, GetLocalizedText("TXT_KEY_MISC_DESTROYED_CITY", pCity->getNameKey()).GetCString());6171 GC.GetEngineUserInterface()->AddCityMessage(0, pCity->GetIDInfo(), GetID(), true, GC.getEVENT_MESSAGE_TIME(), szBuffer/*, "AS2D_CITYRAZE", MESSAGE_TYPE_MAJOR_EVENT, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pCity->getX(), pCity->getY(), true, true*/);61726173 }61746175 for(iI = 0; iI < MAX_PLAYERS; iI++)6176 {6177 if(GET_PLAYER((PlayerTypes)iI).isAlive())6178 {6179 if(iI != GetID() && iI == GC.getGame().getActivePlayer())6180 {6181 if(pCity->isRevealed(GET_PLAYER((PlayerTypes)iI).getTeam(), false))6182 {6183 sprintf_s(szBuffer, lenBuffer, GetLocalizedText("TXT_KEY_MISC_CITY_HAS_BEEN_RAZED_BY", pCity->getNameKey(), getCivilizationDescriptionKey()).GetCString());6184 GC.GetEngineUserInterface()->AddCityMessage(0, pCity->GetIDInfo(), ((PlayerTypes)iI), false, GC.getEVENT_MESSAGE_TIME(), szBuffer/*, "AS2D_CITYRAZED", MESSAGE_TYPE_MAJOR_EVENT, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pCity->getX(), pCity->getY(), true, true*/);6185 }6186 }6187 }6188 }61896190 sprintf_s(szBuffer, lenBuffer, GetLocalizedText("TXT_KEY_MISC_CITY_RAZED_BY", pCity->getNameKey(), getCivilizationShortDescriptionKey()).GetCString());6191 GC.getGame().addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, GetID(), szBuffer, pCity->getX(), pCity->getY());61926193 pCity->SetIgnoreCityForHappiness(false);6194 DoUpdateHappiness();61956196 int iPopulationDrop = 1;6197 iPopulationDrop *= (100 + GetPlayerTraits()->GetRazeSpeedModifier());6198 iPopulationDrop /= 100;6199 int iTurnsToRaze = pCity->getPopulation();6200 if(iPopulationDrop > 0)6201 {6202 iTurnsToRaze = (iTurnsToRaze + iPopulationDrop - 1) / iPopulationDrop;6203 }62046205 pCity->ChangeRazingTurns(iTurnsToRaze);62066207 DoUpdateNextPolicyCost();62086209 // Update City UI6210 if(GetID() == GC.getGame().getActivePlayer())6211 {6212 GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);6213 }6214}