/// How much is a Resource worth?
int CvDealAI::GetResourceValue(ResourceTypes eResource, int iResourceQuantity, int iNumTurns, bool bFromMe, PlayerTypes eOtherPlayer)
{
CvAssertMsg(GetPlayer()->GetID() != eOtherPlayer, "DEAL_AI: Trying to check value of a Resource with oneself. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");
int iItemValue = 0;
ResourceUsageTypes eUsage = GC.getResourceInfo(eResource)->getResourceUsage();
// Luxury Resource
if(eUsage == RESOURCEUSAGE_LUXURY)
{
int iHappinessFromResource = GC.getResourceInfo(eResource)->getHappiness();
iItemValue += (iResourceQuantity * iHappinessFromResource * iNumTurns * 2); // Ex: 1 Silk for 4 Happiness * 30 turns * 2 = 240
// If we only have 1 of a Luxury then we value it much more
if(bFromMe)
{
if(GetPlayer()->getNumResourceAvailable(eResource) == 1)
{
iItemValue *= 3;
if(GetPlayer()->GetPlayerTraits()->GetLuxuryHappinessRetention() > 0)
{
iItemValue /= 2;
}
}
}
}
// Strategic Resource
else if(eUsage == RESOURCEUSAGE_STRATEGIC)
{
//tricksy humans trying to sploit us
if(!bFromMe)
{
// if we already have a big surplus of this resource
if(GetPlayer()->getNumResourceAvailable(eResource) > GetPlayer()->getNumCities())
{
iResourceQuantity = 0;
}
else
{
iResourceQuantity = min(max(5,GetPlayer()->getNumCities()), iResourceQuantity);
}
}
if(!GET_TEAM(GetPlayer()->getTeam()).IsResourceObsolete(eResource))
{
iItemValue += (iResourceQuantity * iNumTurns * 150 / 100); // Ex: 5 Iron for 30 turns * 2 = value of 300
}
else
{
iItemValue = 0;
}
}
// Increase value if it's from us and we don't like the guy
if(bFromMe)
{
int iModifier = 0;
// Opinion also matters
switch(GetPlayer()->GetDiplomacyAI()->GetMajorCivOpinion(eOtherPlayer))
{
case MAJOR_CIV_OPINION_ALLY:
iModifier = 100;
break;
case MAJOR_CIV_OPINION_FRIEND:
iModifier = 100;
break;
case MAJOR_CIV_OPINION_FAVORABLE:
iModifier = 100;
break;
case MAJOR_CIV_OPINION_NEUTRAL:
iModifier = 100;
break;
case MAJOR_CIV_OPINION_COMPETITOR:
iModifier = 175;
break;
case MAJOR_CIV_OPINION_ENEMY:
iModifier = 400;
break;
case MAJOR_CIV_OPINION_UNFORGIVABLE:
iModifier = 1000;
break;
default:
CvAssertMsg(false, "DEAL_AI: AI player has no valid Opinion for Resource valuation. Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
iModifier = 100;
break;
}
// Approach is important
switch(GetPlayer()->GetDiplomacyAI()->GetMajorCivApproach(eOtherPlayer, /*bHideTrueFeelings*/ true))
{
case MAJOR_CIV_APPROACH_HOSTILE:
iModifier += 300;
break;
case MAJOR_CIV_APPROACH_GUARDED:
iModifier += 150;
break;
case MAJOR_CIV_APPROACH_AFRAID:
iModifier = 200; // Forced value
break;
case MAJOR_CIV_APPROACH_FRIENDLY:
iModifier = 200; // Forced value
break;
case MAJOR_CIV_APPROACH_NEUTRAL:
iModifier += 100;
break;
default:
CvAssertMsg(false, "DEAL_AI: AI player has no valid Approach for Resource valuation. Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
iModifier += 100;
break;
}
iItemValue *= iModifier;
iItemValue /= 200; // 200 because we've added two mods together
}
return iItemValue;
}