Bazaar developer reference

CvPlayer::canRaze(CvCity *, bool) const

Defined in
CvPlayer.cpp, line 6060
Class
CvPlayer
Hook name
CivHooks::CvPlayer_canRaze
Lua events
GameEvents.PlayerCanRaze, GameEvents.CanRazeOverride, GameEvents.CanRaze

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}

Calls

Called by