@koma:
Ich gebe dir mal ein Beispiel, wie ich die ein oder andere Codestelle anpassen würde.
Stelle bei iRefuseToTalkWarThreshold, wo nur der relative zeitliche Spielverlauf berücksichtigt wird:
Anpassung mittels CvGameAI::AI_adjustedTurn(int iTurn) :Code:if (isNative()) { iRefuseDuration *= 2; int iGameTurns = GC.getGameINLINE().getEstimateEndTurn(); int iCurrentTurn = GC.getGameINLINE().getGameTurn(); if (!GET_TEAM(getTeam()).AI_isChosenWar((GET_PLAYER(ePlayer).getTeam()))) { iCurrentTurn += iGameTurns / 2; } iRefuseDuration *= std::max(0, iCurrentTurn - iGameTurns / 12); iRefuseDuration /= iGameTurns; }
Jetzt hast du an dieser Stelle folgendes:Code:if (isNative()) { iRefuseDuration *= 2; int iGameTurns = GC.getGameINLINE().AI_adjustedTurn(GC.getGameINLINE().getEstimateEndTurn()); int iCurrentTurn = GC.getGameINLINE().AI_adjustedTurn(GC.getGameINLINE().getGameTurn()); if (!GET_TEAM(getTeam()).AI_isChosenWar((GET_PLAYER(ePlayer).getTeam()))) { iCurrentTurn += iGameTurns / 2; } iRefuseDuration *= std::max(0, iCurrentTurn - iGameTurns / 12); iRefuseDuration /= iGameTurns; }
Lösung, die sowohl den relativen zeitlichen Spielfortschritt berücksichtig, wie auch den potentiellen Wachtumsfortschritt, den ein Spieler in dieser Zeit erreichen kann.
Einverstanden ?
(Oder siehst du einen Denkfehler.)
----------------------
Nehmen wir mal ein paar XML-Einstellungen als Beispiel.
Einstellungsbeispiel 1:
<iGrowthPercent>100</iGrowthPercent>
<iTrainPercent>100</iTrainPercent>
<iConstructPercent>100</iConstructPercent>
<iTurnsPerIncrement>900</iTurnsPerIncrement>
Einstellungsbeispiel 2:
<iGrowthPercent>200</iGrowthPercent>
<iTrainPercent>200</iTrainPercent>
<iConstructPercent>200</iConstructPercent>
<iTurnsPerIncrement>1800</iTurnsPerIncrement>
Eine Spielsituation in Beispiel 1 bei 10 Runden, sollte nun mit einer Spielsituation in Beispiel 2 mit 20 Runden vergleichbar sein.
----------------------
Und ja, mir ist bewusst, dass wir duchgehend von 300 Runden auf 900+ Runden erhöht haben, ohne die anderen Werte entsprechend anzupassen.
Das halte ich aber nach wie vor nicht für kritisch, wenn man dafür sorgt, dass der Spieler auch die volle Spieldauer ausnutzen kann,
sprich man der KI beibringt bei der längeren Spieldauer auch etwas später den Unabhängigkeitskrieg zu suchen.
Die Werte sollen ja lediglich dafür sorgen, das gewisse Faktoren darauf angepasst sind, wie weit das Spiel bereits fortgeschritten ist.
Wenn du aber unbedingt möchtest, dann habe ich auch gegen diese Variante nichts einzuwenden:
(Bitte nach rechts scrollen, da gibt es nochmal eine Änderung in rot.)
Hierbei würde sich die KI bei jeder Spieldauer gleich verhalten.Code:if (isNative()) { iRefuseDuration *= 2; int iGameTurns = GC.getGameINLINE().AI_adjustedTurn(GC.getGameINLINE().getEstimateEndTurn() * 300 / GC.getGameINLINE().getGameTurn()); int iCurrentTurn = GC.getGameINLINE().AI_adjustedTurn(GC.getGameINLINE().getGameTurn() * 300 / GC.getGameINLINE().getGameTurn()); if (!GET_TEAM(getTeam()).AI_isChosenWar((GET_PLAYER(ePlayer).getTeam()))) { iCurrentTurn += iGameTurns / 2; } iRefuseDuration *= std::max(0, iCurrentTurn - iGameTurns / 12); iRefuseDuration /= iGameTurns; }
(Mit 300 als durch Vanilla gegebenen Ausgangswert fürs Balancing.)
Die einzig andere Stelle, die ich sehe, die man noch ähnlich anpassen sollte ist folgende:
Wie ich sehe, hast du ja bereits an diversen Stellen eine Anpassung mit " / 3 " vorgenommen.Code:iPeaceRand *= GC.getGameINLINE().getGameTurn() + GC.getGameINLINE().getEstimateEndTurn() / 5; iPeaceRand /= std::max(1, GC.getGameINLINE().getEstimateEndTurn());
Die könnte man aber gegen ein allgemeiner gültiges:
austauschen, damit das bei späteren Szenarien auch noch passt.Code:* 300 / GC.getGameINLINE().getGameTurn()
Da wäre man doch innerhalb kürzester Zeit fast ohne Risiko damit durch ?
(Mit 4-Augen-Prinzip zum Check.)





Zitieren


)

)
Die Umsetzung kostet mich keine 20 min (im Gegensatz zur Diskussion hier). Deswegen würde ich das gerne erstmal so probieren wollen. Ihr könnt dann die DLL testen und auf Unstimmigkeiten hinweisen. Dadurch nehmt ihr mir ein Teil der Arbeit ab und ich habe so mehr Zeit für andere Dinge.

