CvPlayer::canCreate(ProjectTypes, bool, bool) const
- Defined in
- CvPlayer.cpp, line 8248
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_canCreate- Lua events
GameEvents.PlayerCanCreate
Hooks
static bool BeforeCvPlayer_canCreate(const CvPlayer* self, ProjectTypes eProject, bool bContinue, bool bTestVisible, bool& result);static void AfterCvPlayer_canCreate(const CvPlayer* self, ProjectTypes eProject, bool bContinue, bool bTestVisible, bool& result);static bool ReplaceCvPlayer_canCreate(bool (*original)(const CvPlayer*, ProjectTypes, bool, bool), const CvPlayer* self, ProjectTypes eProject, bool bContinue, bool bTestVisible);CivRegisterBefore<CivHooks::CvPlayer_canCreate>(host, &BeforeCvPlayer_canCreate);CivRegisterAfter<CivHooks::CvPlayer_canCreate>(host, &AfterCvPlayer_canCreate);CivRegisterReplace<CivHooks::CvPlayer_canCreate>(host, &ReplaceCvPlayer_canCreate);
Code
8248bool CvPlayer::canCreate(ProjectTypes eProject, bool bContinue, bool bTestVisible) const8249{8250 CvProjectEntry* pkProjectInfo = GC.getProjectInfo(eProject);8251 if(!pkProjectInfo)8252 {8253 return false;8254 }82558256 CvProjectEntry& pProjectInfo = *pkProjectInfo;82578258 int iI;82598260 // No projects for barbs8261 if(isBarbarian())8262 {8263 return false;8264 }82658266 // no minors either8267 if(isMinorCiv())8268 {8269 return false;8270 }82718272 // If cost is -1 then that means it can't be built8273 if(pProjectInfo.GetProductionCost() == -1)8274 {8275 return false;8276 }82778278 // Tech requirement8279 if(!(GET_TEAM(getTeam()).GetTeamTechs()->HasTech((TechTypes)(pProjectInfo.GetTechPrereq()))))8280 {8281 return false;8282 }82838284 // Policy branch requirement?8285 if(pProjectInfo.GetCultureBranchesRequired() > 0)8286 {8287 if(GetPlayerPolicies()->GetNumPolicyBranchesFinished() < pProjectInfo.GetCultureBranchesRequired())8288 {8289 return false;8290 }8291 }82928293 // Requires a particular victory condition to be enabled?8294 if(pProjectInfo.GetVictoryPrereq() != NO_VICTORY)8295 {8296 if(!(GC.getGame().isVictoryValid((VictoryTypes)(pProjectInfo.GetVictoryPrereq()))))8297 {8298 return false;8299 }83008301 if(isMinorCiv())8302 {8303 return false;8304 }83058306 if(GET_TEAM(getTeam()).getVictoryCountdown((VictoryTypes)pProjectInfo.GetVictoryPrereq()) >= 0)8307 {8308 return false;8309 }8310 }83118312 if(GC.getGame().isProjectMaxedOut(eProject))8313 {8314 return false;8315 }83168317 if(GET_TEAM(getTeam()).isProjectMaxedOut(eProject))8318 {8319 return false;8320 }83218322 if(!bTestVisible)8323 {8324 // Resource Requirements8325 ResourceTypes eResource;8326 int iNumResource;8327 for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)8328 {8329 eResource = (ResourceTypes) iResourceLoop;8330 iNumResource = pProjectInfo.GetResourceQuantityRequirement(eResource);83318332 if(iNumResource > 0)8333 {8334 if(getNumResourceAvailable(eResource) < iNumResource)8335 {8336 return false;8337 }8338 }8339 }83408341 if(GC.getGame().isProjectMaxedOut(eProject, (GET_TEAM(getTeam()).getProjectMaking(eProject) + ((bContinue) ? -1 : 0))))8342 {8343 return false;8344 }83458346 if(GET_TEAM(getTeam()).isProjectMaxedOut(eProject, (GET_TEAM(getTeam()).getProjectMaking(eProject) + ((bContinue) ? -1 : 0))))8347 {8348 return false;8349 }83508351 // Nukes disabled? (by UN or something)8352 if(GC.getGame().isNoNukes())8353 {8354 if(pProjectInfo.IsAllowsNukes())8355 {8356 for(iI = 0; iI < GC.getNumUnitInfos(); iI++)8357 {8358 CvUnitEntry* pkUnitEntry = GC.getUnitInfo((UnitTypes)iI);8359 if(pkUnitEntry && pkUnitEntry->GetNukeDamageLevel() != -1)8360 {8361 return false;8362 }8363 }8364 }8365 }83668367 if(pProjectInfo.GetAnyoneProjectPrereq() != NO_PROJECT)8368 {8369 if(GC.getGame().getProjectCreatedCount((ProjectTypes)(pProjectInfo.GetAnyoneProjectPrereq())) == 0)8370 {8371 return false;8372 }8373 }83748375 for(iI = 0; iI < GC.getNumProjectInfos(); iI++)8376 {8377 if(GET_TEAM(getTeam()).getProjectCount((ProjectTypes)iI) < pProjectInfo.GetProjectsNeeded(iI))8378 {8379 return false;8380 }8381 }8382 }83838384 ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();8385 if(pkScriptSystem)8386 {8387 CvLuaArgsHandle args;8388 args->Push(GetID());8389 args->Push(eProject);83908391 // Attempt to execute the game events.8392 // Will return false if there are no registered listeners.8393 bool bResult = false;8394 if(LuaSupport::CallTestAll(pkScriptSystem, "PlayerCanCreate", args.get(), bResult))8395 {8396 // Check the result.8397 if(bResult == false)8398 {8399 return false;8400 }8401 }8402 }84038404 return true;8405}
Calls
- CvGame::getProjectCreatedCount(ProjectTypes)
- CvGame::isNoNukes() const
- CvGame::isProjectMaxedOut(ProjectTypes, int)
- CvGame::isVictoryValid(VictoryTypes) const
- CvGlobals::getDLLIFace()
- CvGlobals::getGame()
- CvGlobals::getNumProjectInfos()
- CvGlobals::getNumResourceInfos()
- CvGlobals::getNumUnitInfos()
- CvGlobals::getProjectInfo(ProjectTypes)
- CvGlobals::getUnitInfo(UnitTypes)
- CvLuaArgsHandle::CvLuaArgsHandle()
- CvLuaArgsHandle::get() const
- CvLuaArgsHandle::operator->() const
- CvPlayer::GetID() const
- CvPlayer::getNumResourceAvailable(ResourceTypes, bool) const
- CvPlayer::GetPlayerPolicies() const
- CvPlayer::getTeam() const
- CvPlayer::isBarbarian() const
- CvPlayer::isMinorCiv() const
- CvPlayerPolicies::GetNumPolicyBranchesFinished() const
- CvProjectEntry::GetAnyoneProjectPrereq() const
- CvProjectEntry::GetCultureBranchesRequired() const
- CvProjectEntry::GetProductionCost() const
- CvProjectEntry::GetProjectsNeeded(int) const
- CvProjectEntry::GetResourceQuantityRequirement(int) const
- CvProjectEntry::GetTechPrereq() const
- CvProjectEntry::GetVictoryPrereq() const
- CvProjectEntry::IsAllowsNukes() const
- CvTeam::getProjectCount(ProjectTypes) const
- CvTeam::getProjectMaking(ProjectTypes) const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeam::getVictoryCountdown(VictoryTypes) const
- CvTeam::isProjectMaxedOut(ProjectTypes, int) const
- CvTeamTechs::HasTech(TechTypes) const
- CvUnitEntry::GetNukeDamageLevel() const
ICvEngineScriptSystemArgs1::PushICvEngineUtility1::GetScriptSystem- LuaSupport::CallTestAll(ICvEngineScriptSystem1 *, const char *, ICvEngineScriptSystemArgs1 *, bool &)