Bazaar developer reference

CvPlayerTraits::ConvertBarbarianCamp(CvUnit *, CvPlot *)

Defined in
CvTraitClasses.cpp, line 4239
Class
CvPlayerTraits
Hook name
CivHooks::CvPlayerTraits_ConvertBarbarianCamp
Lua events
GameEvents.UnitCaptured

Hooks

static bool BeforeCvPlayerTraits_ConvertBarbarianCamp(CvPlayerTraits* self, CvUnit* pByUnit, CvPlot* pPlot, bool& result);static void AfterCvPlayerTraits_ConvertBarbarianCamp(CvPlayerTraits* self, CvUnit* pByUnit, CvPlot* pPlot, bool& result);static bool ReplaceCvPlayerTraits_ConvertBarbarianCamp(bool (*original)(CvPlayerTraits*, CvUnit*, CvPlot*), CvPlayerTraits* self, CvUnit* pByUnit, CvPlot* pPlot);CivRegisterBefore<CivHooks::CvPlayerTraits_ConvertBarbarianCamp>(host, &BeforeCvPlayerTraits_ConvertBarbarianCamp);CivRegisterAfter<CivHooks::CvPlayerTraits_ConvertBarbarianCamp>(host, &AfterCvPlayerTraits_ConvertBarbarianCamp);CivRegisterReplace<CivHooks::CvPlayerTraits_ConvertBarbarianCamp>(host, &ReplaceCvPlayerTraits_ConvertBarbarianCamp);

Code

4237/// Is there an adjacent barbarian camp that could be converted?4238#if defined(MOD_EVENTS_UNIT_CAPTURE)4239bool CvPlayerTraits::ConvertBarbarianCamp(CvUnit* pByUnit, CvPlot* pPlot)4240#else4241bool CvPlayerTraits::ConvertBarbarianCamp(CvPlot* pPlot)4242#endif4243{4244	UnitHandle pGiftUnit;42454246	// Has this camp already decided not to convert?4247	if(pPlot->IsBarbarianCampNotConverting())4248	{4249		return false;4250	}42514252	// Roll die to see if it converts4253	if(GC.getGame().getJonRandNum(100, "Barbarian Camp Conversion") < m_iLandBarbarianConversionPercent)4254	{4255		pPlot->setImprovementType(NO_IMPROVEMENT);42564257		int iNumGold = /*25*/ GC.getGOLD_FROM_BARBARIAN_CONVERSION();4258		m_pPlayer->GetTreasury()->ChangeGold(iNumGold);42594260		// Set who last cleared the camp here4261		pPlot->SetPlayerThatClearedBarbCampHere(m_pPlayer->GetID());42624263		// Convert the barbarian into our unit4264		FAssertMsg(m_eCampGuardType < GC.getNumUnitInfos(), "Illegal camp guard unit type");4265		pGiftUnit = m_pPlayer->initUnit(m_eCampGuardType, pPlot->getX(), pPlot->getY(), NO_UNITAI, NO_DIRECTION, true /*bNoMove*/);4266		if (!pGiftUnit->jumpToNearestValidPlot())4267			pGiftUnit->kill(false);4268		else4269#if defined(MOD_EVENTS_UNIT_CAPTURE)4270		{4271			if (MOD_EVENTS_UNIT_CAPTURE) {4272				GAMEEVENTINVOKE_HOOK(GAMEEVENT_UnitCaptured, m_pPlayer->GetID(), pByUnit->GetID(), m_pPlayer->GetID(), pGiftUnit->GetID(), false, 2);4273			}4274#endif4275			pGiftUnit->finishMoves();4276#if defined(MOD_EVENTS_UNIT_CAPTURE)4277		}4278#endif42794280		// Convert any extra units4281		for(int iI = 0; iI < m_iLandBarbarianConversionExtraUnits; iI++)4282		{4283			pGiftUnit = m_pPlayer->initUnit(m_eCampGuardType, pPlot->getX(), pPlot->getY(), NO_UNITAI, NO_DIRECTION, true /*bNoMove*/);4284			if (!pGiftUnit->jumpToNearestValidPlot())4285				pGiftUnit->kill(false);4286			else4287#if defined(MOD_EVENTS_UNIT_CAPTURE)4288		{4289				if (MOD_EVENTS_UNIT_CAPTURE) {4290					GAMEEVENTINVOKE_HOOK(GAMEEVENT_UnitCaptured, m_pPlayer->GetID(), pByUnit->GetID(), m_pPlayer->GetID(), pGiftUnit->GetID(), false, 2);4291				}4292#endif4293				pGiftUnit->finishMoves();4294#if defined(MOD_EVENTS_UNIT_CAPTURE)4295		}4296#endif4297		}42984299		if(GC.getLogging() && GC.getAILogging())4300		{4301			CvString logMsg;4302			logMsg.Format("Converted barbarian camp, X: %d, Y: %d", pPlot->getX(), pPlot->getY());4303			m_pPlayer->GetHomelandAI()->LogHomelandMessage(logMsg);4304		}43054306		CvString strBuffer = GetLocalizedText("TXT_KEY_NOTIFICATION_BARB_CAMP_CONVERTS");4307		CvString strSummary = GetLocalizedText("TXT_KEY_NOTIFICATION_SUMMARY_BARB_CAMP_CONVERTS");4308		m_pPlayer->GetNotifications()->Add(NOTIFICATION_GENERIC, strBuffer, strSummary, pPlot->getX(), pPlot->getY(), -1);4309#if !defined(NO_ACHIEVEMENTS)4310		//Increase Stat4311		if(m_pPlayer->isHuman() &&!GC.getGame().isGameMultiPlayer())4312		{4313			gDLL->IncrementSteamStatAndUnlock(ESTEAMSTAT_BARBSCONVERTED, 10, ACHIEVEMENT_SPECIAL_BARBARIANWARLORD);4314		}4315#endif4316	}43174318	// Decided not to4319	else4320	{4321		pPlot->SetBarbarianCampNotConverting(true);4322		return false;4323	}43244325	return true;4326}

Calls

Called by