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}