Bazaar developer reference

CvPlayerTraits::ConvertBarbarianNavalUnit(CvUnit *, UnitHandle)

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

Hooks

static bool BeforeCvPlayerTraits_ConvertBarbarianNavalUnit(CvPlayerTraits* self, CvUnit* pByUnit, UnitHandle pUnit, bool& result);static void AfterCvPlayerTraits_ConvertBarbarianNavalUnit(CvPlayerTraits* self, CvUnit* pByUnit, UnitHandle pUnit, bool& result);static bool ReplaceCvPlayerTraits_ConvertBarbarianNavalUnit(bool (*original)(CvPlayerTraits*, CvUnit*, UnitHandle), CvPlayerTraits* self, CvUnit* pByUnit, UnitHandle pUnit);CivRegisterBefore<CivHooks::CvPlayerTraits_ConvertBarbarianNavalUnit>(host, &BeforeCvPlayerTraits_ConvertBarbarianNavalUnit);CivRegisterAfter<CivHooks::CvPlayerTraits_ConvertBarbarianNavalUnit>(host, &AfterCvPlayerTraits_ConvertBarbarianNavalUnit);CivRegisterReplace<CivHooks::CvPlayerTraits_ConvertBarbarianNavalUnit>(host, &ReplaceCvPlayerTraits_ConvertBarbarianNavalUnit);

Code

4328/// Is there an adjacent barbarian naval unit that could be converted?4329#if defined(MOD_EVENTS_UNIT_CAPTURE)4330bool CvPlayerTraits::ConvertBarbarianNavalUnit(CvUnit* pByUnit, UnitHandle pUnit)4331#else4332bool CvPlayerTraits::ConvertBarbarianNavalUnit(UnitHandle pUnit)4333#endif4334{4335	UnitHandle pGiftUnit;43364337	// Has this unit already decided not to convert?4338	if(pUnit->IsNotConverting())4339	{4340		return false;4341	}43424343	// Roll die to see if it converts4344	if(GC.getGame().getJonRandNum(100, "Barbarian Naval Unit Conversion") < m_iSeaBarbarianConversionPercent)4345	{4346		int iNumGold = /*25*/ GC.getGOLD_FROM_BARBARIAN_CONVERSION();4347		m_pPlayer->GetTreasury()->ChangeGold(iNumGold);43484349#if defined(MOD_EVENTS_UNIT_CAPTURE)4350		if (MOD_EVENTS_UNIT_CAPTURE) {4351			GAMEEVENTINVOKE_HOOK(GAMEEVENT_UnitCaptured, m_pPlayer->GetID(), pByUnit->GetID(), pUnit->getOwner(), pUnit->GetID(), false, 3);4352		}4353#endif43544355		// Convert the barbarian into our unit4356		pGiftUnit = m_pPlayer->initUnit(pUnit->getUnitType(), pUnit->getX(), pUnit->getY(), pUnit->AI_getUnitAIType(), NO_DIRECTION, true /*bNoMove*/, false);4357		CvAssertMsg(pGiftUnit, "GiftUnit is not assigned a valid value");4358		pGiftUnit->convert(pUnit.pointer(), false);4359		pGiftUnit->setupGraphical();4360		pGiftUnit->finishMoves(); // No move first turn43614362#if !defined(NO_ACHIEVEMENTS)4363		// Validate that the achievement is reached by a live human and active player at the same time4364		if(m_pPlayer->isHuman() && !GC.getGame().isGameMultiPlayer() && m_pPlayer->getLeaderInfo().GetType() && _stricmp(m_pPlayer->getLeaderInfo().GetType(), "LEADER_SULEIMAN") == 0)4365		{4366			gDLL->IncrementSteamStatAndUnlock(ESTEAMSTAT_BARBSNAVALCONVERTED, 10, ACHIEVEMENT_SPECIAL_BARBARYPIRATE);4367		}4368#endif43694370		if(GC.getLogging() && GC.getAILogging())4371		{4372			CvString logMsg;4373			logMsg.Format("Converted barbarian naval unit, X: %d, Y: %d", pUnit->getX(), pUnit->getY());4374			m_pPlayer->GetHomelandAI()->LogHomelandMessage(logMsg);4375		}43764377		CvString strBuffer = GetLocalizedText("TXT_KEY_NOTIFICATION_BARB_NAVAL_UNIT_CONVERTS");4378		CvString strSummary = GetLocalizedText("TXT_KEY_NOTIFICATION_SUMMARY_BARB_NAVAL_UNIT_CONVERTS");4379		m_pPlayer->GetNotifications()->Add(NOTIFICATION_GENERIC, strBuffer, strSummary, pUnit->getX(), pUnit->getY(), -1);4380		return true;4381	}43824383	// Decided not to4384	else4385	{4386		pUnit->SetNotConverting(true);4387		return false;4388	}4389}

Calls

Called by