Hooks
static bool BeforeCvPlayer_canRaze(const CvPlayer* self, CvCity* pCity, bool bIgnoreCapitals, bool& result);static void AfterCvPlayer_canRaze(const CvPlayer* self, CvCity* pCity, bool bIgnoreCapitals, bool& result);static bool ReplaceCvPlayer_canRaze(bool (*original)(const CvPlayer*, CvCity*, bool), const CvPlayer* self, CvCity* pCity, bool bIgnoreCapitals);CivRegisterBefore<CivHooks::CvPlayer_canRaze>(host, &BeforeCvPlayer_canRaze);CivRegisterAfter<CivHooks::CvPlayer_canRaze>(host, &AfterCvPlayer_canRaze);CivRegisterReplace<CivHooks::CvPlayer_canRaze>(host, &ReplaceCvPlayer_canRaze);
Code
6060bool CvPlayer::canRaze(CvCity* pCity, bool bIgnoreCapitals) const6061{6062 if(GC.getGame().isOption(GAMEOPTION_NO_CITY_RAZING))6063 {6064 return false;6065 }60666067 // If we don't own this city right now then we can't raze it!6068 if(pCity->getOwner() != GetID())6069 {6070 return false;6071 }60726073 // Can't raze a city that originally belonged to us6074 if(pCity->getOriginalOwner() == GetID())6075 {6076 return false;6077 }60786079 ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();6080 if(pkScriptSystem)6081 {6082 CvLuaArgsHandle args;6083 args->Push(pCity->getOwner());6084 args->Push(pCity->GetID());60856086 bool bResult = false;6087 if(LuaSupport::CallTestAll(pkScriptSystem, "CanRazeOverride", args.get(), bResult))6088 {6089 // Check the result.6090 if(bResult == true)6091 {6092 return true;6093 }6094 }6095 }60966097#if defined(MOD_EVENTS_CITY_RAZING)6098 if (MOD_EVENTS_CITY_RAZING) {6099 // Note the subtle difference between CanRazeOverride and PlayerCanRaze, the former needs everyone to agree, the latter anyone6100 if (GAMEEVENTINVOKE_TESTANY(GAMEEVENT_PlayerCanRaze, pCity->getOwner(), pCity->GetID()) == GAMEEVENTRETURN_TRUE) {6101 return true;6102 }6103 }6104#endif61056106 // No razing of capitals6107 CvPlayer* pOriginalOwner = &GET_PLAYER(pCity->getOriginalOwner());6108 bool bOriginalCapital = pCity->getX() == pOriginalOwner->GetOriginalCapitalX() &&6109 pCity->getY() == pOriginalOwner->GetOriginalCapitalY();61106111 if(!bIgnoreCapitals && pCity->IsEverCapital() && bOriginalCapital)6112 {6113 return false;6114 }61156116 // No razing of Holy Cities6117 if (pCity->GetCityReligions()->IsHolyCityAnyReligion())6118 {6119 return false;6120 }61216122 // No razing of cities with unique luxuries6123 ResourceTypes eResource = pCity->plot()->getResourceType();6124 if (eResource != NO_RESOURCE)6125 {6126 CvResourceInfo *pkResource = GC.getResourceInfo(eResource);6127 if (pkResource && pkResource->GetRequiredCivilization() != NO_CIVILIZATION)6128 {6129 return false;6130 }6131 }61326133 if(pkScriptSystem)6134 {6135 CvLuaArgsHandle args;6136 args->Push(pCity->getOwner());6137 args->Push(pCity->GetID());61386139 bool bResult = false;6140 if(LuaSupport::CallTestAll(pkScriptSystem, "CanRaze", args.get(), bResult))6141 {6142 // Check the result.6143 if(bResult == false)6144 {6145 return false;6146 }6147 }6148 }61496150 return true;6151}