Seite 105 von 180 ErsteErste ... 55595101102103104105106107108109115155 ... LetzteLetzte
Ergebnis 1.561 bis 1.575 von 2699

Thema: Der SDK-Fragen-Thread

  1. #1561
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    danke, ich sollte besser schlafen gehen. Das ist also der Name des vectors im Python-Code. Ich dachte, ich muss den irgend was aus den C++ Code sein.

  2. #1562
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Es ging gestern abends nie, trotz das es richtig sein sollte. Der Grund ist wohl schon wieder das Problem, was mich schon lange stört. Die imports funktionieren mit Boost und Python nicht richtig. Ich muss immer explizit eine Datei aus den Ordern angeben. Was kann es für Ursachen dafür geben bzw. was kann ich vergessen haben? Es wurde von VS 2010 nicht als Fehler angezeigt, nur beim kompilieren. So wurde vector_indexing_suite nicht beim kompilieren gefunden. Nachdem ich den expliziten Pfad angegeben habe, ging es.

    Desweiteren habe ich noch folgenden Warnung beim Kompilieren:

    Code:
    1> Boost-1.32.0\include\boost\python\suite\indexing\detail\indexing_suite_detail.hpp(593): warning C4018: '>' : signed/unsigned mismatch
    1>          Boost-1.32.0\include\boost\python\suite\indexing\detail\indexing_suite_detail.hpp(575) : while compiling class-template member function 'void boost::python::detail::slice_helper<Container,DerivedPolicies,ProxyHandler,Data,Index>::base_get_slice_data(Container &,PySliceObject *,Index &,Index &)'
    1>          with
    1>          [
    1>              Container=std::vector<UnitTypes>,
    1>              DerivedPolicies=boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,
    1>              ProxyHandler=boost::python::indexing_suite<std::vector<UnitTypes>,boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,false>::proxy_handler,
    1>              Data=std::vector<UnitTypes>::value_type,
    1>              Index=std::vector<UnitTypes>::size_type
    1>          ]
    1>          Boost-1.32.0\include\boost\python\suite\indexing\indexing_suite.hpp(204) : see reference to class template instantiation 'boost::python::detail::slice_helper<Container,DerivedPolicies,ProxyHandler,Data,Index>' being compiled
    1>          with
    1>          [
    1>              Container=std::vector<UnitTypes>,
    1>              DerivedPolicies=boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,
    1>              ProxyHandler=boost::python::indexing_suite<std::vector<UnitTypes>,boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,false>::proxy_handler,
    1>              Data=std::vector<UnitTypes>::value_type,
    1>              Index=std::vector<UnitTypes>::size_type
    1>          ]
    1>          Boost-1.32.0\include\boost\python\suite\indexing\indexing_suite.hpp(202) : while compiling class-template member function 'boost::python::api::object boost::python::indexing_suite<Container,DerivedPolicies,NoProxy>::base_get_item(boost::python::back_reference<T>,PyObject *)'
    1>          with
    1>          [
    1>              Container=std::vector<UnitTypes>,
    1>              DerivedPolicies=boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,
    1>              NoProxy=false,
    1>              T=std::vector<UnitTypes> &
    1>          ]
    1>          Boost-1.32.0\include\boost\python\suite\indexing\vector_indexing_suite.hpp(50) : see reference to class template instantiation 'boost::python::indexing_suite<Container,DerivedPolicies,NoProxy>' being compiled
    1>          with
    1>          [
    1>              Container=std::vector<UnitTypes>,
    1>              DerivedPolicies=boost::python::detail::final_vector_derived_policies<std::vector<UnitTypes>,false>,
    1>              NoProxy=false
    1>          ]
    1>          CvDLLPython.cpp(48) : see reference to class template instantiation 'boost::python::vector_indexing_suite<Container>' being compiled
    1>          with
    1>          [
    1>              Container=std::vector<UnitTypes>
    1>          ]
    1>          CvDLLPython.cpp(108) : see reference to function template instantiation 'void createPyVector<UnitTypes>(const char *)' being compiled
    1>Boost-1.32.0\include\boost\python\suite\indexing\detail\indexing_suite_detail.hpp(615): warning C4018: '>' : signed/unsigned mismatch
    Problem ist, es gibt einen Typ Long zum Vergleich in den Includes der vector_indexing_suite. Der ist mit unsigned int als Index nicht ganz kombatibel.

    Code:
    #include "CvGameCoreDLL.h"
    #include "CyMap.h"
    #include "CyPlayer.h"
    #include "CyPlot.h"
    #include "CyGame.h"
    #include "CyUnit.h"
    #include "CyGlobalContext.h"
    #include "CyCity.h"
    #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
    
    void CyCityPythonInterface1(python::class_<CyCity>& x);
    void CyPlotPythonInterface1(python::class_<CyPlot>& x);
    void CyPlayerPythonInterface1(python::class_<CyPlayer>& x);
    void CyPlayerPythonInterface2(python::class_<CyPlayer>& x);
    void CyUnitPythonInterface1(python::class_<CyUnit>& x);
    void CyGlobalContextPythonInterface1(python::class_<CyGlobalContext>& x);
    void CyGlobalContextPythonInterface2(python::class_<CyGlobalContext>& x);
    void CyGlobalContextPythonInterface3(python::class_<CyGlobalContext>& x);
    void CyGlobalContextPythonInterface4(python::class_<CyGlobalContext>& x);
    // rucivfan_code_optimization rco[
    void CyGlobalContextPythonInterface5(python::class_<CyGlobalContext>& x);
    // ]rucivfan_code_optimization rco
    void CyGamePythonInterface();
    void CyRandomPythonInterface();
    void CyEnumsPythonInterface();
    void CyTeamPythonInterface();
    void CyAreaPythonInterface();
    void CyStructsPythonInterface1();
    void CyMapPythonInterface();
    void CyMapGeneratorPythonInterface();
    void CyInfoPythonInterface1();
    void CyInfoPythonInterface2();
    void CyInfoPythonInterface3();
    void CySelectionGroupInterface();
    void CyArtFileMgrPythonInterface();
    void CyGameTextMgrInterface();
    void CyHallOfFameInterface();
    void CyGameCoreUtilsPythonInterface();
    void CyMessageControlInterface();
    // rucivfan_code_helper rch[
    void CyCityPythonInterface2(python::class_<CyCity>& x);
    // ]rucivfan_code_helper rch
    
    // rucivfan_upgrade_optimization ruo[
    template<typename T>
    void createPyVector(const char* name)
    {
    	python::class_<std::vector<T> >(name)
    		.def(python::init<std::size_t>())
    		.def(boost::python::vector_indexing_suite<std::vector<T> >())
    		;
    }
    // ]rucivfan_upgrade_optimization ruo
    
    //
    //
    //
    
    DllExport void DLLPublishToPython()
    {
    	CyEnumsPythonInterface();
    	CyGamePythonInterface();
    	CyRandomPythonInterface();
    	CyTeamPythonInterface();
    	CyAreaPythonInterface();
    	CyStructsPythonInterface1();
    	CyMapPythonInterface();
    	CyMapGeneratorPythonInterface();
    	CySelectionGroupInterface();
    	CyArtFileMgrPythonInterface();
    	CyGameTextMgrInterface();
    	CyInfoPythonInterface1();
    	CyInfoPythonInterface2();
    	CyInfoPythonInterface3();
    	CyHallOfFameInterface();
    	CyGameCoreUtilsPythonInterface();
    	CyMessageControlInterface();
    
    	//
    	// large interfaces which can be split across files if need be
    	//
    	python::class_<CyCity> city ("CyCity");		// define city class
    	CyCityPythonInterface1(city);				// publish it's methods
    	// rucivfan_code_helper rch[
    	CyCityPythonInterface2(city);				// publish it's methods
    	// ]rucivfan_code_helper rch
    
    	python::class_<CyPlayer> player ("CyPlayer");	// define player class
    	CyPlayerPythonInterface1(player);				// publish it's methods
    	CyPlayerPythonInterface2(player);				// publish it's methods
    
    	python::class_<CyUnit> unit ("CyUnit");		// define unit class
    	CyUnitPythonInterface1(unit);				// publish it's methods
    
    	python::class_<CyPlot> plot ("CyPlot");		// define plot class
    	CyPlotPythonInterface1(plot);				// publish it's methods
    
    	python::class_<CyGlobalContext> gc ("CyGlobalContext");	// define globals class 
    	CyGlobalContextPythonInterface1(gc);					// publish it's methods 
    	CyGlobalContextPythonInterface2(gc);					// publish it's methods
    	CyGlobalContextPythonInterface3(gc);					// publish it's methods
    	CyGlobalContextPythonInterface4(gc);					// publish it's methods
    	// rucivfan_code_optimization rco[
    	CyGlobalContextPythonInterface5(gc);					// publish it's methods
    	// ]rucivfan_code_optimization rco
    
    	// rucivfan_upgrade_optimization ruo[
    	createPyVector<UnitTypes>("vector");
    	// ]rucivfan_upgrade_optimization ruo
    }
    An sonsten funktioniert es. Mein Test im Spiel verlief zufriedenstellend.

    Code:
    #pragma warning( push )
    #pragma warning( disable : 4018 )
    #include "boost/python/suite/indexing/vector_indexing_suite.hpp"
    #pragma warning( pop )
    Ich hätte aber schon gerne die Warnung weg. Aber alle möglichen Warnungen mit der Fehlernummer dieses imports sollen nicht gleich weg sein.
    Geändert von rucivfan (22. Mai 2014 um 09:54 Uhr)

  3. #1563
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von rucivfan Beitrag anzeigen
    Code:
    #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
    Das ist schon richtig so. Damit können Datein den selben Namen haben, solange die Ordernamen verschieden sind.

    Was das signed/unsigned angeht, weis ich auch nicht weiter. Ich hatte da keine Warnungen, war aber auch mit Boot 1.55. Darum habe ich mal in den Code geschaut und vergleichen, und mir ist da nichts aufgefallen...

  4. #1564
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    In der Datei CvXMLLoadUtilitySet.cpp ist ja die Ladereihenfolge der .xml-Dateien angegebenen:
    Code:
    	LoadGlobalClassInfo(GC.getGameSpeedInfo(), "CIV4GameSpeedInfo", "GameInfo", "Civ4GameSpeedInfo/GameSpeedInfos/GameSpeedInfo", false);
    	LoadGlobalClassInfo(GC.getTurnTimerInfo(), "CIV4TurnTimerInfo", "GameInfo", "Civ4TurnTimerInfo/TurnTimerInfos/TurnTimerInfo", false);
    	LoadGlobalClassInfo(GC.getWorldInfo(), "CIV4WorldInfo", "GameInfo", "Civ4WorldInfo/WorldInfos/WorldInfo", false);
    	LoadGlobalClassInfo(GC.getClimateInfo(), "CIV4ClimateInfo", "GameInfo", "Civ4ClimateInfo/ClimateInfos/ClimateInfo", false);
    	LoadGlobalClassInfo(GC.getSeaLevelInfo(), "CIV4SeaLevelInfo", "GameInfo", "Civ4SeaLevelInfo/SeaLevelInfos/SeaLevelInfo", false);
    	LoadGlobalClassInfo(GC.getAdvisorInfo(), "CIV4AdvisorInfos", "Interface", "Civ4AdvisorInfos/AdvisorInfos/AdvisorInfo", false);
    	LoadGlobalClassInfo(GC.getTerrainInfo(), "CIV4TerrainInfos", "Terrain", "Civ4TerrainInfos/TerrainInfos/TerrainInfo", false);
    	LoadGlobalClassInfo(GC.getEraInfo(), "CIV4EraInfos", "GameInfo", "Civ4EraInfos/EraInfos/EraInfo", false);
    	LoadGlobalClassInfo(GC.getUnitClassInfo(), "CIV4UnitClassInfos", "Units", "Civ4UnitClassInfos/UnitClassInfos/UnitClassInfo", false);
    	LoadGlobalClassInfo(GC.getSpecialistInfo(), "CIV4SpecialistInfos", "GameInfo", "Civ4SpecialistInfos/SpecialistInfos/SpecialistInfo", false);
    	LoadGlobalClassInfo(GC.getVoteSourceInfo(), "CIV4VoteSourceInfos", "GameInfo", "Civ4VoteSourceInfos/VoteSourceInfos/VoteSourceInfo", false);
    	LoadGlobalClassInfo(GC.getTechInfo(), "CIV4TechInfos", "Technologies", "Civ4TechInfos/TechInfos/TechInfo", true, &CvDLLUtilityIFaceBase::createTechInfoCacheObject);
    	LoadGlobalClassInfo(GC.getFeatureInfo(), "Civ4FeatureInfos", "Terrain", "Civ4FeatureInfos/FeatureInfos/FeatureInfo", false);
    	LoadGlobalClassInfo(GC.getReligionInfo(), "CIV4ReligionInfo", "GameInfo", "Civ4ReligionInfo/ReligionInfos/ReligionInfo", false);
    	LoadGlobalClassInfo(GC.getAnimationCategoryInfo(), "CIV4AnimationInfos", "Units", "Civ4AnimationInfos/AnimationCategories/AnimationCategory", false);
    	LoadGlobalClassInfo(GC.getAnimationPathInfo(), "CIV4AnimationPathInfos", "Units", "Civ4AnimationPathInfos/AnimationPaths/AnimationPath", false);
    	LoadGlobalClassInfo(GC.getPromotionInfo(), "CIV4PromotionInfos", "Units", "Civ4PromotionInfos/PromotionInfos/PromotionInfo", true, &CvDLLUtilityIFaceBase::createPromotionInfoCacheObject);
    	LoadGlobalClassInfo(GC.getTraitInfo(), "CIV4TraitInfos", "Civilizations", "Civ4TraitInfos/TraitInfos/TraitInfo", false);
    	LoadGlobalClassInfo(GC.getGoodyInfo(), "CIV4GoodyInfo", "GameInfo", "Civ4GoodyInfo/GoodyInfos/GoodyInfo", false);
    	LoadGlobalClassInfo(GC.getHandicapInfo(), "CIV4HandicapInfo", "GameInfo", "Civ4HandicapInfo/HandicapInfos/HandicapInfo", false, &CvDLLUtilityIFaceBase::createHandicapInfoCacheObject);
    	LoadGlobalClassInfo(GC.getCursorInfo(), "CIV4CursorInfo", "GameInfo", "Civ4CursorInfo/CursorInfos/CursorInfo", false);
    	LoadGlobalClassInfo(GC.getCivicOptionInfo(), "CIV4CivicOptionInfos", "GameInfo", "Civ4CivicOptionInfos/CivicOptionInfos/CivicOptionInfo", false);
    	LoadGlobalClassInfo(GC.getUpkeepInfo(), "CIV4UpkeepInfo", "GameInfo", "Civ4UpkeepInfo/UpkeepInfos/UpkeepInfo", false);
    	LoadGlobalClassInfo(GC.getHurryInfo(), "CIV4HurryInfo", "GameInfo", "Civ4HurryInfo/HurryInfos/HurryInfo", false);
    	LoadGlobalClassInfo(GC.getSpecialBuildingInfo(), "CIV4SpecialBuildingInfos", "Buildings", "Civ4SpecialBuildingInfos/SpecialBuildingInfos/SpecialBuildingInfo", false);
    	LoadGlobalClassInfo(GC.getCultureLevelInfo(), "CIV4CultureLevelInfo", "GameInfo", "Civ4CultureLevelInfo/CultureLevelInfos/CultureLevelInfo", false);
    	LoadGlobalClassInfo(GC.getBonusClassInfo(), "CIV4BonusClassInfos", "Terrain", "Civ4BonusClassInfos/BonusClassInfos/BonusClassInfo", false);
    	LoadGlobalClassInfo(GC.getVictoryInfo(), "CIV4VictoryInfo", "GameInfo", "Civ4VictoryInfo/VictoryInfos/VictoryInfo", false);
    	LoadGlobalClassInfo(GC.getBonusInfo(), "CIV4BonusInfos", "Terrain", "Civ4BonusInfos/BonusInfos/BonusInfo", false, &CvDLLUtilityIFaceBase::createBonusInfoCacheObject);
    	LoadGlobalClassInfo(GC.getCorporationInfo(), "CIV4CorporationInfo", "GameInfo", "Civ4CorporationInfo/CorporationInfos/CorporationInfo", false);
    	LoadGlobalClassInfo(GC.getRouteInfo(), "Civ4RouteInfos", "Misc", "Civ4RouteInfos/RouteInfos/RouteInfo", false);
    	LoadGlobalClassInfo(GC.getImprovementInfo(), "CIV4ImprovementInfos", "Terrain", "Civ4ImprovementInfos/ImprovementInfos/ImprovementInfo", true, &CvDLLUtilityIFaceBase::createImprovementInfoCacheObject);
    	LoadGlobalClassInfo(GC.getBuildingClassInfo(), "CIV4BuildingClassInfos", "Buildings", "Civ4BuildingClassInfos/BuildingClassInfos/BuildingClassInfo", false);
    	LoadGlobalClassInfo(GC.getBuildingInfo(), "CIV4BuildingInfos", "Buildings", "Civ4BuildingInfos/BuildingInfos/BuildingInfo", false, &CvDLLUtilityIFaceBase::createBuildingInfoCacheObject);
    Wenn ich jetzt an dieser Reihenfolge irgend etwas ändern würde, sagen wir, EraInfo.xml und UnitClassInfo.xml (die ja direkt hintereinander kommen und bei denen in der zweiten auf keinen Wert aus der ersten zugegriffen wird), mit welchen Problemen müsste ich dann rechnen?
    Konkret möchte ich es umgehen, mit diesem "GC.getBuildingClassInfo((BuildingClassTypes)i).readPass3();" Konstrukt zu arbeiten, zugleich würde ich gerne in der EraInfo.xml jeweils einen Einheitentyp festlegen, der unter bestimmten Umständen als Söldnereinheit dieser Ära erscheint, z.B. bei den Stammesdörfern.

  5. #1565
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Ein guter Rat readPass3() zu verwenden ist, ist tausend mal besser wie die Ladereihenfolge zu ändern. Wenn man immer wieder neues einbaut, steht man immer wieder vor dem Problem der Ladereihenfolge. Es macht daher wenig Sinn, umbedingt die Ladereihenfolge ändern. Ab irgend einen Punkt geht es nämlich wirklich nicht ohne readPass3().

    Grundsätzlich sollte es aber keine Probleme geben, wenn UnitClassInfo.xml keinen Wert aus der EraInfo.xml benötigt, wenn man das Laden der UnitClassInfo.xml vor der EraInfo.xml schiebt. Aber man muss auch sicher sein, dass dem so ist. Es geht in der Regel viel schneller mit readPass3() zu arbeiten als sowas zu überprüfen, vor allem wenn man die readPass3() Methode nicht mehr anlegen muss, weil sie es schon ist.
    Geändert von rucivfan (29. Mai 2014 um 12:15 Uhr)

  6. #1566
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Jetzt für den konkreten Fall, müsste ich da mehr tun als
    Code:
    	LoadGlobalClassInfo(GC.getEraInfo(), "CIV4EraInfos", "GameInfo", "Civ4EraInfos/EraInfos/EraInfo", false);
    	LoadGlobalClassInfo(GC.getUnitClassInfo(), "CIV4UnitClassInfos", "Units", "Civ4UnitClassInfos/UnitClassInfos/UnitClassInfo", false);
    //entspricht der unveränderten Ladereihenfolge
    	for (int i=0; i < GC.getNumEraInfos(); ++i)
    	{
    		GC.getEraInfo((EraTypes)i).readPass3();
    	}
    Vorausgesetzt, getNumEraInfos() existiert?

    Vermutlich muss ich dann doch vorher noch
    , &CvDLLUtilityIFaceBase::createUnitClassInfoCacheObject);
    einfügen, und dies vorher noch definieren, oder?

  7. #1567
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    getNumEraInfos() existert immer. Das Problem ist eher, wie lautet die Anzahl. Da vorher die EraInfo eingelesen wurde, sollte das der Zahl der Einträge Erainfo entsprechen.

    Viel wichtiger ist aber, exisitert die readPass3() für die EraInfo-Klasse? Diese muss man je Cv...Info-Klassen selbst definieren, wenn sie noch nicht angelegt wurde. Du kannst dich an bestehenden readPass3() Methoden orientieren.

    Zitat Zitat von Kathy Beitrag anzeigen
    Vermutlich muss ich dann doch vorher noch einfügen, und dies vorher noch definieren, oder?
    Das hat damit nichts zu tun.

  8. #1568
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Also, irgend etwas habe ich falsch gemacht. Wenn ich den Mod nun lade, passiert gar nichts mehr. Der Computer läd und läd und dann hört er auf, Geräusche zu machen, aber es kommt kein Spiel.

  9. #1569
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Das hört sich anch einer endloschleife an. Poste doch mal den kompletten Code, wenn möglich.

  10. #1570
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Ich bin nicht sicher, ob es eine Endlosschleife ist, denn das Spiel, also der Ladevorgang, läuft nicht mehr weiter, weder im Taskmanager unter Prozesse noch sonst irgendwo. Ich kann die Gamecore.dll danach überschreiben, was normalerweise blockiert würde, weil darauf zugegriffen wird.

    Hier der Code:
    CvXMLLoadUtilitySet.cpp:
    Code:
    bool CvXMLLoadUtility::LoadPreMenuGlobals()
    {
    	if (!CreateFXml())
    	{
    		return false;
    	}
    
    	LoadGlobalClassInfo(GC.getGameSpeedInfo(), "CIV4GameSpeedInfo", "GameInfo", "Civ4GameSpeedInfo/GameSpeedInfos/GameSpeedInfo", false);
    	LoadGlobalClassInfo(GC.getTurnTimerInfo(), "CIV4TurnTimerInfo", "GameInfo", "Civ4TurnTimerInfo/TurnTimerInfos/TurnTimerInfo", false);
    	LoadGlobalClassInfo(GC.getWorldInfo(), "CIV4WorldInfo", "GameInfo", "Civ4WorldInfo/WorldInfos/WorldInfo", false);
    	LoadGlobalClassInfo(GC.getClimateInfo(), "CIV4ClimateInfo", "GameInfo", "Civ4ClimateInfo/ClimateInfos/ClimateInfo", false);
    	LoadGlobalClassInfo(GC.getSeaLevelInfo(), "CIV4SeaLevelInfo", "GameInfo", "Civ4SeaLevelInfo/SeaLevelInfos/SeaLevelInfo", false);
    	LoadGlobalClassInfo(GC.getAdvisorInfo(), "CIV4AdvisorInfos", "Interface", "Civ4AdvisorInfos/AdvisorInfos/AdvisorInfo", false);
    	LoadGlobalClassInfo(GC.getTerrainInfo(), "CIV4TerrainInfos", "Terrain", "Civ4TerrainInfos/TerrainInfos/TerrainInfo", false);
    	LoadGlobalClassInfo(GC.getEraInfo(), "CIV4EraInfos", "GameInfo", "Civ4EraInfos/EraInfos/EraInfo", false);
    	LoadGlobalClassInfo(GC.getUnitClassInfo(), "CIV4UnitClassInfos", "Units", "Civ4UnitClassInfos/UnitClassInfos/UnitClassInfo", false);
    //Kathy Era Mercenaires Beginn
    	for (int i=0; i < GC.getNumEraInfos(); ++i)
    	{
    		GC.getEraInfo((EraTypes)i).readPass3();
    	}
    //Kathy Era Mercenaires End
    	LoadGlobalClassInfo(GC.getSpecialistInfo(), "CIV4SpecialistInfos", "GameInfo", "Civ4SpecialistInfos/SpecialistInfos/SpecialistInfo", false);
    	LoadGlobalClassInfo(GC.getVoteSourceInfo(), "CIV4VoteSourceInfos", "GameInfo", "Civ4VoteSourceInfos/VoteSourceInfos/VoteSourceInfo", false);
    	LoadGlobalClassInfo(GC.getTechInfo(), "CIV4TechInfos", "Technologies", "Civ4TechInfos/TechInfos/TechInfo", true, &CvDLLUtilityIFaceBase::createTechInfoCacheObject);
    	LoadGlobalClassInfo(GC.getFeatureInfo(), "Civ4FeatureInfos", "Terrain", "Civ4FeatureInfos/FeatureInfos/FeatureInfo", false);
    	LoadGlobalClassInfo(GC.getReligionInfo(), "CIV4ReligionInfo", "GameInfo", "Civ4ReligionInfo/ReligionInfos/ReligionInfo", false);
    	LoadGlobalClassInfo(GC.getAnimationCategoryInfo(), "CIV4AnimationInfos", "Units", "Civ4AnimationInfos/AnimationCategories/AnimationCategory", false);
    	LoadGlobalClassInfo(GC.getAnimationPathInfo(), "CIV4AnimationPathInfos", "Units", "Civ4AnimationPathInfos/AnimationPaths/AnimationPath", false);
    	LoadGlobalClassInfo(GC.getPromotionInfo(), "CIV4PromotionInfos", "Units", "Civ4PromotionInfos/PromotionInfos/PromotionInfo", true, &CvDLLUtilityIFaceBase::createPromotionInfoCacheObject);
    	LoadGlobalClassInfo(GC.getTraitInfo(), "CIV4TraitInfos", "Civilizations", "Civ4TraitInfos/TraitInfos/TraitInfo", false);
    	LoadGlobalClassInfo(GC.getGoodyInfo(), "CIV4GoodyInfo", "GameInfo", "Civ4GoodyInfo/GoodyInfos/GoodyInfo", false);
    	LoadGlobalClassInfo(GC.getHandicapInfo(), "CIV4HandicapInfo", "GameInfo", "Civ4HandicapInfo/HandicapInfos/HandicapInfo", false, &CvDLLUtilityIFaceBase::createHandicapInfoCacheObject);
    	LoadGlobalClassInfo(GC.getCursorInfo(), "CIV4CursorInfo", "GameInfo", "Civ4CursorInfo/CursorInfos/CursorInfo", false);
    	LoadGlobalClassInfo(GC.getCivicOptionInfo(), "CIV4CivicOptionInfos", "GameInfo", "Civ4CivicOptionInfos/CivicOptionInfos/CivicOptionInfo", false);
    	LoadGlobalClassInfo(GC.getUpkeepInfo(), "CIV4UpkeepInfo", "GameInfo", "Civ4UpkeepInfo/UpkeepInfos/UpkeepInfo", false);
    	LoadGlobalClassInfo(GC.getHurryInfo(), "CIV4HurryInfo", "GameInfo", "Civ4HurryInfo/HurryInfos/HurryInfo", false);
    	LoadGlobalClassInfo(GC.getSpecialBuildingInfo(), "CIV4SpecialBuildingInfos", "Buildings", "Civ4SpecialBuildingInfos/SpecialBuildingInfos/SpecialBuildingInfo", false);
    	LoadGlobalClassInfo(GC.getCultureLevelInfo(), "CIV4CultureLevelInfo", "GameInfo", "Civ4CultureLevelInfo/CultureLevelInfos/CultureLevelInfo", false);
    	LoadGlobalClassInfo(GC.getBonusClassInfo(), "CIV4BonusClassInfos", "Terrain", "Civ4BonusClassInfos/BonusClassInfos/BonusClassInfo", false);
    	LoadGlobalClassInfo(GC.getVictoryInfo(), "CIV4VictoryInfo", "GameInfo", "Civ4VictoryInfo/VictoryInfos/VictoryInfo", false);
    	LoadGlobalClassInfo(GC.getBonusInfo(), "CIV4BonusInfos", "Terrain", "Civ4BonusInfos/BonusInfos/BonusInfo", false, &CvDLLUtilityIFaceBase::createBonusInfoCacheObject);
    	LoadGlobalClassInfo(GC.getCorporationInfo(), "CIV4CorporationInfo", "GameInfo", "Civ4CorporationInfo/CorporationInfos/CorporationInfo", false);
    	LoadGlobalClassInfo(GC.getRouteInfo(), "Civ4RouteInfos", "Misc", "Civ4RouteInfos/RouteInfos/RouteInfo", false);
    	LoadGlobalClassInfo(GC.getImprovementInfo(), "CIV4ImprovementInfos", "Terrain", "Civ4ImprovementInfos/ImprovementInfos/ImprovementInfo", true, &CvDLLUtilityIFaceBase::createImprovementInfoCacheObject);
    	LoadGlobalClassInfo(GC.getBuildingClassInfo(), "CIV4BuildingClassInfos", "Buildings", "Civ4BuildingClassInfos/BuildingClassInfos/BuildingClassInfo", false);
    	LoadGlobalClassInfo(GC.getBuildingInfo(), "CIV4BuildingInfos", "Buildings", "Civ4BuildingInfos/BuildingInfos/BuildingInfo", false, &CvDLLUtilityIFaceBase::createBuildingInfoCacheObject);
    	for (int i=0; i < GC.getNumBuildingClassInfos(); ++i)
    	{
    		GC.getBuildingClassInfo((BuildingClassTypes)i).readPass3();
    	}
    	LoadGlobalClassInfo(GC.getSpecialUnitInfo(), "CIV4SpecialUnitInfos", "Units", "Civ4SpecialUnitInfos/SpecialUnitInfos/SpecialUnitInfo", false);
    	LoadGlobalClassInfo(GC.getProjectInfo(), "CIV4ProjectInfo", "GameInfo", "Civ4ProjectInfo/ProjectInfos/ProjectInfo", true);
    	LoadGlobalClassInfo(GC.getCivicInfo(), "CIV4CivicInfos", "GameInfo", "Civ4CivicInfos/CivicInfos/CivicInfo", false, &CvDLLUtilityIFaceBase::createCivicInfoCacheObject);
    	for (int i=0; i < GC.getNumVoteSourceInfos(); ++i)
    	{
    		GC.getVoteSourceInfo((VoteSourceTypes)i).readPass3();
    	}
    	LoadGlobalClassInfo(GC.getLeaderHeadInfo(), "CIV4LeaderHeadInfos", "Civilizations", "Civ4LeaderHeadInfos/LeaderHeadInfos/LeaderHeadInfo", false, &CvDLLUtilityIFaceBase::createLeaderHeadInfoCacheObject);
    	LoadGlobalClassInfo(GC.getColorInfo(), "CIV4ColorVals", "Interface", "Civ4ColorVals/ColorVals/ColorVal", false);
    	LoadGlobalClassInfo(GC.getPlayerColorInfo(), "CIV4PlayerColorInfos", "Interface", "Civ4PlayerColorInfos/PlayerColorInfos/PlayerColorInfo", false);
    	LoadGlobalClassInfo(GC.getEffectInfo(), "CIV4EffectInfos", "Misc", "Civ4EffectInfos/EffectInfos/EffectInfo", false);
    	LoadGlobalClassInfo(GC.getEntityEventInfo(), "CIV4EntityEventInfos", "Units", "Civ4EntityEventInfos/EntityEventInfos/EntityEventInfo", false);
    	LoadGlobalClassInfo(GC.getBuildInfo(), "CIV4BuildInfos", "Units", "Civ4BuildInfos/BuildInfos/BuildInfo", false);
    	LoadGlobalClassInfo(GC.getUnitInfo(), "CIV4UnitInfos", "Units", "Civ4UnitInfos/UnitInfos/UnitInfo", false, &CvDLLUtilityIFaceBase::createUnitInfoCacheObject);
    	for (int i=0; i < GC.getNumUnitClassInfos(); ++i)
    	{
    		GC.getUnitClassInfo((UnitClassTypes)i).readPass3();
    	}
    	LoadGlobalClassInfo(GC.getUnitArtStyleTypeInfo(), "CIV4UnitArtStyleTypeInfos", "Civilizations", "Civ4UnitArtStyleTypeInfos/UnitArtStyleTypeInfos/UnitArtStyleTypeInfo", false);
    	LoadGlobalClassInfo(GC.getCivilizationInfo(), "CIV4CivilizationInfos", "Civilizations", "Civ4CivilizationInfos/CivilizationInfos/CivilizationInfo", true, &CvDLLUtilityIFaceBase::createCivilizationInfoCacheObject);
    	LoadGlobalClassInfo(GC.getHints(), "CIV4Hints", "GameInfo", "Civ4Hints/HintInfos/HintInfo", false);
    	LoadGlobalClassInfo(GC.getMainMenus(), "CIV4MainMenus", "Art", "Civ4MainMenus/MainMenus/MainMenu", false);
    	LoadGlobalClassInfo(GC.getSlideShowInfo(), "CIV4SlideShowInfos", "Interface", "Civ4SlideShowInfos/SlideShowInfos/SlideShowInfo", false);
    	LoadGlobalClassInfo(GC.getSlideShowRandomInfo(), "CIV4SlideShowRandomInfos", "Interface", "Civ4SlideShowRandomInfos/SlideShowRandomInfos/SlideShowRandomInfo", false);
    	LoadGlobalClassInfo(GC.getWorldPickerInfo(), "CIV4WorldPickerInfos", "Interface", "Civ4WorldPickerInfos/WorldPickerInfos/WorldPickerInfo", false);
    	LoadGlobalClassInfo(GC.getSpaceShipInfo(), "Civ4SpaceShipInfos", "Interface", "Civ4SpaceShipInfos/SpaceShipInfos/SpaceShipInfo", false);
    
    
    	LoadGlobalClassInfo(GC.getYieldInfo(), "CIV4YieldInfos", "Terrain", "Civ4YieldInfos/YieldInfos/YieldInfo", false);
    	LoadGlobalClassInfo(GC.getCommerceInfo(), "CIV4CommerceInfo", "GameInfo", "Civ4CommerceInfo/CommerceInfos/CommerceInfo", false);
    	LoadGlobalClassInfo(GC.getGameOptionInfo(), "CIV4GameOptionInfos", "GameInfo", "Civ4GameOptionInfos/GameOptionInfos/GameOptionInfo", false);
    	LoadGlobalClassInfo(GC.getMPOptionInfo(), "CIV4MPOptionInfos", "GameInfo", "Civ4MPOptionInfos/MPOptionInfos/MPOptionInfo", false);
    	LoadGlobalClassInfo(GC.getForceControlInfo(), "CIV4ForceControlInfos", "GameInfo", "Civ4ForceControlInfos/ForceControlInfos/ForceControlInfo", false);
    
    	// add types to global var system
    	for (int i = 0; i < GC.getNumCursorInfos(); ++i)
    	{
    		int iVal;
    		CvString szType = GC.getCursorInfo((CursorTypes)i).getType();
    		if (GC.getDefinesVarSystem()->GetValue(szType, iVal))
    		{
    			char szMessage[1024];
    			sprintf(szMessage, "cursor type already set? \n Current XML file is: %s", GC.getCurrentXMLFile().GetCString());
    			gDLL->MessageBox(szMessage, "XML Error");
    		}
    		GC.getDefinesVarSystem()->SetValue(szType, i);
    	}
    
    	// Check Playables
    	for (int i=0; i < GC.getNumCivilizationInfos(); ++i)
    	{
    		// if the civilization is playable we will increment the playable var
    		if (GC.getCivilizationInfo((CivilizationTypes) i).isPlayable())
    		{
    			GC.getNumPlayableCivilizationInfos() += 1;
    		}
    
    		// if the civilization is playable by AI increments num playable
    		if (GC.getCivilizationInfo((CivilizationTypes) i).isAIPlayable())
    		{
    			GC.getNumAIPlayableCivilizationInfos() += 1;
    		}
    	}
    
    	UpdateProgressCB("GlobalOther");
    
    	DestroyFXml();
    
    	return true;
    }
    CvInfos.cpp
    Code:
    CvEraInfo::CvEraInfo() :
    m_iStartingUnitMultiplier(0),
    	//Kathy Beginn Era Mercenaries
    m_MercenaryUnitclass(NO_UNITCLASS),
    	//Kathy End Era Mercenaries
    m_iStartingDefenseUnits(0),
    m_iStartingWorkerUnits(0),
    m_iStartingExploreUnits(0),
    m_iAdvancedStartPoints(0),
    m_iStartingGold(0),
    m_iFreePopulation(0),
    m_iStartPercent(0),
    m_iGrowthPercent(0),
    m_iTrainPercent(0),
    m_iConstructPercent(0),
    m_iCreatePercent(0),
    m_iResearchPercent(0),
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/21/09                                jdog5000      */
    /*                                                                                              */
    /* Tech Diffusion                                                                               */
    /************************************************************************************************/
    m_iTechCostModifier(0),
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    m_iBuildPercent(0),
    m_iImprovementPercent(0),
    m_iGreatPeoplePercent(0),
    m_iAnarchyPercent(0),
    m_iEventChancePerTurn(0),
    m_iSoundtrackSpace(0),
    m_iNumSoundtracks(0),
    m_bNoGoodies(false),
    m_bNoAnimals(false),
    m_bNoBarbUnits(false),
    m_bNoBarbCities(false),
    m_bFirstSoundtrackFirst(false),
    m_paiCitySoundscapeSciptIds(NULL),
    m_paiSoundtracks(NULL)
    {
    }
    bool CvEraInfo::read(CvXMLLoadUtility* pXML)
    {
    	if (!CvInfoBase::read(pXML))
    	{
    		return false;
    	}
    
    	pXML->GetChildXmlValByName(&m_bNoGoodies, "bNoGoodies");
    	//Kathy Beginn Mercenary Era
    	pXML->GetChildXmlValByName(&m_MercenaryUnitclass, "MercenaryUnitclass");
    	//Kathy End Mercenary Era
    	pXML->GetChildXmlValByName(&m_bNoAnimals, "bNoAnimals");
    	pXML->GetChildXmlValByName(&m_bNoBarbUnits, "bNoBarbUnits");
    	pXML->GetChildXmlValByName(&m_bNoBarbCities, "bNoBarbCities");
    	pXML->GetChildXmlValByName(&m_iStartingUnitMultiplier, "iStartingUnitMultiplier");
    	pXML->GetChildXmlValByName(&m_iStartingDefenseUnits, "iStartingDefenseUnits");
    	pXML->GetChildXmlValByName(&m_iStartingWorkerUnits, "iStartingWorkerUnits");
    	pXML->GetChildXmlValByName(&m_iStartingExploreUnits, "iStartingExploreUnits");
    	pXML->GetChildXmlValByName(&m_iAdvancedStartPoints, "iAdvancedStartPoints");
    	pXML->GetChildXmlValByName(&m_iStartingGold, "iStartingGold");
    	pXML->GetChildXmlValByName(&m_iFreePopulation, "iFreePopulation");
    	pXML->GetChildXmlValByName(&m_iStartPercent, "iStartPercent");
    	pXML->GetChildXmlValByName(&m_iGrowthPercent, "iGrowthPercent");
    	pXML->GetChildXmlValByName(&m_iTrainPercent, "iTrainPercent");
    	pXML->GetChildXmlValByName(&m_iConstructPercent, "iConstructPercent");
    	pXML->GetChildXmlValByName(&m_iCreatePercent, "iCreatePercent");
    	pXML->GetChildXmlValByName(&m_iResearchPercent, "iResearchPercent");
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/21/09                                jdog5000      */
    /*                                                                                              */
    /* Tech Diffusion                                                                               */
    /************************************************************************************************/
    	pXML->GetChildXmlValByName(&m_iTechCostModifier, "iTechCostModifier");
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    	pXML->GetChildXmlValByName(&m_iBuildPercent, "iBuildPercent");
    	pXML->GetChildXmlValByName(&m_iImprovementPercent, "iImprovementPercent");
    	pXML->GetChildXmlValByName(&m_iGreatPeoplePercent, "iGreatPeoplePercent");
    	pXML->GetChildXmlValByName(&m_iAnarchyPercent, "iAnarchyPercent");
    	pXML->GetChildXmlValByName(&m_iEventChancePerTurn, "iEventChancePerTurn");
    	pXML->GetChildXmlValByName(&m_iSoundtrackSpace, "iSoundtrackSpace");
    	pXML->GetChildXmlValByName(&m_bFirstSoundtrackFirst, "bFirstSoundtrackFirst");
    	pXML->GetChildXmlValByName(m_szAudioUnitVictoryScript, "AudioUnitVictoryScript");
    	pXML->GetChildXmlValByName(m_szAudioUnitDefeatScript, "AudioUnitDefeatScript");
    
    	if (gDLL->getXMLIFace()->SetToChildByTagName(pXML->GetXML(), "EraInfoSoundtracks"))
    	{
    		CvString* pszSoundTrackNames = NULL;
    		pXML->SetStringList(&pszSoundTrackNames, &m_iNumSoundtracks);
    
    		if (m_iNumSoundtracks > 0)
    		{
    			m_paiSoundtracks = new int[m_iNumSoundtracks];
    
    			int j;
    			for (j=0;j<m_iNumSoundtracks;j++)
    			{
    				m_paiSoundtracks[j] = ((!gDLL->getAudioDisabled()) ? gDLL->getAudioTagIndex(pszSoundTrackNames[j], AUDIOTAG_2DSCRIPT) : -1);
    			}
    		}
    		else
    		{
    			m_paiSoundtracks = NULL;
    		}
    
    		gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
    
    		SAFE_DELETE_ARRAY(pszSoundTrackNames);
    	}
    
    	pXML->SetVariableListTagPairForAudioScripts(&m_paiCitySoundscapeSciptIds, "CitySoundscapes", GC.getCitySizeTypes(), sizeof(GC.getCitySizeTypes((CitySizeTypes)0)));
    
    	return true;
    }
    
    //Kathy BEginn Mercenary Era
    bool CvEraInfo::readPass3()
    {
    	if (m_aszExtraXMLforPass3.size() < 1)
    	{
    		FAssert(false);
    		return false;
    	}
    
    	m_MercenaryUnitclass = GC.getInfoTypeForString(m_aszExtraXMLforPass3[0]);
    	m_aszExtraXMLforPass3.clear();
    
    	return true;
    }
    //Kathy End Mercenary Era
    CvInfos.h
    Code:
    class CvEraInfo : 
    	public CvInfoBase
    {
    public:
    
    	CvEraInfo();
    	virtual ~CvEraInfo();
    	
    	int getStartingUnitMultiplier() const;		//	Exposed to Python
    	//Kathy Beginn Mercenary Era
    	int getMercenaryUnitclass() const;		//	Exposed to Python
    	//Kathy End Mercenary Era
    	int getStartingDefenseUnits() const;			//	Exposed to Python
    	int getStartingWorkerUnits() const;				//	Exposed to Python
    	int getStartingExploreUnits() const;			//	Exposed to Python
    	int getAdvancedStartPoints() const;					//	Exposed to Python
    	int getStartingGold() const;					//	Exposed to Python
    	int getFreePopulation() const;				//	Exposed to Python
    	int getStartPercent() const;					//	Exposed to Python
    	int getGrowthPercent() const;					//	Exposed to Python
    	int getTrainPercent() const;					//	Exposed to Python
    	int getConstructPercent() const;			//	Exposed to Python
    	int getCreatePercent() const;					//	Exposed to Python
    	int getResearchPercent() const;				//	Exposed to Python
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/21/09                                jdog5000      */
    /*                                                                                              */
    /* Tech Diffusion                                                                               */
    /************************************************************************************************/
    	int getTechCostModifier() const;
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    	int getBuildPercent() const;					//	Exposed to Python
    	int getImprovementPercent() const;		//	Exposed to Python
    	int getGreatPeoplePercent() const;		//	Exposed to Python
    	int getAnarchyPercent() const;				//	Exposed to Python
    	int getEventChancePerTurn() const;				//	Exposed to Python
    	int getSoundtrackSpace() const;				//	Exposed to Python
    	int getNumSoundtracks() const;				//	Exposed to Python
    	const TCHAR* getAudioUnitVictoryScript() const;				//	Exposed to Python
    	const TCHAR* getAudioUnitDefeatScript() const;				//	Exposed to Python
    
    	bool isNoGoodies() const;					//	Exposed to Python
    	bool isNoAnimals() const;					//	Exposed to Python
    	bool isNoBarbUnits() const;				//	Exposed to Python
    	bool isNoBarbCities() const;			//	Exposed to Python
    	bool isFirstSoundtrackFirst() const;			//	Exposed to Python
    
    	// Arrays
    
    	int getSoundtracks(int i) const;			
    	int getCitySoundscapeSciptId(int i) const;			
    
    	bool read(CvXMLLoadUtility* pXML);
    	//Kathy Beginn Era Mercenaries
    	bool readPass3();
    	//Kathy End Era Mercenaries
    
    protected:
    
    	int m_iStartingUnitMultiplier;
    	//Kathy Beginn Era Mercenaries
    	int m_MercenaryUnitclass;
    	//Kathy End Era Mercenaries
    	int m_iStartingDefenseUnits;
    	int m_iStartingWorkerUnits;
    	int m_iStartingExploreUnits;
    	int m_iAdvancedStartPoints;
    	int m_iStartingGold;
    	int m_iFreePopulation;
    	int m_iStartPercent;
    	int m_iGrowthPercent;
    	int m_iTrainPercent;
    	int m_iConstructPercent;
    	int m_iCreatePercent;
    	int m_iResearchPercent;
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/21/09                                jdog5000      */
    /*                                                                                              */
    /* Tech Diffusion                                                                               */
    /************************************************************************************************/
    	int m_iTechCostModifier;
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    	int m_iBuildPercent;
    	int m_iImprovementPercent;
    	int m_iGreatPeoplePercent;
    	int m_iAnarchyPercent;
    	int m_iEventChancePerTurn;
    	int m_iSoundtrackSpace;
    	int m_iNumSoundtracks;
    	CvString m_szAudioUnitVictoryScript;
    	CvString m_szAudioUnitDefeatScript;
    
    	bool m_bNoGoodies;
    	bool m_bNoAnimals;
    	bool m_bNoBarbUnits;
    	bool m_bNoBarbCities;
    	bool m_bFirstSoundtrackFirst;
    
    	// Arrays
    
    	int* m_paiSoundtracks;
    	int* m_paiCitySoundscapeSciptIds;
    
    };
    CyInfoInterface3.cpp
    Code:
    	python::class_<CvEraInfo, python::bases<CvInfoBase> >("CvEraInfo")
    		.def("getStartingUnitMultiplier", &CvEraInfo::getStartingUnitMultiplier, "int () -")
    		//Kathy Mercenary Era Beginn
    		.def("getMercenaryUnitclass", &CvEraInfo::getMercenaryUnitclass, "int () -")
    		//Kathy Mercenary Era Beginn
    		.def("getStartingDefenseUnits", &CvEraInfo::getStartingDefenseUnits, "int () -")
    		.def("getStartingWorkerUnits", &CvEraInfo::getStartingWorkerUnits, "int () -")
    		.def("getStartingExploreUnits", &CvEraInfo::getStartingExploreUnits, "int () -")
    		.def("getStartingGold", &CvEraInfo::getStartingGold, "int () -")
    		.def("getFreePopulation", &CvEraInfo::getFreePopulation, "int () -")
    		.def("getStartPercent", &CvEraInfo::getStartPercent, "int () -")
    		.def("getGrowthPercent", &CvEraInfo::getGrowthPercent, "int () -")
    		.def("getTrainPercent", &CvEraInfo::getTrainPercent, "int () -")
    		.def("getConstructPercent", &CvEraInfo::getConstructPercent, "int () -")
    		.def("getCreatePercent", &CvEraInfo::getCreatePercent, "int () -")
    		.def("getResearchPercent", &CvEraInfo::getResearchPercent, "int () -")
    		.def("getBuildPercent", &CvEraInfo::getBuildPercent, "int () -")
    		.def("getImprovementPercent", &CvEraInfo::getImprovementPercent, "int () -")
    		.def("getGreatPeoplePercent", &CvEraInfo::getGreatPeoplePercent, "int () -")
    		.def("getAnarchyPercent", &CvEraInfo::getAnarchyPercent, "int () -")
    		.def("getEventChancePerTurn", &CvEraInfo::getEventChancePerTurn, "int () -")
    		.def("getSoundtrackSpace", &CvEraInfo::getSoundtrackSpace, "int () -")
    		.def("isFirstSoundtrackFirst", &CvEraInfo::isFirstSoundtrackFirst, "int () -")
    		.def("getNumSoundtracks", &CvEraInfo::getNumSoundtracks, "int () -")
    		.def("getAudioUnitVictoryScript", &CvEraInfo::getAudioUnitVictoryScript, "string () -")
    		.def("getAudioUnitDefeatScript", &CvEraInfo::getAudioUnitDefeatScript, "string () -")
    
    		.def("isNoGoodies", &CvEraInfo::isNoGoodies, "bool () -")
    		.def("isNoAnimals", &CvEraInfo::isNoAnimals, "bool () -")
    		.def("isNoBarbUnits", &CvEraInfo::isNoBarbUnits, "bool () -")
    		.def("isNoBarbCities", &CvEraInfo::isNoBarbCities, "bool () -")
    
    		// Arrays
    
    		.def("getSoundtracks", &CvEraInfo::getSoundtracks, "int (int i) -")
    		.def("getCitySoundscapeSciptId", &CvEraInfo::getCitySoundscapeSciptId, "int (int i) -")
    		;
    Das müssten eigentlich alle Codeteile sein.

  11. #1571
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Mir fällt schon mal ein Fehler auf.

    Code:
    //Kathy Beginn Mercenary Era
    pXML->GetChildXmlValByName(&m_MercenaryUnitclass, "MercenaryUnitclass");
    //Kathy End Mercenary Era
    Das geht so nicht, du hast die Lesereihenfolge vergessen, weswegen du ja readpass nutzen sollst/wolltest.

    Beispiel:
    Code:
    	CvString szTextVal;
    	pXML->GetChildXmlValByName(szTextVal, "DefaultUnit");
    	m_aszExtraXMLforPass3.push_back(szTextVal);
    Das Auslesen sieht richtig aus.


    int getMercenaryUnitclass() const; // Exposed to Python

    Davon sehe ich die Definition nicht, nur diese Deklaration.

  12. #1572
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Die Definition für habe ich tatsächlich im Post oben vergessen, sie existiert aber in CvInfos.cpp:
    Code:
    //Kathy Baginn Mercenairy Era
    int CvEraInfo::getMercenaryUnitclass() const
    {
    	return m_MercenaryUnitclass;
    }
    //Kathy End Mercenairy Era
    Das andere habe ich jetzt eingefügt, der Test folgt.

  13. #1573
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Startest du mit Release oder Debug-DLL?

  14. #1574
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Mit Debug.dll

  15. #1575
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Ist das ein Start über den Pfeil oder der Verknüpfung? Mittlerweile starte ich nur noch über die Verknüpfung und hänge VS erst hinter zum Debuggen an.

    Debuggen -> An Prozess anhängen -> Civ 4 exe auswählen.

    Das hinterer anhängen spart viel Zeit beim starten.

    Bei deinen konkreten Fall macht es zu mindest Sinn, das Spiel direkt über den Pfeil zu starten um zu sehen, ob ein Fehler gemacht wurde. Jedoch wüsste man dann beim normalen Start eher, ob das Spiel bis in das Menü kommt.

Seite 105 von 180 ErsteErste ... 55595101102103104105106107108109115155 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •