Hi, gleich mein erstes Thema geht ein wenig ins Detail: Und zwar die Ausbildung, deren Dauer mit der Zahl der bereits abgeschlossenen Ausbildungen zunimmt. Ich finde diese Feature weder realistisch noch dem Spielfluss zutraeglich.
Vorwort:
Dieser Thread vertieft die Informationen aus der Colo Wiki und
http://www.civforum.de/showthread.php?t=55269
Alle Angaben wurden leider noch nicht von Moddern bestaetigt.Macht mich bitte auf Fehler aufmerksam.
Infos fuer Moddereinsteiger:
Variablen in den XML Dateien koennen einfach geaendert werden. Einfachstes Mittel ist hierzu das Notepad.Aenderungen in den CPP Dateien erfordern das Neuerstellen der CVGameCoreDLL.dll (siehe http://www.civforum.de/showthread.php?t=57065)
Die Zahlenangaben der Quellen sind Zeilenangaben. Sowohl in .xml als auch in den .cpp kann die Postion mit dem Notepad(=Editor) angezeigt werden (Ansicht > Statusleiste)
Ausbildung in der Kolonie:
Ich hab beobachtet, dass es reicht, wenn der Lehrer den letzten VOLLSTAENDIGEN Zug vor Ende der Ausbildungszeit INNERHALB der Kolonie verbringt, damit der Schueler den Job annehmen kann
Schwelle= Grundwert * Spielgeschwindigkeit * ((1 + Erhoehung/100) ^ N)
Grundwert: 30 [= EDUCATION_THRESHOLD in Datei XML\GlobalDefines.xml in Zeile 289]
Spielgeschwindigkeit: Maraton 3 Epic 1.5 Normal 1 Quick 0.75
Erhoehung: 20 [= EDUCATION_THRESHOLD_INCREASE in Datei XML\GlobalDefines.xml in
Zeile 285]
N: Zahl der bereits vollstaendig ausgebildeten Kolonisten des Spielers
Hinweis: Mit Patch 1.01f wird nun fuer jede Stadt einzeln gezaehlt.(Siehe Patchnotes)
Ertrag:
Schulhaus:3 College:6 Uni:12 [siehe z. B. XML\Buildings\CIV4BuildingInfos.xml Zeile 2782]
Schuldknecht:-1 Krimineller:-2 KonvertierterUreinwohner: -1
[siehe z. B. \XML\units\CIV4UnitInfos.xml Z 359
Bonus:
die Haelfte [= MAX_REBEL_YIELD_MODIFIER in XML\GlobalDefines.xml Z 712] der
rebelischen Stimmung: bis zu 50%
50% falls Gruendervater(Poltical #11) DeTocqueville vorhanden
Beispiel: Schuldknecht in College: 5 Buecher
Freier Kolonist in Uni mit 100% rebelischer Stimmung und Tocqueville: 24 Buecher
Eine Umwandlung findet statt, sobald der bei jedem Zug gesammelte Ertrag groesser oder gleich der Schwelle ist.
Quelle
1.) Schwelle=Threshold
Die Berechnung der Schwelle findet in CvPlayer::educationThreshold [ Datei CvGameCoreDLL\CvPlayer.cpp Zeile 4822] statt. Die Variable EDUCATION_THRESHOLD wird aus [XML\GlobalDefines.xml Z 285] gelesen. Die Funktion CvPlayer::getEducationThresholdMultiplier ist in [CvGameCoreDLL\CvPlayer.cpp Z 5082] und liefern am Anfang 100 [CvGameCoreDLL\CvPlayer.cpp Z 288] (siehe 3.)
Ausserdem wird die Spielgeschwingikeit beachtet: CvGameSpeedInfo::getGrowthPercent aus [CvGameCoreDLL\CvInfos.cpp Z 6129] ueber CvGameSpeedInfo::read in [CvGameCoreDLL\CvInfos.cpp Z 6172] aus der Datei [XML\GameInfo\CIV4GameSpeeddInfo.xml] iGrowthPercent: Maraton 300 Epic 150 Normal 100 Quick 75
Die Beeinflussung durch das Zeitalter ist konstant 100: CvEraInfo::getGrowthPercent in [CvGameCoreDLL\CvInfos.cpp Z 10741] ueber CvEraInfo::read in [CvGameCoreDLL\CvInfos.cpp Z 10823] aus [XML\GameInfo\CIV4EraInfo.xml Zeile 22] iGrowthPercent = 100
2.) Ertrag=Yield
Der Grundertrag wird in CvCity::getProfessionOutput [CvGameCoreDLL\CvCity.cpp Z 2745] berechnet. CvUnitInfo::getYieldModifier macht in diesen Fall nichts, da es bei keiner Einheit einen prozentualen Bonus gibt(Kein „Meisterstudent“).
CvUnitInfo::getYieldChange [CvGameCoreDLL\Cvinfos.cpp Z 2783:]
liest ueber CvUnitInfo::read [CvGameCoreDLL\Cvinfos.cpp Z 3275]
YieldChanges aus: siehe hierzu z. B. [\XML\units\CIV4UnitInfos.xml Z 359]
CvBuildingInfo::getProfessionOutput [CvGameCoreDLL\Cvinfos.cpp Z 4168]
liest ueber read in [CvGameCoreDLL\Cvinfos.cpp Z 4627]
iProfessionOutput aus XML\Buildiings\CIV4BuildingInfos.xml Zeile 2782 usw
Der Modifikator wird in CvCity::getBaseYieldRateModifier [CvGameCoreDLL\CvCity.cpp Z 3883] berechnet. Eine Reihe von Modifikatoren ist 0. Der REBEL_YIELD_MODIFIER wird entsprehend addiert.
Der ausserdem enthaltene CvPlayer::getYieldRateModifier [CvGameCoreDLL\CvPlayer.cpp Z 6128] wird durch Gruendervater modifiziert:
Gruendervaterzuordnung durch:
CvGame::setFatherTeam [CvGameCoreDLL\CvGame.cpp Z 6447]
CvPlayer:: processFather [CvGameCoreDLL\CvPlayer.cpp Z 4486]
CvPlayer:: processTrait [CvGameCoreDLL\CvPlayer.cpp Z 4363]
Rechnung in 4415:
CvPlayer::changeYieldRateModifier [CvGameCoreDLL\CvPlayer.cpp Z 6148]
Mit Infos aus:
CvTraitInfo::getYieldModifier [CvGameCoreDLL\CvInfos.cpp Z 6447]
durch read [Z 9386] von YieldModifiers in
[XML\Civilizaitons\CIv4Traitinfos.xml Z 2079]
3.) Sammeln=Storage
Jeden Zug wird CvCity::doTurn [CvGameCoreDLL\CvCity.cpp Z 612] aufgerufen, was wiederum CvCity::doYields [CvGameCoreDLL\CvCity.cpp Z 5829] aufruft. im Fall case YIELD_EDUCATION wird Grundertrag*Modifikator der Einheit angerechnet:
CvUnit::getYieldStored und CvUnit::setYieldStored in [CvGameCoreDLL\CvUnit.cpp Z 10695]. Letzteres ueberprueft in Zeile 10727 ob die Schwelle (siehe 1.) ueberschritten worden ist.
Falls wahr, nacheinander: CvDLLButtonPopup:: OnEscape [CvDllButtonPopup.cpp Zeile 385] case BUTTONPOPUP_CHOOSE_EDUCATION
CvCity::doTask [CvGameCoreDLL\CvCity.cpp Z 873] case TASK_EDUCATE
CvCity::educateStudent [CvGameCoreDLL\CvCity.cpp Z 8338]
wandelt die Einheit um und setzt den Multiplikator hoch.
Die Studiengebuehren stecken in der Variablen m_aiSpecialistWeights und Funktionen CvCity::getSpecialistTuition CvCity::doSpecialists.
Von Humbold
Von Humbold (Exploration #9) gibt nur 50% Bonus auf die Hammerproduktion beim Bau von Hochschule und Uni und hat keinen Einfluss auf die Ausbildungsdauer.
Siehe hierzu Civilizations\CIV4TraitInfos.xml Zeile 2327 :
Code:
<BuildingProductionModifiers>
<BuildingProductionModifier>
<BuildingClass>BUILDINGCLASS_COLLEGE</BuildingClass>
<iModifier>50</iModifier>
</BuildingProductionModifier>
<BuildingProductionModifier>
<BuildingClass>BUILDINGCLASS_UNIVERSITY</BuildingClass>
<iModifier>50</iModifier>
</BuildingProductionModifier>
</BuildingProductionModifiers
Indianerausbildung:
Ausbildungsdauer = Grundwert * ( ( 1 + Erhoehung/100 ) ^ (N+1))
Grundwert: Freier Kolonist 3 [= iNativeLearnTime in Datei Units\CIV4UnitInfo.xml in Zeile 130]
Schuldknecht 4
Krimineller 7
Konvertierter Ureinwohner 3 (Wusst ich gar nicht, dass das geht)
( Rest -1 , erzeugt wahrscheinlich einen Lernabbruch)
Erhoehung = 50 [ =NATIVE_TEACH_THRESHOLD_INCREASE in Datei XML\ GlobalDefines.xml in Zeile 301 ]
N ist die Zahl der bereits im Indianerdorf ausgebildeten Kolonisten. Ist vermutlich fuer jedes einzelne Dorf separat, zählt aber auch die Ausbildungen der Europaeischen Mitspieler.
Aenderung durch die Spielgeschwindigkeit findet statt.
Quelle:
Im Programm wird erst geprueft, ob der Kolonist lernen kann ( Bewegungspunkte uebrig, Diplomatie): Funktion CvUnit::canLearn und CvUnit::learn [Datei CvGameCoreDLL\CvUnit.cpp Zeile 3671 und 3692]
Dann gehts in die Funktion CvUnit::doLiveAmongNatives [CvUnit.cpp Zeile 3722], die schraubt zu erst den Multiplikator hoch: setTeachUnitMultiplier [CvGameCoreDLL\CvCity.cpp Zeile 8055], der zu Spielbeginn in [CvCity.cpp Zeile 339] auf 100 gesetzt wurde. Der Wert NATIVE_TEACH_THRESHOLD_INCREASE steht in [XML\ GlobalDefines.xml Zeile 301 ]
Dann verschwindet die Einheit fuer ein paar Züge.
Die Zahl der Zuege wird in CvUnit::getLearnTime [CvUnit.cpp Zeile 3807 ] brechnet. Dabei verwendet: CvUnitInfo::getLearnTime [CvInfos.cpp Z 2599] liest vermutlich ueber die Funktion read [CvInfos.cpp Z 3209] den Wert iNativeLearnTime aus [Units\CIV4UnitInfo.xml Z 130]
getTeachUnitMultiplier wie oben in [CvCity.cpp Z 8050]
Am Schluss der Umwandlung der Einheit CvUnit::doLearn [CvUnit.cpp Z 3746] mit Infos welcher Spezialist rauskommen soll aus CvUnit::getLearnUnitType [CvGameCoreDLL\CvUnit.cpp Z 3764]
Verteilung der Spezialisierungen bei Indianern
Offenbar steht unter Civilizations/ Civ4CivilizationsInfos.xml
mit welcher Wahrscheinlichkeit eine Spezialisierung bei einem Stamm angeboten wird. Das ganze wird wahrscheinlich bei der Kartenerzeugung abgearbeitet.
Fuer eine Wichtung des Tabackpflanzers bei den Tupi gilt in Zeile 1668:
Code:
<TeachUnitClass>
<UnitClassType>UNITCLASS_TOBACCO_PLANTER</UnitClassType>
<iWeight>3</iWeight>
</TeachUnitClass>
Weiteres:
Training on the Job gibts nicht mehr. ( Im original Colo gabs ne Chance von 1/40 , dass ein freier Kolonist Spezialist in dem Beruf wird, den er gerade ausuebt.