Bazaar developer reference

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

Called by