CvPlayer::getAdvancedStartTechCost(TechTypes, bool)
- Defined in
- CvPlayer.cpp, line 23398
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_getAdvancedStartTechCost
Hooks
static bool BeforeCvPlayer_getAdvancedStartTechCost(CvPlayer* self, TechTypes eTech, bool bAdd, int& result);static void AfterCvPlayer_getAdvancedStartTechCost(CvPlayer* self, TechTypes eTech, bool bAdd, int& result);static int ReplaceCvPlayer_getAdvancedStartTechCost(int (*original)(CvPlayer*, TechTypes, bool), CvPlayer* self, TechTypes eTech, bool bAdd);CivRegisterBefore<CivHooks::CvPlayer_getAdvancedStartTechCost>(host, &BeforeCvPlayer_getAdvancedStartTechCost);CivRegisterAfter<CivHooks::CvPlayer_getAdvancedStartTechCost>(host, &AfterCvPlayer_getAdvancedStartTechCost);CivRegisterReplace<CivHooks::CvPlayer_getAdvancedStartTechCost>(host, &ReplaceCvPlayer_getAdvancedStartTechCost);
Code
23398int CvPlayer::getAdvancedStartTechCost(TechTypes eTech, bool bAdd)23399{23400 if(eTech == NO_TECH)23401 {23402 return -1;23403 }2340423405 if(0 == getNumCities())23406 {23407 return -1;23408 }2340923410 int iCost = (GET_TEAM(getTeam()).GetTeamTechs()->GetResearchCost(eTech) * GC.getTechInfo(eTech)->GetAdvancedStartCost()) / 100;23411 if(iCost < 0)23412 {23413 return -1;23414 }2341523416 if(bAdd)23417 {23418 if(!GetPlayerTechs()->CanResearch(eTech, false))23419 {23420 return -1;23421 }23422 }23423 else if(!bAdd)23424 {23425 if(!GET_TEAM(getTeam()).GetTeamTechs()->HasTech(eTech))23426 {23427 return -1;23428 }2342923430 // Search through all techs to see if any of the currently owned ones requires this tech23431 for(int iTechLoop = 0; iTechLoop < GC.getNumTechInfos(); iTechLoop++)23432 {23433 TechTypes eTechLoop = (TechTypes) iTechLoop;2343423435 if(GET_TEAM(getTeam()).GetTeamTechs()->HasTech(eTechLoop))23436 {23437 int iPrereqLoop;2343823439 // Or Prereqs23440 for(iPrereqLoop = 0; iPrereqLoop < GC.getNUM_OR_TECH_PREREQS(); iPrereqLoop++)23441 {23442 if(GC.getTechInfo(eTechLoop)->GetPrereqOrTechs(iPrereqLoop) == eTech)23443 {23444 return -1;23445 }23446 }2344723448 // And Prereqs23449 for(iPrereqLoop = 0; iPrereqLoop < GC.getNUM_AND_TECH_PREREQS(); iPrereqLoop++)23450 {23451 if(GC.getTechInfo(eTechLoop)->GetPrereqAndTechs(iPrereqLoop) == eTech)23452 {23453 return -1;23454 }23455 }23456 }23457 }2345823459 // If player has placed anything on the map which uses this tech then you cannot remove it23460 int iLoop;2346123462 // Units23463 CvUnit* pLoopUnit;23464 for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))23465 {23466 if(pLoopUnit->getUnitInfo().GetPrereqAndTech() == eTech)23467 {23468 return -1;23469 }2347023471 for(int iI = 0; iI < GC.getNUM_UNIT_AND_TECH_PREREQS(); iI++)23472 {23473 if(pLoopUnit->getUnitInfo().GetPrereqAndTechs(iI) == eTech)23474 {23475 return -1;23476 }23477 }23478 }2347923480 // Cities23481 CvCity* pLoopCity;23482 for(pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))23483 {23484 // All Buildings23485 for(int iBuildingLoop = 0; iBuildingLoop < GC.getNumBuildingInfos(); iBuildingLoop++)23486 {23487 const BuildingTypes eBuilding = static_cast<BuildingTypes>(iBuildingLoop);23488 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);23489 if(pkBuildingInfo)23490 {23491 if(pLoopCity->GetCityBuildings()->GetNumRealBuilding(eBuilding) > 0)23492 {23493 if(pkBuildingInfo->GetPrereqAndTech() == eTech)23494 {23495 return -1;23496 }2349723498 for(int iI = 0; iI < GC.getNUM_BUILDING_AND_TECH_PREREQS(); iI++)23499 {23500 if(pkBuildingInfo->GetPrereqAndTechs(iI) == eTech)23501 {23502 return -1;23503 }23504 }23505 }23506 }23507 }23508 }2350923510 }2351123512 return iCost;23513}
Calls
- CvBuildingEntry::GetPrereqAndTech() const
- CvBuildingEntry::GetPrereqAndTechs(int) const
- CvCity::GetCityBuildings() const
- CvCityBuildings::GetNumRealBuilding(BuildingTypes) const
- CvGlobals::getBuildingInfo(BuildingTypes)
- CvGlobals::getNUM_AND_TECH_PREREQS()
- CvGlobals::getNUM_BUILDING_AND_TECH_PREREQS()
- CvGlobals::getNUM_OR_TECH_PREREQS()
- CvGlobals::getNUM_UNIT_AND_TECH_PREREQS()
- CvGlobals::getNumBuildingInfos()
- CvGlobals::getNumTechInfos()
- CvGlobals::getTechInfo(TechTypes)
- CvPlayer::firstCity(int *, bool)
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::getNumCities() const
- CvPlayer::GetPlayerTechs() const
- CvPlayer::getTeam() const
- CvPlayer::nextCity(int *, bool)
- CvPlayer::nextUnit(int *, bool)
- CvPlayerTechs::CanResearch(TechTypes, bool) const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::GetResearchCost(TechTypes) const
- CvTeamTechs::HasTech(TechTypes) const
- CvTechEntry::GetAdvancedStartCost() const
- CvTechEntry::GetPrereqAndTechs(int) const
- CvTechEntry::GetPrereqOrTechs(int) const
- CvUnit::getUnitInfo() const
- CvUnitEntry::GetPrereqAndTech() const
- CvUnitEntry::GetPrereqAndTechs(int) const