int CvCity::GetFaithPurchaseCost(UnitTypes eUnit, bool bIncludeBeliefDiscounts)
{
VALIDATE_OBJECT
int iCost = 0;
CvPlayer &kPlayer = GET_PLAYER(m_eOwner);
CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);
if(pkUnitInfo == NULL)
{
//Should never happen
return iCost;
}
// LATE-GAME GREAT PERSON
SpecialUnitTypes eSpecialUnitGreatPerson = (SpecialUnitTypes) GC.getInfoTypeForString("SPECIALUNIT_PEOPLE");
if (pkUnitInfo->GetSpecialUnitType() == eSpecialUnitGreatPerson)
{
// We must be into the industrial era
if(kPlayer.GetCurrentEra() >= GC.getInfoTypeForString("ERA_INDUSTRIAL", true /*bHideAssert*/))
{
// Must be proper great person for our civ
const UnitClassTypes eUnitClass = (UnitClassTypes)pkUnitInfo->GetUnitClassType();
if (eUnitClass != NO_UNITCLASS)
{
const UnitTypes eThisPlayersUnitType = (UnitTypes)kPlayer.getCivilizationInfo().getCivilizationUnits(eUnitClass);
ReligionTypes eReligion = kPlayer.GetReligions()->GetReligionCreatedByPlayer();
if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_PROPHET", true /*bHideAssert*/)) //here
{
// Can't be bought if didn't start religion
if (eReligion == NO_RELIGION)
{
iCost = -1;
}
else
{
iCost = kPlayer.GetReligions()->GetCostNextProphet(true /*bIncludeBeliefDiscounts*/, false /*bAdjustForSpeedDifficulty*/);
}
}
else if (eThisPlayersUnitType == eUnit)
{
PolicyBranchTypes eBranch = NO_POLICY_BRANCH_TYPE;
int iNum = 0;
// Check social policy tree
if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_WRITER", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_AESTHETICS", true /*bHideAssert*/);
iNum = kPlayer.getWritersFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_ARTIST", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_AESTHETICS", true /*bHideAssert*/);
iNum = kPlayer.getArtistsFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_MUSICIAN", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_AESTHETICS", true /*bHideAssert*/);
iNum = kPlayer.getMusiciansFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_SCIENTIST", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_RATIONALISM", true /*bHideAssert*/);
iNum = kPlayer.getScientistsFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_MERCHANT", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_COMMERCE", true /*bHideAssert*/);
iNum = kPlayer.getMerchantsFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_ENGINEER", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_TRADITION", true /*bHideAssert*/);
iNum = kPlayer.getEngineersFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_GREAT_GENERAL", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_HONOR", true /*bHideAssert*/);
iNum = kPlayer.getGeneralsFromFaith();
}
else if (eUnitClass == GC.getInfoTypeForString("UNITCLASS_GREAT_ADMIRAL", true /*bHideAssert*/))
{
eBranch = (PolicyBranchTypes)GC.getInfoTypeForString("POLICY_BRANCH_EXPLORATION", true /*bHideAssert*/);
iNum = kPlayer.getAdmiralsFromFaith();
}
bool bAllUnlockedByBelief = false;
const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eReligion, getOwner());
if(pReligion)
{
if (pReligion->m_Beliefs.IsFaithPurchaseAllGreatPeople())
{
bAllUnlockedByBelief = true;
}
}
if (bAllUnlockedByBelief || (eBranch != NO_POLICY_BRANCH_TYPE && kPlayer.GetPlayerPolicies()->IsPolicyBranchFinished(eBranch) && !kPlayer.GetPlayerPolicies()->IsPolicyBranchBlocked(eBranch)))
{
iCost = GC.getGame().GetGameReligions()->GetFaithGreatPersonNumber(iNum + 1);
}
}
}
}
}