CvPlayerTechs::CanResearch(TechTypes, bool) const
- Defined in
- CvTechClasses.cpp, line 1180
- Class
- CvPlayerTechs
- Hook name
CivHooks::CvPlayerTechs_CanResearch- Lua events
GameEvents.PlayerCanResearch
Hooks
static bool BeforeCvPlayerTechs_CanResearch(const CvPlayerTechs* self, TechTypes eTech, bool bTrade, bool& result);static void AfterCvPlayerTechs_CanResearch(const CvPlayerTechs* self, TechTypes eTech, bool bTrade, bool& result);static bool ReplaceCvPlayerTechs_CanResearch(bool (*original)(const CvPlayerTechs*, TechTypes, bool), const CvPlayerTechs* self, TechTypes eTech, bool bTrade);CivRegisterBefore<CivHooks::CvPlayerTechs_CanResearch>(host, &BeforeCvPlayerTechs_CanResearch);CivRegisterAfter<CivHooks::CvPlayerTechs_CanResearch>(host, &AfterCvPlayerTechs_CanResearch);CivRegisterReplace<CivHooks::CvPlayerTechs_CanResearch>(host, &ReplaceCvPlayerTechs_CanResearch);
Code
1179/// Accessor: Is it possible to research this tech?1180bool CvPlayerTechs::CanResearch(TechTypes eTech, bool bTrade) const1181{1182 bool bFoundPossible;1183 bool bFoundValid;1184 int iI;11851186 CvTechEntry* pkTechEntry = GC.getTechInfo(eTech);1187 if(pkTechEntry == NULL)1188 return false;11891190 if(!IsResearch() && m_pPlayer->getAdvancedStartPoints() < 0)1191 {1192 return false;1193 }11941195 // Do we already have this tech?1196 if(GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech(eTech))1197 {1198 return false;1199 }12001201 bFoundPossible = false;1202 bFoundValid = false;12031204 // See if it is possible based on OR prereqs1205 for(iI = 0; iI < GC.getNUM_OR_TECH_PREREQS(); iI++)1206 {1207 TechTypes ePrereq = (TechTypes)pkTechEntry->GetPrereqOrTechs(iI);1208 if(ePrereq != NO_TECH)1209 {1210 bFoundPossible = true;12111212 if(GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech(ePrereq))1213 {1214 if(!bTrade || !GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->IsNoTradeTech(ePrereq))1215 {1216 bFoundValid = true;1217 break;1218 }1219 }1220 }1221 }12221223 if(bFoundPossible && !bFoundValid)1224 {1225 return false;1226 }12271228 // See if it is possible based on AND prereqs1229 for(iI = 0; iI < GC.getNUM_AND_TECH_PREREQS(); iI++)1230 {1231 TechTypes ePrereq = (TechTypes)pkTechEntry->GetPrereqAndTechs(iI);1232 if(ePrereq != NO_TECH)1233 {1234 if(!GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech(ePrereq))1235 {1236 return false;1237 }12381239 if(bTrade && GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->IsNoTradeTech(ePrereq))1240 {1241 return false;1242 }1243 }1244 }12451246 // Is it disabled for some reason?1247 if(!CanEverResearch(eTech))1248 {1249 return false;1250 }12511252 ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();1253 if(pkScriptSystem)1254 {1255 CvLuaArgsHandle args;1256 args->Push(m_pPlayer->GetID());1257 args->Push(eTech);12581259 // Attempt to execute the game events.1260 // Will return false if there are no registered listeners.1261 bool bResult = false;1262 if(LuaSupport::CallTestAll(pkScriptSystem, "PlayerCanResearch", args.get(), bResult))1263 {1264 // Check the result.1265 if(bResult == false)1266 {1267 return false;1268 }1269 }1270 }12711272 return true;1273}
Calls
- CvGlobals::getDLLIFace()
- CvGlobals::getNUM_AND_TECH_PREREQS()
- CvGlobals::getNUM_OR_TECH_PREREQS()
- CvGlobals::getTechInfo(TechTypes)
- CvLuaArgsHandle::CvLuaArgsHandle()
- CvLuaArgsHandle::get() const
- CvLuaArgsHandle::operator->() const
- CvPlayer::getAdvancedStartPoints() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayerTechs::CanEverResearch(TechTypes) const
- CvPlayerTechs::IsResearch() const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const
- CvTeamTechs::IsNoTradeTech(TechTypes) const
- CvTechEntry::GetPrereqAndTechs(int) const
- CvTechEntry::GetPrereqOrTechs(int) const
ICvEngineScriptSystemArgs1::PushICvEngineUtility1::GetScriptSystem- LuaSupport::CallTestAll(ICvEngineScriptSystem1 *, const char *, ICvEngineScriptSystemArgs1 *, bool &)
Called by
- CvAdvisorCounsel::BuildCounselList(PlayerTypes)
- CvAdvisorRecommender::UpdateTechRecommendations(PlayerTypes)
- CvEspionageAI::BuildOffenseCityList(EspionageCityList &)
- CvPlayerEspionage::BuildStealableTechList(PlayerTypes)
- getDiscoveryTech(UnitTypes, PlayerTypes)
- CvMinorCivAI::GetGoodTechPlayerDoesntHave(PlayerTypes, int) const
- CvPlayer::DoTechFromCityConquer(CvCity *)
- CvPlayer::canReceiveGoody(CvPlot *, GoodyTypes, CvUnit *) const
- CvPlayer::canStealTech(PlayerTypes, TechTypes) const
- CvPlayer::getAdvancedStartTechCost(TechTypes, bool)
- CvPlayer::receiveGoody(CvPlot *, GoodyTypes, CvUnit *)
- CvPlayerAI::AI_chooseResearch()
- CvTechAI::ChooseNextTech(CvPlayer *, bool)
- CvTechAI::RecommendNextTech(CvPlayer *, TechTypes)
- CvPlayerTechs::CanResearchForFree(TechTypes) const
- CvPlayerTechs::GetMedianTechResearch() const
- CvPlayerTechs::GetNumTechsCanBeResearched() const
- CvPlayerTechs::IsNoResearchAvailable() const
- CvLuaPlayer::lCanResearch(lua_State *)