CvPlayer::doAdoptPolicy(PolicyTypes)
- Defined in
- CvPlayer.cpp, line 13385
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_doAdoptPolicy- Lua events
GameEvents.PlayerAdoptPolicy
Hooks
static bool BeforeCvPlayer_doAdoptPolicy(CvPlayer* self, PolicyTypes ePolicy);static void AfterCvPlayer_doAdoptPolicy(CvPlayer* self, PolicyTypes ePolicy);static void ReplaceCvPlayer_doAdoptPolicy(void (*original)(CvPlayer*, PolicyTypes), CvPlayer* self, PolicyTypes ePolicy);CivRegisterBefore<CivHooks::CvPlayer_doAdoptPolicy>(host, &BeforeCvPlayer_doAdoptPolicy);CivRegisterAfter<CivHooks::CvPlayer_doAdoptPolicy>(host, &AfterCvPlayer_doAdoptPolicy);CivRegisterReplace<CivHooks::CvPlayer_doAdoptPolicy>(host, &ReplaceCvPlayer_doAdoptPolicy);
Code
13385void CvPlayer::doAdoptPolicy(PolicyTypes ePolicy)13386{13387 CvPolicyEntry* pkPolicyInfo = GC.getPolicyInfo(ePolicy);13388 CvAssert(pkPolicyInfo != NULL);13389 if(pkPolicyInfo == NULL)13390 return;1339113392 // Can we actually adopt this?13393 if(!canAdoptPolicy(ePolicy))13394 return;1339513396 bool bTenet = pkPolicyInfo->GetLevel() > 0;1339713398 // Pay Culture cost - if applicable13399 if (bTenet && GetNumFreeTenets() > 0)13400 {13401 ChangeNumFreeTenets(-1, false);13402 }13403 else if (GetNumFreePolicies() > 0)13404 {13405 ChangeNumFreePolicies(-1);13406 }13407 else13408 {13409 changeJONSCulture(-getNextPolicyCost());13410 }1341113412 setHasPolicy(ePolicy, true);1341313414 // Update cost if trying to buy another policy this turn13415 DoUpdateNextPolicyCost();1341613417 // Branch unlocked13418 PolicyBranchTypes ePolicyBranch = (PolicyBranchTypes) pkPolicyInfo->GetPolicyBranchType();13419 GetPlayerPolicies()->SetPolicyBranchUnlocked(ePolicyBranch, true, false);1342013421 GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);1342213423 // This Dirty bit must only be set when changing something for the active player13424 if(GC.getGame().getActivePlayer() == GetID())13425 {13426 GC.GetEngineUserInterface()->setDirty(Policies_DIRTY_BIT, true);13427 }134281342913430 ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();13431 if(pkScriptSystem)13432 {13433 CvLuaArgsHandle args;13434 args->Push(GetID());13435 args->Push(ePolicy);1343613437 // Attempt to execute the game events.13438 // Will return false if there are no registered listeners.13439 bool bResult = false;13440 LuaSupport::CallHook(pkScriptSystem, "PlayerAdoptPolicy", args.get(), bResult);13441 }1344213443 updateYield(); // Policies can change the yield13444}
Calls
- CvGame::getActivePlayer() const
- CvGlobals::getDLLIFace()
- CvGlobals::GetEngineUserInterface()
- CvGlobals::getGame()
- CvGlobals::getPolicyInfo(PolicyTypes)
- CvLuaArgsHandle::CvLuaArgsHandle()
- CvLuaArgsHandle::get() const
- CvLuaArgsHandle::operator->() const
- CvPlayer::canAdoptPolicy(PolicyTypes) const
- CvPlayer::changeJONSCulture(int)
- CvPlayer::ChangeNumFreePolicies(int)
- CvPlayer::ChangeNumFreeTenets(int, bool)
- CvPlayer::DoUpdateNextPolicyCost()
- CvPlayer::GetID() const
- CvPlayer::getNextPolicyCost() const
- CvPlayer::GetNumFreePolicies() const
- CvPlayer::GetNumFreeTenets() const
- CvPlayer::GetPlayerPolicies() const
- CvPlayer::setHasPolicy(PolicyTypes, bool, bool)
- CvPlayer::updateYield()
- CvPlayerPolicies::SetPolicyBranchUnlocked(PolicyBranchTypes, bool, bool)
- CvPolicyEntry::GetLevel() const
- CvPolicyEntry::GetPolicyBranchType() const
ICvEngineScriptSystemArgs1::PushICvEngineUtility1::GetScriptSystemICvUserInterface1::setDirty- LuaSupport::CallHook(ICvEngineScriptSystem1 *, const char *, ICvEngineScriptSystemArgs1 *, bool &)