CvPlayerEspionage::CalcPerTurn(int, CvCity *, int)
- Defined in
- CvEspionageClasses.cpp, line 1738
- Class
- CvPlayerEspionage
- Hook name
CivHooks::CvPlayerEspionage_CalcPerTurn
Hooks
static bool BeforeCvPlayerEspionage_CalcPerTurn(CvPlayerEspionage* self, int iSpyState, CvCity* pCity, int iSpyIndex, int& result);static void AfterCvPlayerEspionage_CalcPerTurn(CvPlayerEspionage* self, int iSpyState, CvCity* pCity, int iSpyIndex, int& result);static int ReplaceCvPlayerEspionage_CalcPerTurn(int (*original)(CvPlayerEspionage*, int, CvCity*, int), CvPlayerEspionage* self, int iSpyState, CvCity* pCity, int iSpyIndex);CivRegisterBefore<CivHooks::CvPlayerEspionage_CalcPerTurn>(host, &BeforeCvPlayerEspionage_CalcPerTurn);CivRegisterAfter<CivHooks::CvPlayerEspionage_CalcPerTurn>(host, &AfterCvPlayerEspionage_CalcPerTurn);CivRegisterReplace<CivHooks::CvPlayerEspionage_CalcPerTurn>(host, &ReplaceCvPlayerEspionage_CalcPerTurn);
Code
1737/// CalcPerTurn - How much the spy will do at this task per turn1738int CvPlayerEspionage::CalcPerTurn(int iSpyState, CvCity* pCity, int iSpyIndex)1739{1740 CvAssertMsg(pCity, "pCity is null");1741 switch(iSpyState)1742 {1743 case SPY_STATE_TRAVELLING:1744 {1745 return 1;1746 }1747 break;1748 case SPY_STATE_SURVEILLANCE:1749 {1750 return 1;1751 }1752 break;1753 case SPY_STATE_GATHERING_INTEL:1754 {1755 if(pCity)1756 {1757 PlayerTypes eCityOwner = pCity->getOwner();1758 int iBaseYieldRate = pCity->getYieldRateTimes100(YIELD_SCIENCE, false);1759 iBaseYieldRate *= GC.getESPIONAGE_GATHERING_INTEL_RATE_BASE_PERCENT();1760 iBaseYieldRate *= GC.getGame().getGameSpeedInfo().getSpyRatePercent();1761 iBaseYieldRate /= 10000;1762 int iCityEspionageModifier = pCity->GetEspionageModifier();1763 int iPlayerEspionageModifier = GET_PLAYER(eCityOwner).GetEspionageModifier();1764 int iTheirPoliciesEspionageModifier = GET_PLAYER(eCityOwner).GetPlayerPolicies()->GetNumericModifier(POLICYMOD_STEAL_TECH_SLOWER_MODIFIER);1765 int iMyPoliciesEspionageModifier = m_pPlayer->GetPlayerPolicies()->GetNumericModifier(POLICYMOD_STEAL_TECH_FASTER_MODIFIER);1766 int iFinalModifier = (iBaseYieldRate * (100 + iCityEspionageModifier + iPlayerEspionageModifier + iTheirPoliciesEspionageModifier + iMyPoliciesEspionageModifier)) / 100;17671768 int iResult = max(iFinalModifier, 1);1769 if(iSpyIndex >= 0)1770 {1771 int iSpyRank = m_aSpyList[iSpyIndex].m_eRank;1772 iSpyRank += m_pPlayer->GetCulture()->GetInfluenceMajorCivSpyRankBonus(eCityOwner);1773 iResult *= 100 + (GC.getESPIONAGE_GATHERING_INTEL_RATE_BY_SPY_RANK_PERCENT() * iSpyRank);1774 iResult /= 100;1775 }17761777 return iResult;1778 }1779 }1780 break;1781 case SPY_STATE_RIG_ELECTION:1782 {1783 if(pCity)1784 {1785 int iResult = 1;1786 if(iSpyIndex >= 0)1787 {1788 int iSpyRank = m_aSpyList[iSpyIndex].m_eRank;1789 iSpyRank += m_pPlayer->GetCulture()->GetInfluenceCityStateSpyRankBonus(pCity->getOwner());1790 iResult = (iSpyRank + 1) * (iSpyRank + 1);1791 }1792 return iResult;1793 }1794 }1795 break;1796 case SPY_STATE_COUNTER_INTEL:1797 {1798 return 0;1799 }1800 break;1801 case SPY_STATE_MAKING_INTRODUCTIONS:1802 {1803 return 1;1804 }1805 break;1806 case SPY_STATE_SCHMOOZE:1807 {1808 return 0;1809 }1810 break;1811 }18121813 CvAssertMsg(false, "CalcPerTurn cannot handle that iSpyState");1814 return -1;1815}
Calls
BaseVector::operator[]- CvCity::GetEspionageModifier() const
- CvCity::getOwner() const
- CvCity::getYieldRateTimes100(YieldTypes, bool) const
- CvGame::getGameSpeedInfo() const
- CvGameSpeedInfo::getSpyRatePercent() const
- CvGlobals::getESPIONAGE_GATHERING_INTEL_RATE_BASE_PERCENT()
- CvGlobals::getESPIONAGE_GATHERING_INTEL_RATE_BY_SPY_RANK_PERCENT()
- CvGlobals::getGame()
- CvPlayer::GetCulture() const
- CvPlayer::GetEspionageModifier() const
- CvPlayer::GetPlayerPolicies() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerCulture::GetInfluenceCityStateSpyRankBonus(PlayerTypes) const
- CvPlayerCulture::GetInfluenceMajorCivSpyRankBonus(PlayerTypes) const
- CvPlayerPolicies::GetNumericModifier(PolicyModifierType)
std::max