CvPlayer::DoTechFromCityConquer(CvCity *)
- Defined in
- CvPlayer.cpp, line 11158
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_DoTechFromCityConquer
Hooks
static bool BeforeCvPlayer_DoTechFromCityConquer(CvPlayer* self, CvCity* pConqueredCity);static void AfterCvPlayer_DoTechFromCityConquer(CvPlayer* self, CvCity* pConqueredCity);static void ReplaceCvPlayer_DoTechFromCityConquer(void (*original)(CvPlayer*, CvCity*), CvPlayer* self, CvCity* pConqueredCity);CivRegisterBefore<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &BeforeCvPlayer_DoTechFromCityConquer);CivRegisterAfter<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &AfterCvPlayer_DoTechFromCityConquer);CivRegisterReplace<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &ReplaceCvPlayer_DoTechFromCityConquer);
Code
11157/// Each a technology from conquering a city11158void CvPlayer::DoTechFromCityConquer(CvCity* pConqueredCity)11159{11160 PlayerTypes eOpponent = pConqueredCity->getOwner();11161 FStaticVector<TechTypes, 128, true, c_eCiv5GameplayDLL> vePossibleTechs;11162 int iCheapestTechCost = MAX_INT;11163 for (int i = 0; i < GC.getNumTechInfos(); i++)11164 {11165 TechTypes e = (TechTypes) i;11166 CvTechEntry* pInfo = GC.getTechInfo(e);11167 if (pInfo)11168 {11169 // They have it11170 if (GET_TEAM(GET_PLAYER(eOpponent).getTeam()).GetTeamTechs()->HasTech(e))11171 {11172 // We don't11173 if (!GET_TEAM(getTeam()).GetTeamTechs()->HasTech(e))11174 {11175 // But we could11176 if (GetPlayerTechs()->CanResearch(e))11177 {11178 if (pInfo->GetResearchCost() < iCheapestTechCost)11179 {11180 iCheapestTechCost = pInfo->GetResearchCost();11181 vePossibleTechs.clear();11182 vePossibleTechs.push_back(e);11183 }11184 else if (pInfo->GetResearchCost() == iCheapestTechCost)11185 {11186 vePossibleTechs.push_back(e);11187 }11188 }11189 }11190 }11191 }11192 }1119311194 if (!vePossibleTechs.empty())11195 {11196 int iRoll = GC.getGame().getJonRandNum((int)vePossibleTechs.size(), "Rolling to choose free tech from conquering a city");11197 TechTypes eFreeTech = vePossibleTechs[iRoll];11198 CvAssert(eFreeTech != NO_TECH)11199 if (eFreeTech != NO_TECH)11200 {11201 GET_TEAM(getTeam()).setHasTech(eFreeTech, true, GetID(), true, true);11202 GET_TEAM(getTeam()).GetTeamTechs()->SetNoTradeTech(eFreeTech, true);11203 }11204 }11205}
Calls
BaseVector::clearBaseVector::emptyBaseVector::operator[]BaseVector::size- CvCity::getOwner() const
- CvGame::getJonRandNum(int, const char *)
- CvGlobals::getGame()
- CvGlobals::getNumTechInfos()
- CvGlobals::getTechInfo(TechTypes)
- CvPlayer::GetID() const
- CvPlayer::GetPlayerTechs() const
- CvPlayer::getTeam() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTechs::CanResearch(TechTypes, bool) const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeam::setHasTech(TechTypes, bool, PlayerTypes, bool, bool)
- CvTeamTechs::HasTech(TechTypes) const
- CvTeamTechs::SetNoTradeTech(TechTypes, bool)
- CvTechEntry::GetResearchCost() const
FStaticVector::FStaticVectorFStaticVector::push_back