CvCityCitizens::DoSpecialists()
- Defined in
- CvCityCitizens.cpp, line 2170
- Class
- CvCityCitizens
- Hook name
CivHooks::CvCityCitizens_DoSpecialists
Hooks
static bool BeforeCvCityCitizens_DoSpecialists(CvCityCitizens* self);static void AfterCvCityCitizens_DoSpecialists(CvCityCitizens* self);static void ReplaceCvCityCitizens_DoSpecialists(void (*original)(CvCityCitizens*), CvCityCitizens* self);CivRegisterBefore<CivHooks::CvCityCitizens_DoSpecialists>(host, &BeforeCvCityCitizens_DoSpecialists);CivRegisterAfter<CivHooks::CvCityCitizens_DoSpecialists>(host, &AfterCvCityCitizens_DoSpecialists);CivRegisterReplace<CivHooks::CvCityCitizens_DoSpecialists>(host, &ReplaceCvCityCitizens_DoSpecialists);
Code
2169/// Called at the end of every turn: Looks at the specialists in this City and levels them up2170void CvCityCitizens::DoSpecialists()2171{2172 int iGPPChange;2173 int iCount;2174 int iMod;2175 for(int iSpecialistLoop = 0; iSpecialistLoop < GC.getNumSpecialistInfos(); iSpecialistLoop++)2176 {2177 const SpecialistTypes eSpecialist = static_cast<SpecialistTypes>(iSpecialistLoop);2178 CvSpecialistInfo* pkSpecialistInfo = GC.getSpecialistInfo(eSpecialist);2179 if(pkSpecialistInfo)2180 {2181 int iGPThreshold = GetSpecialistUpgradeThreshold((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass());21822183 // Does this Specialist spawn a GP?2184 if(pkSpecialistInfo->getGreatPeopleUnitClass() != NO_UNITCLASS)2185 {2186 iCount = GetSpecialistCount(eSpecialist);21872188 // GPP from Specialists2189 iGPPChange = pkSpecialistInfo->getGreatPeopleRateChange() * iCount * 100;21902191 // GPP from Buildings2192 iGPPChange += GetBuildingGreatPeopleRateChanges(eSpecialist) * 100;21932194 if(iGPPChange > 0)2195 {2196 iMod = 0;21972198 // City mod2199 iMod += GetCity()->getGreatPeopleRateModifier();22002201 // Player mod2202 iMod += GetPlayer()->getGreatPeopleRateModifier();22032204 // Player and Golden Age mods to this specific class2205 if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_SCIENTIST"))2206 {2207 iMod += GetPlayer()->getGreatScientistRateModifier();2208 }2209 else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_WRITER"))2210 { 2211 if (GetPlayer()->isGoldenAge())2212 {2213 iMod += GetPlayer()->GetPlayerTraits()->GetGoldenAgeGreatWriterRateModifier();2214 }2215 iMod += GetPlayer()->getGreatWriterRateModifier();2216 }2217 else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_ARTIST"))2218 {2219 if (GetPlayer()->isGoldenAge())2220 {2221 iMod += GetPlayer()->GetPlayerTraits()->GetGoldenAgeGreatArtistRateModifier();2222 }2223 iMod += GetPlayer()->getGreatArtistRateModifier();2224 }2225 else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_MUSICIAN"))2226 {2227 if (GetPlayer()->isGoldenAge())2228 {2229 iMod += GetPlayer()->GetPlayerTraits()->GetGoldenAgeGreatMusicianRateModifier();2230 }2231 iMod += GetPlayer()->getGreatMusicianRateModifier();2232 }2233 else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_MERCHANT"))2234 {2235 iMod += GetPlayer()->getGreatMerchantRateModifier();2236 }2237 else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_ENGINEER"))2238 {2239 iMod += GetPlayer()->getGreatEngineerRateModifier();2240 }22412242#if defined(MOD_API_UNIFIED_YIELDS)2243 if (GetPlayer()->isGoldenAge())2244 {2245 GreatPersonTypes eGreatPerson = GetGreatPersonFromSpecialist(eSpecialist);22462247 iMod += GetPlayer()->getGoldenAgeGreatPersonRateModifier(eGreatPerson);2248 iMod += GetPlayer()->GetPlayerTraits()->GetGoldenAgeGreatPersonRateModifier(eGreatPerson);22492250 ReligionTypes eMajority = GetCity()->GetCityReligions()->GetReligiousMajority();2251 if(eMajority != NO_RELIGION)2252 {2253 const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, GetCity()->getOwner());2254 if(pReligion)2255 {2256 iMod += pReligion->m_Beliefs.GetGoldenAgeGreatPersonRateModifier(eGreatPerson);2257 BeliefTypes eSecondaryPantheon = GetCity()->GetCityReligions()->GetSecondaryReligionPantheonBelief();2258 if (eSecondaryPantheon != NO_BELIEF)2259 {2260 iMod += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetGoldenAgeGreatPersonRateModifier(eGreatPerson);2261 }2262 }2263 }2264 }2265#endif22662267 // Apply mod2268 iGPPChange *= (100 + iMod);2269 iGPPChange /= 100;22702271 ChangeSpecialistGreatPersonProgressTimes100(eSpecialist, iGPPChange);2272 }22732274 // Enough to spawn a GP?2275 if(GetSpecialistGreatPersonProgress(eSpecialist) >= iGPThreshold)2276 {2277 // No Minors2278 if(!GET_PLAYER(GetCity()->getOwner()).isMinorCiv())2279 {2280 // Reset progress on this Specialist2281 DoResetSpecialistGreatPersonProgressTimes100(eSpecialist);22822283 // Now... actually create the GP!2284 const UnitClassTypes eUnitClass = (UnitClassTypes) pkSpecialistInfo->getGreatPeopleUnitClass();2285 const CivilizationTypes eCivilization = GetCity()->getCivilizationType();2286 CvCivilizationInfo* pCivilizationInfo = GC.getCivilizationInfo(eCivilization);2287 if(pCivilizationInfo != NULL)2288 {2289 UnitTypes eUnit = (UnitTypes) pCivilizationInfo->getCivilizationUnits(eUnitClass);22902291#if defined(MOD_GLOBAL_TRULY_FREE_GP)2292 DoSpawnGreatPerson(eUnit, true, false, false);2293#else2294 DoSpawnGreatPerson(eUnit, true, false);2295#endif2296 }2297 }2298 }2299 }2300 }2301 }2302}
Calls
- CvBeliefEntry::GetGoldenAgeGreatPersonRateModifier(int) const
- CvBeliefXMLEntries::GetEntry(int)
- CvCity::GetCityReligions() const
- CvCity::getCivilizationType() const
- CvCity::getGreatPeopleRateModifier() const
- CvCity::getOwner() const
- CvCityCitizens::ChangeSpecialistGreatPersonProgressTimes100(SpecialistTypes, int)
- CvCityCitizens::DoResetSpecialistGreatPersonProgressTimes100(SpecialistTypes)
- CvCityCitizens::DoSpawnGreatPerson(UnitTypes, bool, bool, bool)
- CvCityCitizens::GetBuildingGreatPeopleRateChanges(SpecialistTypes) const
- CvCityCitizens::GetCity()
- CvCityCitizens::GetPlayer()
- CvCityCitizens::GetSpecialistCount(SpecialistTypes) const
- CvCityCitizens::GetSpecialistGreatPersonProgress(SpecialistTypes) const
- CvCityCitizens::GetSpecialistUpgradeThreshold(UnitClassTypes)
- CvCityReligions::GetReligiousMajority()
- CvCityReligions::GetSecondaryReligionPantheonBelief()
- CvCivilizationInfo::getCivilizationUnits(int) const
- CvGame::GetGameReligions()
- CvGameReligions::GetReligion(ReligionTypes, PlayerTypes) const
- CvGlobals::getCivilizationInfo(CivilizationTypes)
- CvGlobals::getGame()
- CvGlobals::GetGameBeliefs() const
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvGlobals::getNumSpecialistInfos()
- CvGlobals::getSpecialistInfo(SpecialistTypes)
- CvPlayer::getGoldenAgeGreatPersonRateModifier(GreatPersonTypes) const
- CvPlayer::getGreatArtistRateModifier() const
- CvPlayer::getGreatEngineerRateModifier() const
- CvPlayer::getGreatMerchantRateModifier() const
- CvPlayer::getGreatMusicianRateModifier() const
- CvPlayer::getGreatPeopleRateModifier() const
- CvPlayer::getGreatScientistRateModifier() const
- CvPlayer::getGreatWriterRateModifier() const
- CvPlayer::GetPlayerTraits() const
- CvPlayer::isGoldenAge() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTraits::GetGoldenAgeGreatArtistRateModifier() const
- CvPlayerTraits::GetGoldenAgeGreatMusicianRateModifier() const
- CvPlayerTraits::GetGoldenAgeGreatPersonRateModifier(GreatPersonTypes) const
- CvPlayerTraits::GetGoldenAgeGreatWriterRateModifier() const
- CvReligionBeliefs::GetGoldenAgeGreatPersonRateModifier(GreatPersonTypes) const
- CvSpecialistInfo::getGreatPeopleRateChange() const
- CvSpecialistInfo::getGreatPeopleUnitClass() const
- GetGreatPersonFromSpecialist(SpecialistTypes)