Nächste Frage
Ich fülle eine Struktur struct CombatDetails mit den einzelnen Kampfwerten. Diese Struktur wird in der CyStructInterface1.cpp irgendwie für Python aufbereitet:
Code:
python::class_<CombatDetails>("CombatDetails")
.def_readwrite("iExtraCombatPercent", &CombatDetails::iExtraCombatPercent)
.def_readwrite("iNativeCombatModifierTB", &CombatDetails::iNativeCombatModifierTB)
.def_readwrite("iNativeCombatModifierAB", &CombatDetails::iNativeCombatModifierAB)
...
In der CvUtil.py werden diese Werte verwendet.
Code:
def combatDetailMessageBuilder(cdUnit, ePlayer, iChange):
if (cdUnit.iExtraCombatPercent != 0):
msg=localText.getText("TXT_KEY_COMBAT_MESSAGE_EXTRA_COMBAT_PERCENT",(cdUnit.iExtraCombatPercent * iChange,))
CyInterface().addCombatMessage(ePlayer,msg)
...
def combatMessageBuilder(cdAttacker, cdDefender, iCombatOdds):
if (cdAttacker.eVisualOwner != PlayerTypes.UNKNOWN_PLAYER):
combatMessage = "%s's %s (%.2f)" %(gc.getPlayer(cdAttacker.eVisualOwner).getName(),cdAttacker.sUnitName,cdAttacker.iCurrCombatStr/100.0,)
....
Wo genau geschieht die "Übersetzung" von &CombatDetails::iExtraCombatPercent in cdUnit.iExtraCombatPercent?
Und wo geschieht die Aufteilung zwischen cdUnit, cdAttacker und cdDefender?
Ich suche mir hier einen Wolf und sehe es nicht.
Nachtrag:
Ich sehe, dass es in der CvDLLPython.cpp eine Funktion DllExport void DLLPublishToPython() gibt:
Code:
DllExport void DLLPublishToPython()
{
...
CyStructsPythonInterface1();
...
Bedeutet das, dass alles, was in der oben gezeigten python::class_<CombatDetails>("CombatDetails") definiert wurde, automatisch von CvUtil.py übernommen wird?
Dann bliebe nur noch die Frage, wo Python den Unterschied zwischen cdUnit, cdAttacker und cdDefender ableitet?