Hooks
static bool BeforeCvLeagueAI_GetDesiredVoteCommitments(CvLeagueAI* self, PlayerTypes eFromPlayer, CvLeagueAI::VoteCommitmentList& result);static void AfterCvLeagueAI_GetDesiredVoteCommitments(CvLeagueAI* self, PlayerTypes eFromPlayer, CvLeagueAI::VoteCommitmentList& result);static CvLeagueAI::VoteCommitmentList ReplaceCvLeagueAI_GetDesiredVoteCommitments(CvLeagueAI::VoteCommitmentList (*original)(CvLeagueAI*, PlayerTypes), CvLeagueAI* self, PlayerTypes eFromPlayer);CivRegisterBefore<CivHooks::CvLeagueAI_GetDesiredVoteCommitments>(host, &BeforeCvLeagueAI_GetDesiredVoteCommitments);CivRegisterAfter<CivHooks::CvLeagueAI_GetDesiredVoteCommitments>(host, &AfterCvLeagueAI_GetDesiredVoteCommitments);CivRegisterReplace<CivHooks::CvLeagueAI_GetDesiredVoteCommitments>(host, &ReplaceCvLeagueAI_GetDesiredVoteCommitments);
Code
7626CvLeagueAI::VoteCommitmentList CvLeagueAI::GetDesiredVoteCommitments(PlayerTypes eFromPlayer)7627{7628 VoteCommitmentList vDesired;76297630 if (GC.getGame().GetGameLeagues()->GetNumActiveLeagues() > 0)7631 {7632 CvLeague* pLeague = GC.getGame().GetGameLeagues()->GetActiveLeague();7633 if (pLeague)7634 {7635 // For human players, make assumptions7636 if (GetPlayer()->isHuman())7637 {7638 EnactProposalList vEnactProposals = pLeague->GetEnactProposals();7639 for (EnactProposalList::iterator it = vEnactProposals.begin(); it != vEnactProposals.end(); ++it)7640 {7641 int iDesiredChoice = LeagueHelpers::CHOICE_NONE;76427643 // Normal Proposals7644 if (it->GetVoterDecision()->GetType() == RESOLUTION_DECISION_YES_OR_NO)7645 {7646 if (it->GetProposalPlayer() == GetPlayer()->GetID())7647 {7648 iDesiredChoice = LeagueHelpers::CHOICE_YES;7649 }7650 if (it->GetEffects()->bEmbargoPlayer && it->GetProposerDecision()->GetDecision() == GetPlayer()->GetID())7651 {7652 iDesiredChoice = LeagueHelpers::CHOICE_NO;7653 }7654 }7655 // Proposals voting on a player7656 else if (it->GetVoterDecision()->GetType() == RESOLUTION_DECISION_ANY_MEMBER ||7657 it->GetVoterDecision()->GetType() == RESOLUTION_DECISION_MAJOR_CIV_MEMBER ||7658 it->GetVoterDecision()->GetType() == RESOLUTION_DECISION_OTHER_MAJOR_CIV_MEMBER)7659 {7660 if (it->GetEffects()->bChangeLeagueHost)7661 {7662 iDesiredChoice = GetPlayer()->GetID();7663 }7664 if (it->GetEffects()->bDiplomaticVictory)7665 {7666 iDesiredChoice = GetPlayer()->GetID();7667 }7668 }7669 else7670 {7671 CvAssertMsg(false, "Unexpected case when evaluating a possible Delegate trade with a human player. Please send Anton your save file and version.");7672 }76737674 if (iDesiredChoice != LeagueHelpers::CHOICE_NONE)7675 {7676 VoteCommitment temp;7677 temp.iResolutionID = it->GetID();7678 temp.iNumVotes = pLeague->GetCoreVotesForMember(eFromPlayer);7679 temp.iVoteChoice = iDesiredChoice;7680 temp.bEnact = true;7681 vDesired.push_back(temp);7682 }7683 }76847685 RepealProposalList vRepealProposals = pLeague->GetRepealProposals();7686 for (RepealProposalList::iterator it = vRepealProposals.begin(); it != vRepealProposals.end(); ++it)7687 {7688 int iDesiredChoice = LeagueHelpers::CHOICE_NONE;76897690 // Normal Proposals7691 if (it->GetRepealDecision()->GetType() == RESOLUTION_DECISION_REPEAL)7692 {7693 if (it->GetProposalPlayer() == GetPlayer()->GetID())7694 {7695 iDesiredChoice = LeagueHelpers::CHOICE_YES;7696 }7697 if (it->GetEffects()->bEmbargoPlayer && it->GetProposerDecision()->GetDecision() == GetPlayer()->GetID())7698 {7699 iDesiredChoice = LeagueHelpers::CHOICE_YES;7700 }7701 }7702 else7703 {7704 CvAssertMsg(false, "Unexpected case when evaluating a possible Delegate trade with a human player. Please send Anton your save file and version.");7705 }77067707 if (iDesiredChoice != LeagueHelpers::CHOICE_NONE)7708 {7709 VoteCommitment temp;7710 temp.iResolutionID = it->GetID();7711 temp.iNumVotes = pLeague->GetCoreVotesForMember(eFromPlayer);7712 temp.iVoteChoice = iDesiredChoice;7713 temp.bEnact = false;7714 vDesired.push_back(temp);7715 }7716 }7717 }7718 // For AI players, use calculated value7719 else7720 {7721 EnactProposalList vEnactProposals = pLeague->GetEnactProposals();7722 for (EnactProposalList::iterator it = vEnactProposals.begin(); it != vEnactProposals.end(); ++it)7723 {7724 std::vector<int> vChoices = pLeague->GetChoicesForDecision(it->GetVoterDecision()->GetType(), eFromPlayer);7725 int iDesiredChoice = LeagueHelpers::CHOICE_NONE;7726 DesireLevels eHighestDesire = DESIRE_NEUTRAL;7727 for (uint i = 0; i < vChoices.size(); i++)7728 {7729 int iChoice = vChoices[i];7730 DesireLevels eDesire = EvaluateVoteForTrade(it->GetID(), iChoice, pLeague->GetCoreVotesForMember(eFromPlayer), /*bRepeal*/false);7731 if (eDesire > eHighestDesire)7732 {7733 iDesiredChoice = iChoice;7734 eHighestDesire = eDesire;7735 }7736 }77377738 if (iDesiredChoice != LeagueHelpers::CHOICE_NONE)7739 {7740 VoteCommitment temp;7741 temp.iResolutionID = it->GetID();7742 temp.iNumVotes = pLeague->GetCoreVotesForMember(eFromPlayer);7743 temp.iVoteChoice = iDesiredChoice;7744 temp.bEnact = true;7745 vDesired.push_back(temp);7746 }7747 }77487749 RepealProposalList vRepealProposals = pLeague->GetRepealProposals();7750 for (RepealProposalList::iterator it = vRepealProposals.begin(); it != vRepealProposals.end(); ++it)7751 {7752 std::vector<int> vChoices = pLeague->GetChoicesForDecision(it->GetRepealDecision()->GetType(), eFromPlayer);7753 int iDesiredChoice = LeagueHelpers::CHOICE_NONE;7754 DesireLevels eHighestDesire = DESIRE_NEUTRAL;7755 for (uint i = 0; i < vChoices.size(); i++)7756 {7757 int iChoice = vChoices[i];7758 DesireLevels eDesire = EvaluateVoteForTrade(it->GetID(), iChoice, pLeague->GetCoreVotesForMember(eFromPlayer), /*bRepeal*/true);7759 if (eDesire > eHighestDesire)7760 {7761 iDesiredChoice = iChoice;7762 eHighestDesire = eDesire;7763 }7764 }77657766 if (iDesiredChoice != LeagueHelpers::CHOICE_NONE)7767 {7768 VoteCommitment temp;7769 temp.iResolutionID = it->GetID();7770 temp.iNumVotes = pLeague->GetCoreVotesForMember(eFromPlayer);7771 temp.iVoteChoice = iDesiredChoice;7772 temp.bEnact = false;7773 vDesired.push_back(temp);7774 }7775 }7776 }7777 }7778 }77797780 return vDesired;7781}