Warum sollte Civ da Unterschiede machen? Denke mal, dass Inselwege nur prozentuale Boni darauf geben.
Hab jetzt auch ne Python-Lösung gefunden, muss ich aber auch noch testen.
Warum sollte Civ da Unterschiede machen? Denke mal, dass Inselwege nur prozentuale Boni darauf geben.
Hab jetzt auch ne Python-Lösung gefunden, muss ich aber auch noch testen.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Ich meine ich hätte mal gelesen, TradeRoutes gäbe es nur international von Hauptstadt zu Hauptstadt. Die normalen innerhalb deiner eigenen Städte zur Verteilung der Resourcen etc., zählen mWn nicht zu den hier behandelten TradeRoutes. Sonst würde der PlayerTypes Parameter bei isTrade ja auch wenig Sinn machen.
Irgendwo muss man aber doch Zugriff auf sämtliche oder auf die anderen haben.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Keine Ahnung, vielleicht irre ich mich ja auch.
Also die Python Lösung geht schon mal nicht.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Hab mich mal ein bisschen durchgewühlt. Hier meine (subjektiven) Erkenntnisse zu den Civ4 (Handels-)Routen:
Es gibt zwei Arten von Handel, internationalen Handel (nur zwischen Hauptstädten) und "nationalen" Handel zur Verteilung der Resourcen innerhalb des eigenen Gebiets.
Der internationale Handel wird im Stadtbildschirm oben links angezeigt, er gibt standardmäßig nur Gold, ist aber leicht wie oben gezeigt zu ändern.
Der 'nationale' Handel zum internen Austausch von Rohstoffen findet über so genannte "PlotGroups" statt. Jedesmal wenn eine Straße/Schiene gebaut wird, wird dieses Feld zu einer Plotgruppe hinzugefügt. Eine Stadt lässt bei der Gründung automatisch eine Straße/Schiene entstehen, wodurch dieses Feld auch zu der Gruppe hinzugefügt wird. Ist nun auf einem dieser Felder eine bestimmte Resource verfügbar, verfügen automatisch alle Felder dieser Gruppe über dieselbe Resource. Desweiteren gibt es noch eine Gruppe für Küsten, bzw. eine für Meeresfelder, glaube ich. Diese Gruppen sind nur innerhalb der eigenen Grenzen gültig. (Bei den Wassergruppen bin ich mir da nicht so sicher.) Folglich muss jede Zivilisation ihre eigenen Gruppen haben.
Ich hoffe ich konnte etwas 'aufklären'.
D.h. man bekommt keinen Kommerz für eigene Städte, sondern nur, wenn mindestens ein weiterer Gegner im Spiel ist?
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Nach meinem bisherigen Erkenntnisstand, . Ich lasse mich aber gerne eines besseren belehren. Aber, wer spielt schon ohne Gegner?
Ich hab jetzt aus der Star Trek Mod ne Trait Info geklaut, der den Zugriff allerdings mit Python regelt aufgrund eines Gebäudes. Den speziellen Code hab ich entfernt. Er legt die Boni bei Rundenbeginn fest. Übrig geblieben ist:
PHP-Code:
// Cybah - BASE: TradeRouteYieldChange START
CvPlayer& pPlayer = GET_PLAYER(getOwner());
int iYield = 0;
for (int iYieldLoop = 0; iYieldLoop < NUM_YIELD_TYPES; iYieldLoop++)
{
iYield = 0;
//Traits with trade routes yields
for (int iTrait = 0; iTrait < GC.getNumTraitInfos(); iTrait++)
{
TraitTypes eTrait = (TraitTypes)iTrait;
if (pPlayer.hasTrait(eTrait))
{
for (int iTradeCity = 0; iTradeCity < getTradeRoutes(); iTradeCity++)
{
CvCity* pTradeCity = getTradeCity(iTradeCity);
if (pTradeCity != NULL)
{
iYield += GC.getTraitInfo(eTrait).getTradeRouteYieldChanges(iYieldLoop);
}
}
}
}
}
// Cybah - BASE: TradeRouteYieldChange END
Wenn ich wüsste, wie man den Traitbonus in updateTradeRoutes einbaut, dann kann der ganze Mist hier weg, der überprüft ja jede Runde jede einzelne Handelsroute. Hast ne Idee? Geht im Prinzip nur um "GC.getTraitInfo(eTrait).getTradeRouteYieldChanges".
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Vermutlich muss man
entsprechend verändern. oder calculateTradeYield. irgendwie gibts tausend funktionen.PHP-Code:
for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
{
setTradeYield(((YieldTypes)iI), calculateTradeYield(((YieldTypes)iI), iTradeProfit)); // XXX could take this out if handled when CvPlotGroup changes...
}
edit: vermutlich tatsächlich eher hier oder?
PHP-Code:
int CvCity::calculateTradeYield(YieldTypes eIndex, int iTradeProfit) const
{
if ((iTradeProfit > 0) && (GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex) > 0))
{
return ((iTradeProfit * GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex)) / 100);
}
else
{
return 0;
}
}
void CvCity::setTradeYield(YieldTypes eIndex, int iNewValue)
{
int iOldValue;
FAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");
FAssertMsg(eIndex < NUM_YIELD_TYPES, "eIndex expected to be < NUM_YIELD_TYPES");
iOldValue = getTradeYield(eIndex);
if (iOldValue != iNewValue)
{
m_aiTradeYield[eIndex] = iNewValue;
FAssert(getTradeYield(eIndex) >= 0);
changeBaseYieldRate(eIndex, (iNewValue - iOldValue));
}
}
Geändert von Cybah (02. August 2011 um 15:22 Uhr)
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
nevermind. muss nochmal was ändern.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
so vielleicht? das wäre billig.
PHP-Code:
int CvCity::calculateTradeYield(YieldTypes eIndex, int iTradeProfit) const
{
if ((iTradeProfit > 0) && ((GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex) > 0) || (GET_PLAYER(getOwnerINLINE()).getTradeYieldChange(eIndex) > 0)))
{
return ((iTradeProfit * GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex)) / 100 + GET_PLAYER(getOwnerINLINE()).getTradeYieldChange(eIndex));
}
else
{
return 0;
}
}
edit: dann würde man wohl auch aus 0er handelswegen was bekommen oder? hm mal testen obs überhaupt kompilierbar ist.
edit:
was hat die AI jetzt damit zu tun?PHP-Code:
1>CvCity.cpp(9239) : error C2039: 'getTradeYieldChange' : is not a member of 'CvPlayerAI'
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Ich glaube ich habe das Problem nicht ganz verstanden, so wie ich das jetzt verstehe, kann man das einfach bei CvCity::updateTradeRoutes () ganz zum Schluss folgendes einfügen:Ich glaube ich versteh das Problem nicht ganz.PHP-Code:
//neu
if (getOwner().hasTrait(GC.getInfoTypeForString("TRAIT_XXX")))//Owner der Stadt ermitteln und gucken ob er den entsprechenden Trait besitzt. :sz:
{
setTradeYield((YieldTypes)GC.getInfoTypeForString("YIELD_PRODUCTION"), 5);
}
Ich hab mir jetzt die Arbeit gemacht und in CIV4TraitInfos.xml TradeYieldChanges eingebaut. Jetzt muss ich im SDK darauf zugreifen, damit ich den Wert (bei dir 5) nicht immer im SDK ändern muss, wenn ich mal was ändern will.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)