Hooks
static bool BeforeCvUnit_GetUpgradeUnitType(const CvUnit* self, UnitTypes& result);static void AfterCvUnit_GetUpgradeUnitType(const CvUnit* self, UnitTypes& result);static UnitTypes ReplaceCvUnit_GetUpgradeUnitType(UnitTypes (*original)(const CvUnit*), const CvUnit* self);CivRegisterBefore<CivHooks::CvUnit_GetUpgradeUnitType>(host, &BeforeCvUnit_GetUpgradeUnitType);CivRegisterAfter<CivHooks::CvUnit_GetUpgradeUnitType>(host, &AfterCvUnit_GetUpgradeUnitType);CivRegisterReplace<CivHooks::CvUnit_GetUpgradeUnitType>(host, &ReplaceCvUnit_GetUpgradeUnitType);
Code
11098/// What UnitType does this Unit upgrade into?11099UnitTypes CvUnit::GetUpgradeUnitType() const11100{11101 VALIDATE_OBJECT11102 UnitTypes eUpgradeUnitType = NO_UNIT;1110311104 CvCivilizationInfo& kCiv = GET_PLAYER(getOwner()).getCivilizationInfo();1110511106 // Determine what we're going to upgrade into11107 for(int iI = 0; iI < GC.getNumUnitClassInfos(); iI++)11108 {11109 const UnitClassTypes eUnitClass = static_cast<UnitClassTypes>(iI);11110 CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo(eUnitClass);11111 if(pkUnitClassInfo)11112 {11113 if(m_pUnitInfo->GetUpgradeUnitClass(iI))11114 {11115 eUpgradeUnitType = (UnitTypes) kCiv.getCivilizationUnits(iI);1111611117#if defined(MOD_EVENTS_UNIT_UPGRADES)11118 if (MOD_EVENTS_UNIT_UPGRADES) {11119 if (GAMEEVENTINVOKE_TESTALL(GAMEEVENT_CanHaveUpgrade, getOwner(), GetID(), iI, eUpgradeUnitType) == GAMEEVENTRETURN_FALSE) {11120 continue;11121 }1112211123 if (GAMEEVENTINVOKE_TESTALL(GAMEEVENT_UnitCanHaveUpgrade, getOwner(), GetID(), iI, eUpgradeUnitType) == GAMEEVENTRETURN_FALSE) {11124 continue;11125 }11126 } else {11127#endif11128 ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();11129 if (pkScriptSystem) 11130 {11131 CvLuaArgsHandle args;11132 args->Push(((int)getOwner()));11133 args->Push(GetID());11134 args->Push(iI);11135 args->Push(eUpgradeUnitType);1113611137 bool bResult = false;11138 if (LuaSupport::CallTestAll(pkScriptSystem, "CanHaveUpgrade", args.get(), bResult)) 11139 {11140 if (bResult == false) 11141 {11142 continue;11143 }11144 }11145 }11146#if defined(MOD_EVENTS_UNIT_UPGRADES)11147 }11148#endif1114911150 break;11151 }11152 }11153 }1115411155 return eUpgradeUnitType;11156}