Hmm... 
Wie wäre es denn, in der GlobalDefinesAlt.xml eine neue Variable einzurichten, die am Ende der Kostenberechnung mit sich selbst addiert wird?
Sagen wir, sie erhält den Wert "3".
Code:
<Define>
<DefineName>TRANSPORT_COST_INCREASE</DefineName>
<iDefineIntVal>3</iDefineIntVal>
</Define>
Dieser XML-Wert wird dann in eine Variable eingelesen: iTransportCostIncrease
Dann könnte die ganze Funktion so aussehen:
Code:
if (isHuman() && !bSkipPopup)
{
CvDiploParameters* pDiplo = new CvDiploParameters(GET_PLAYER(getOwnerINLINE()).getParent());
pDiplo->setDiploComment((DiploCommentTypes)GC.getInfoTypeForString("AI_DIPLOCOMMENT_TREASURE_TRANSPORT"));
pDiplo->setData(getID());
int iCommission = GC.getDefineINT("KING_TRANSPORT_TREASURE_COMISSION");
int iKingsDemand = 0;
int iEffectiveTaxRate = 0;
iEffectiveTaxRate = std::max(iTransportCostIncrease, GET_PLAYER(getOwnerINLINE()).getTaxRate());
iKingsDemand = ((iCommission / 5) + iEffectiveTaxRate);
if (iKingsDemand < iCommission)
{
pDiplo->addDiploCommentVariable(iKingsDemand);
int iAmount = getYieldStored();
iAmount -= (iAmount * iKingsDemand) / 100;
iAmount -= (iAmount * GET_PLAYER(getOwnerINLINE()).getTaxRate()) / 100;
pDiplo->addDiploCommentVariable(iAmount);
iTransportCostIncrease += iTransportCostIncrease;
}
else
{
pDiplo->addDiploCommentVariable(iCommission);
int iAmount = getYieldStored();
iAmount -= (iAmount * iCommission) / 100;
iAmount -= (iAmount * GET_PLAYER(getOwnerINLINE()).getTaxRate()) / 100;
pDiplo->addDiploCommentVariable(iAmount);
}
pDiplo->setAIContact(true);
gDLL->beginDiplomacy(pDiplo, getOwnerINLINE());
}
D.h., beim ersten Schatztransport (ich unterstelle mal in allen Fällen 2% Steuerrate; der Schatz soll 1000 Gold wert sein) würde die Berechnung so laufen:
iCommission = 50
iKingsDemand = 0
iEffectiveTaxRate = der höhere Wert von iTransportCostIncrease (zu diesem Zeitpunkt=3) bzw. von TaxRate (zu diesem Zeitpunkt =2, also
iEffectiveTaxRate = 3
Dann geht es weiter mit iKingsDemand = (50/5) + 3 = 13
iAmount = 1000
iAmount = iAmount - (iAmount *13) / 100 = 1000 -130 = 870
iAmount = iAmount - (iAmount * TaxRate) / 100 = 870 - 17,4 = 852,6 => 852 (Integerwert)
Für den ersten Schatz erhält der Spieler 852 Gold anstatt der standardmäßigen 490 Gold. Klarer Vorteil also.
Nun wird iTransportCostIncrease mit sich selbst addiert, steigt also vom per XML festgelegten Wert 3 auf 6
Gleiche Berechnungsweise wie eben:
iKingsDemand = (50/5) + 6 = 16
iAmount = 1000
iAmount = iAmount - (iAmount *16) / 100 = 1000 -160 = 840
iAmount = iAmount - (iAmount * TaxRate) / 100 = 840 - 16,8 = 823,2 => 823 (Integerwert)
Für den zweiten Schatz erhält der Spieler noch 823 Gold statt der standardmäßigen 490 Gold. Immer noch ein klarer Vorteil.
Wiederum die Addition iTransportCostIncrease + iTransportCostIncrease => 6 + 6 = 12
Gleiche Berechnungsweise wie eben:
iKingsDemand = (50/5) + 12 = 22
iAmount = 1000
iAmount = iAmount - (iAmount *22) / 100 = 1000 -220= 780
iAmount = iAmount - (iAmount * TaxRate) / 100 = 780 - 15,6 = 764,4 => 764 (Integerwert)
Für den dritten Schatz erhält der Spieler noch 764 Gold statt der standardmäßigen 490 Gold. Immer noch ein klarer Vorteil.
Und zum vierten: iTransportCostIncrease + iTransportCostIncrease => 12 + 12 = 24
Daraus werden dann 646,8 für den vierten Schatz, was schon nicht mehr so viel mehr ist als das Standardentgelt.
Und beim fünften Mal wären es dann schon der Standardwert, denn nun ist (50/5)+(24+24) > 50
D.h., die ersten vier Schätze bringen folgende Beträge (Standardwert in Klammern dahinter)
852 (490)
823 (490)
764 (490)
646 (490)
=======
3085 (1960) => 157,4% von den standardmäßigen Erlösen bei Königsabholung.
Ggf. könnte man das ganze per Excel-Sheet noch ein bisschen "feintunen".