Seite 4 von 7 ErsteErste 1234567 LetzteLetzte
Ergebnis 46 bis 60 von 103

Thema: Hilfe bei Modding, historische Richtigkeit Szenario

  1. #46
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Zitat Zitat von Dolans Beitrag anzeigen
    Beim Event Manager habe ich Spawn units mit Earth 35 Civs ausgetauscht und zusammen mit Spawn unit in den Python-Ordner gestellt und Text habe ich in den Text gestellt.
    Nun, was das Spawnen angeht, ist es ganz klar, dass nichts spawnt, wenn du den Eventmanager von dem einen Mod überschreibst - denn im Eventmanager von Earth 35 Civs kommt kein Spawncode drin vor. In diesem Fall musst du die beiden Codes zusammenfügen. Vermutlich hat The_J in seinem Mod die wichtigen Codeteile irgendwie mit seinem Namen gekennzeichnet. Such diese Stellen und füge sie bei Earth 35 im CvEventmanager an der entsprechenden Stelle ein, damit der Code aus beiden Python-Dateien ausgeführt wird.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  2. #47
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Zitat Zitat von Kathy Beitrag anzeigen
    Nun, was das Spawnen angeht, ist es ganz klar, dass nichts spawnt, wenn du den Eventmanager von dem einen Mod überschreibst - denn im Eventmanager von Earth 35 Civs kommt kein Spawncode drin vor. In diesem Fall musst du die beiden Codes zusammenfügen. Vermutlich hat The_J in seinem Mod die wichtigen Codeteile irgendwie mit seinem Namen gekennzeichnet.
    Nun, da bin ich ein bisschen überfordert.

    Es gibt keine Stelle im CV Event Manager von The_J, wo sein Name stehen sollte. Aber es gibt diese eine Stelle, die man umändern soll

    Code:
    ###spawnUnit 2 start###
    		####replace the "SpawnUnit" with the path of your mod.
    		####the folder name is meant.
                    SpawnUnitUtil.init("Earth 35 Civs")                        
                    ###spawnUnit part 2 end###		
    		return 0
    
    	def onGameStart(self, argsList):
    		'Called at the start of the game'
    		###spawnUnit part 3 start###
                    ####replace the "SpawnUnit" with the path of your mod.
    		####the folder name is meant.		
                    SpawnUnitUtil.init("Earth 35 Civs")                        
                    ###spawnUnit part 3 end###

    Das habe ich gemacht.
    Such diese Stellen und füge sie bei Earth 35 im CvEventmanager an der entsprechenden Stelle ein, damit der Code aus beiden Python-Dateien ausgeführt wird.
    Ich wüsste auch nicht, an welche entsprechende Stelle jener Code hinsollte. Es gibt aber jedenfalls, wie du's gesagt hast, keine Zeile mit "Spawn" im Earth 35 Mod vor.

  3. #48
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    "Spawn" ist vermutlich das Codewort, mit dem The_J alles gekennzeichnet hat - so heißt ja auch sein Mod. in Earth 35 Civs gibt es das natürlich nicht, weil zu dem Mod kein Spawnen dazugehört.

    Zwischen ###spawnUnit 2 start### und ###spawnUnit part 2 end### liegt ein Teil von The_Js Code. Davor gibt es sicher noch eine Stelle ###spawnUnit part 1 und danach noch einige ###spawnUnit part n (n sind die durchnummerierten Zahlen, die er verwendet).

    Grob gesagt beginnt jeder Python-Codeblock mit etwas wie diesem hier:
    def onGameStart(self, argsList):
    Das heißt, vor dem ###spawnUnit 2 start### steht auch irgendwo ein def on...
    Zu diesem Codeblock gehört der Code:
    ###spawnUnit 2 start###
    ####replace the "SpawnUnit" with the path of your mod.
    ####the folder name is meant.
    SpawnUnitUtil.init("Earth 35 Civs")
    ###spawnUnit part 2 end###
    Das heißt: Such das def on..., das vor ###spawnUnit 2 start### steht in der CvEventManager von Earth 35.
    Vermutlich ist es def onLoadGame(self, argsList):
    Dann vergleich den Code hinter def onLoadGame(self, argsList): im EventManager von Eart 35 und von The_J. Du wirst dann feststellen können, wo The_J den Code eingesetzt hat, in diesem Fall: Direkt von return 0
    Dort fügst du den Code dann auch ein, inklusive der Änderung für den Modnamen in diesem Fall.

    Genauso verfährst du an allen mit Spawn Civ gekennzeichneten Stellen. Da ich The_J als sehr gewissenhaften Modder kenne, wird er wohl alle seine Codeteile entsprechend markiert haben, und es dürfte leicht sein, alles zu übertragen.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  4. #49
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Hallo

    Es gab 4 dieser SpawnUnit Codeteile im CV EventManager von The_J. Ich konnte alle in den CV EventManager von Earth 35 Civs rüberkopieren.

    Seinen CV EventManager muss ich nun nicht in den Python Ordner tun, das wäre nun redundant, oder?

    Die SpawnUnitUtil.py Datei habe ich einfach in den Python-Ordner zu den anderen .py-Dateien getan.

    Bei der CIV4SpawnUnitInfos.xml-Datei muss man auch das Scenario angeben, was ich getan habe. Darauf habe ich sie in den XML-Ordner gelegt.

    Und die SpawnUnits_GameText.xml ist im Text-Ordner.

    Es gibt da noch diese SpawnUnits.ini-Datei, bei der steht der Typ Konfigurationseinstellungen.

    Und schlussendlich auch noch eine SpawnUnits.ini.bak-Datei, kann ich auch etwas mit der machen?

    Trotzdem tut sich noch nichts.

  5. #50
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Übrigens konnte ich die verbockten Cultural City Styles beheben. Liambanes Custom Leaders und Civilizations hatten andere City Styles eingestellt als im Varietas Delectat Ordner. Dieser Widerspruch verursachte wohl, dass die Städte mit allen Kulturen durchmischt waren. Nun da ich alles angepasst habe, sieht alles top aus.

    Einen Erfolg kann ich verbuchen
    Geändert von Dolans (10. März 2015 um 13:06 Uhr)

  6. #51
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Zitat Zitat von Dolans Beitrag anzeigen
    Hallo

    Es gab 4 dieser SpawnUnit Codeteile im CV EventManager von The_J. Ich konnte alle in den CV EventManager von Earth 35 Civs rüberkopieren.

    Seinen CV EventManager muss ich nun nicht in den Python Ordner tun, das wäre nun redundant, oder?
    Es darf jede Datei nur einmal im Python-Ordner geben, das ist korrekt. Es wäre nicht nur redundant, sondern unmöglich, da die Datei exakt den selben Namen haben muss und daher nicht zweimal im Ordner liegen kann
    Die SpawnUnitUtil.py Datei habe ich einfach in den Python-Ordner zu den anderen .py-Dateien getan.
    War sie in The_Js Mod denn auch in dem Python-Ordner, oder in einem der Unterordner? Wenn sie in einem Unterordner war, muss der natürlich auch der selbe sein.

    Bei der CIV4SpawnUnitInfos.xml-Datei muss man auch das Scenario angeben, was ich getan habe. Darauf habe ich sie in den XML-Ordner gelegt.
    Auch hier: Liegt sie im selben Ordner wie die Datei von The_J? Und: Hast du auch Einträge geändert, die besagen, wann was spawnen soll? Ohne die Datei zu kennen, muss da vermutlich irgend etwas eingetragen werden.

    Und die SpawnUnits_GameText.xml ist im Text-Ordner.
    Das ist korrekt.

    Es gibt da noch diese SpawnUnits.ini-Datei, bei der steht der Typ Konfigurationseinstellungen.
    Eventuell gehört die in den selben Ordner wie dein Mod, und zwar mit dem selben Namen wie dein Mod. Es ist zwar unüblich, aber es könnte sein, dass darin wichtige Angaben stehen.

    Und schlussendlich auch noch eine SpawnUnits.ini.bak-Datei, kann ich auch etwas mit der machen?
    Die kannst du vernachlässigen, ist nur eine Kopie der SpawnUnits.ini
    Trotzdem tut sich noch nichts.
    Zu guter letzt: Hast du auch wirklich alle Dateien aus der SpawnUnits-Mod irgendwo verwertet? Ich vermute, dass es an fehlenden Einträgen in der xml-Datei liegt.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  7. #52
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    CV EventManager

    Check

    SpawnUnitUtil.py war nicht noch in einem Unterordner und ist somit einfach im Python-Ordner

    Check

    CIV4SpawnUnitInfos.xml
    Auch hier: Liegt sie im selben Ordner wie die Datei von The_J? Und: Hast du auch Einträge geändert, die besagen, wann was spawnen soll?
    Bei The_J liegt die Datei in einem CustomXML-Ordner, also habe ich den mit der Datei in den XML-Ordner kopiert.


    SpawnUnits_GameText.xml

    Check

    SpawnUnits.ini-Datei

    Eventuell gehört die in den selben Ordner wie dein Mod, und zwar mit dem selben Namen wie dein Mod.
    Wo in den selben Ordner? Bei The_J ist sie im SpawnUnit-Ordner, also im Hauptordner auf der gleichen Stufe wie Assets. Nun kann ich aber die Datei beim 35 Civs Mod nicht auch auf die Höhe Assets hintun, oder?



    Dazu kommt noch etwas anderes, die cultural Einheitenskins, (weiss nicht wie ich die sonst nennen soll) sieht man nur wenn die Einheit ausgewählt ist, sprich: Wenn ich bei den Griechen den Späher ausgewählt habe sieht er aus wie ein Europäer, sonst ist es ein Ureinwohner-Späher. Gibt es einen Weg die Skins persistent zu machen?

  8. #53
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    CustomXML dürfte dem XML-Ordner entsprechen nicht einem Unterordner von xml. Ganz sicher bin ich mir aber nicht, sieht fast nach modularem Laden aus. Eventuell gehört CustomXML auch auf eine Ebene mit dem XML-Ordner, also unter Assets.

    Doch, genau in den Ordner gehört die Ini.
    in den selben Ordner wie dein Mod
    heißt, in den selben Ordner, in dem der ganze Rest von Mod liegt: Mods/Modname. In diesem Ordner liegt auch der Ordner "Assets".

    Das mit den Einheitenskins kenne ich, wenn "Animationen gestoppt" aktiviert ist. Wenn diese Option deaktiviert ist dürften die Skins auch so bleiben, wie sie sind.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  9. #54
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Die SpawnUnits.ini-Datei soll umbenannt werden in Earth 35 civs.ini? Das geht doch nicht, da auf Ebene Assets ja schon ein Earth 35 civs.ini ist.

    Danke für den Tipp mit "Animationen gestoppt", das hat funktioniert.

  10. #55
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Dann vergleich die beiden einmal. Wenn sie inhaltlich sehr ähnlich wirken (außer 0 und 1, das bedeutet nur, ob dieser Teil der Ini aktiv oder nicht ist), steht in der SpawnUnits.ini auch nichts sinnvolles drin. Ansonsten löscht die alte Earth 35 civs.ini und benenn die SpawnUnits.ini um.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  11. #56
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Zitat Zitat von Kathy Beitrag anzeigen
    Dann vergleich die beiden einmal. Wenn sie inhaltlich sehr ähnlich wirken (außer 0 und 1, das bedeutet nur, ob dieser Teil der Ini aktiv oder nicht ist), steht in der SpawnUnits.ini auch nichts sinnvolles drin. Ansonsten löscht die alte Earth 35 civs.ini und benenn die SpawnUnits.ini um.
    Das habe ich gemacht. Bei der Spawn.ini war modular XML loading auf 0, was nach Auswechseln das Game nicht mehr starten liess. Nachdem ich es auf 1 gestellt hatte ging's wieder glatt, nur spawnen immer noch nicht 5 römische Panzer in Rom bei der zweiten Runde, wie ich es eingestellt habe.

  12. #57
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Das wundert mich jetzt sehr. Ich nehme an, dass irgendwo ein Detail falsch ist. Wie sieht im CvEventManager denn "onBeginnGameTurn" aus? Poste den Code einmal hier. Ich kenne den Mod nicht und weiß daher nicht, wie er funktioniert.

    Und poste auch einmal den Code aus der xml, damit ich sehen kann, wie das da aussieht.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  13. #58
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Zitat Zitat von Kathy Beitrag anzeigen
    Wie sieht im CvEventManager denn "onBeginnGameTurn" aus? Poste den Code einmal hier.
    Code:
    def onBeginGameTurn(self, argsList):
    		'Called at the beginning of the end of each turn'
    		iGameTurn = argsList[0]
    		###spawnUnit part 4 start###         
                    SpawnUnitUtil.process(iGameTurn+1)
                    ###spawnUnit part 4 end###		
    		CvTopCivs.CvTopCivs().turnChecker(iGameTurn)
    Hat es mit der ArgsList 0 zu tun?


    Zitat Zitat von Kathy Beitrag anzeigen
    Und poste auch einmal den Code aus der xml, damit ich sehen kann, wie das da aussieht.
    Ich hab dir hier den Code aus The_Js CustomXML. Den hast du doch gemeint, oder?


    Code:
    <Civ4SpawnInfos>
    	<SpawnInfos>
    		<SpawnInfo>
    			<UnitType>UNIT_TANK</UnitType>
    			<Promotions>
    				<Promotion>PROMOTION_COMBAT1</Promotion>			
    				<Promotion>PROMOTION_COMBAT2</Promotion>				
                </Promotions>
    			<iNumUnit>5</iNumUnit>
    			<CivType>CIVILIZATION_ROME</CivType>
    			<Scenario>Earth 35 Civs</Scenario>
    			<iTurn>2</iTurn>
                <StartX>61</StartX>
                <StartY>43</StartY>
    		</SpawnInfo>
    
    		<SpawnInfo>
    			<UnitType>UNIT_SPANISH_CONQUISTADOR</UnitType>
    			<Promotions>
    				<Promotion>PROMOTION_COMBAT1</Promotion>			
    				<Promotion>PROMOTION_NAVIGATION2</Promotion>				
                </Promotions>			
    			<iNumUnit>3</iNumUnit>
    			<CivType>CIVILIZATION_SPAIN</CivType>
    			<Scenario>Earth18Civs</Scenario>
    			<iTurn>2</iTurn>
                <StartX>32</StartX>
                <StartY>32</StartY>
    		</SpawnInfo>
    
    		<SpawnInfo>
    			<UnitType>UNIT_GALLEON</UnitType>
    			<Promotions>		
    				<Promotion>PROMOTION_NAVIGATION2</Promotion>				
                </Promotions>			
    			<iNumUnit>3</iNumUnit>
    			<CivType>CIVILIZATION_SPAIN</CivType>
    			<Scenario>Earth18Civs</Scenario>
    			<iTurn>3</iTurn>
                <StartX>32</StartX>
                <StartY>32</StartY>
    		</SpawnInfo>
    		
    	</SpawnInfos>
    </Civ4SpawnInfos>

    Für mich gilt nur der erst Abschnitt. Den habe ich editiert, die beiden anderen sind mir eigentlich egal. Alle drei sind eigentlich Beispiele von The_J.

  14. #59
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Bei Rome steht, dass de Einheit auf dem Plot 61/43 spawnen soll. Ist das auch der Ort, an dem die Hauptstadt steht? Ich vermute, ja, denn sonst stündte da wohl auch 32/32.

    ArgsList 0 ist nicht gefährlich.

    Kannst du einmal die komplette SpawnUnitUtil.py einmal hier anhängen? Ich denke, die muss ich mir ansehen, um weiterzukommen.

    Prüf bitte auch, ob zu Beginn im Eventmanager steht "import SpawnUnitUtil". Das ist für die Verknüpfung dieser Dateien wichtig.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  15. #60
    Registrierter Benutzer
    Registriert seit
    04.03.15
    Beiträge
    65
    Bei Rome steht, dass de Einheit auf dem Plot 61/43 spawnen soll. Ist das auch der Ort, an dem die Hauptstadt steht? Ich vermute, ja, denn sonst stündte da wohl auch 32/32.
    Ja genau, habe die Koordinaten aus der 35 Civ Save Datei übernommen.

    Hier die ganze SpawnUnitUtil.py-Datei

    Code:
    ##SpawnUnitUtil
    ###MODDER READ THIS:
    ###You do not have to change anything in this file.
    ###all changes have to be done in the CvEventManager.
    ###This file has to be in the same folder like the CvEventManager.py.
    
    from CvPythonExtensions import *
    import gc as garbage
    gc = CyGlobalContext()
    SpawnUnitList = []
    
    def process(iTurn):
        for entry in SpawnUnitList:        
            if entry.iTurn == iTurn:            
                AddUnits(entry)      
    
    
    def AddUnits(entry):
        iMaxCiv = gc.getMAX_CIV_PLAYERS ()    
        for i in range(iMaxCiv):
            pPlayer = gc.getPlayer(i)
            iCiv = pPlayer.getCivilizationType()
            if iCiv == entry.iCiv:
                break
        else:
            return
        if not pPlayer.isAlive():
            return
        if (entry.iX <=-1) or (entry.iY<=-1):
            if pPlayer.isBarbarian():
                return False        
            entry.iX = pPlayer.getCapitalCity().getX()
            entry.iY = pPlayer.getCapitalCity().getY()
        bPlotValid = checkPlot(entry,pPlayer,CyMap().plot(entry.iX,entry.iY))
        if not bPlotValid:
            for iXLoop in range(entry.iX - 1, entry.iX + 2, 1):
    	    for iYLoop in range(entry.iY - 1, entry.iY + 2, 1):
                    pPlot = CyMap().plot(iXLoop,iYLoop)
                    bPlotValid = checkPlot(entry,pPlayer,pPlot)
                    if bPlotValid:
                        entry.iX = iXLoop
                        entry.iY = iYLoop
                        break
                if bPlotValid:
                    break
        if not bPlotValid:
            if pPlayer.isBarbarian():
                return
            entry.iX = pPlayer.getCapitalCity().getX()
            entry.iY = pPlayer.getCapitalCity().getY()        
            cvUnit = gc.getUnitInfo(entry.iUnit)
            iUnitDomain = cvUnit.getDomainType ()
            if iUnitDomain ==gc.getInfoTypeForString("DOMAIN_SEA"):
                
                if not CyMap().plot(entry.iX,entry.iY).isCoastalLand ():
                    (loopCity, iter) = pPlayer.firstCity(false)
                    while(loopCity):
                        if CyMap().plot(loopCity.getX(),loopCity.getY()).isCoastalLand ():
                            entry.iX = loopCity.getX()
                            entry.iY = loopCity.getY()
                            break                                   
                        (loopCity, iter) = pPlayer.nextCity(iter, false)
                if not CyMap().plot(entry.iX,entry.iY).isCoastalLand ():
                    return False
                        
        
        for i in range(entry.iNumUnit):
            pUnit = pPlayer.initUnit(entry.iUnit, entry.iX,entry.iY, UnitAITypes.NO_UNITAI, DirectionTypes.NO_DIRECTION )
            for iProm in entry.lPromotion:
                pUnit.setHasPromotion(iProm,True)
        CyInterface().addMessage(pPlayer.getID(),False,15,CyTranslator().getText("TXT_KEY_REINFORCEMENT",()),'',0,gc.getUnitInfo(entry.iUnit).getButton(),gc.getInfoTypeForString("COLOR_GREEN") , entry.iX,entry.iY, True,True)
        garbage.collect()
    
    def checkPlot(entry,pPlayer,pPlot):
        cvUnit = gc.getUnitInfo(entry.iUnit)
        iUnitDomain = cvUnit.getDomainType ()
        if pPlot.isWater() and (iUnitDomain !=gc.getInfoTypeForString("DOMAIN_SEA")):
            return False
        if (not pPlot.isWater()) and (iUnitDomain ==gc.getInfoTypeForString("DOMAIN_SEA")):
            return False
        if (iUnitDomain ==gc.getInfoTypeForString("DOMAIN_AIR") and not pPlot.isCity()):
            return False
        if pPlot.isImpassable ():
            return False
        if pPlayer.isBarbarian():
            if pPlot.getOwner()>-1 and (pPlayer.getID()!=pPlot.getOwner()):
                pOtherPlayer = gc.getPlayer(pPlot.getOwner())
                for i in range(gc.getNumBuildingInfos ()):
                    cvBuilding = gc.getBuildingInfo(i)
                    if cvBuilding.isAreaBorderObstacle ():
                        if pOtherPlayer.countNumBuildings(i)>0:
                            return False
        pTeam = gc.getTeam(pPlayer.getTeam())
        if (pPlot.getOwner()<=-1) or (pPlot.getOwner()==pPlayer.getID()):
            if pPlot.getNumUnits ()<=0:
                return True
            else:
                for i in range(pPlot.getNumUnits ()):
                    pUnit = pPlot.getUnit(i)
                    if pTeam.isAtWar(pUnit.getTeam()):
                        return False    
        if pPlot.getOwner()>-1:
            if pPlayer.getID()!=pPlot.getOwner():
                pOtherPlayer = gc.getPlayer(pPlot.getOwner())
                
                pOtherTeam = gc.getTeam(pOtherPlayer.getTeam())
                if pTeam.getID()!=pOtherTeam.getID():
                    if pTeam.isOpenBorders(pOtherTeam.getID()):
                        return True
                    elif pTeam.isAtWar(pOtherTeam.getID()):
                        if pPlot.isCity():
                            return False
                        else:
                            return True
                    elif pOtherTeam.isVassal(pTeam.getID()):
                        return True
                    elif not pTeam.isOpenBorders(pOtherTeam.getID()):
                        return False
        return True
    
    
            
    def init(sModName):       
            MyFile = open("Mods/"+sModName+"/Assets/XML/CustomXML/CIV4SpawnUnitInfos.xml")
            del SpawnUnitList[:]
            for CurString in MyFile.readlines():        
                    if "UnitType" in CurString:
                            CurEntry = SpawnEntry()
                            CurEntry.iUnit = gc.getInfoTypeForString(CutString(CurString))
                    if ("Promotion" in CurString) and not ("Promotions" in CurString):
                            CurEntry.lPromotion.append(gc.getInfoTypeForString(CutString(CurString)))
                    if "iNumUnit" in CurString:
                            CurEntry.iNumUnit = int(CutString(CurString))                        
                    elif "CIVILIZATION" in CurString:
                            CurEntry.iCiv = gc.getInfoTypeForString(CutString(CurString))
                    elif "Scenario>" in CurString:
                            CurEntry.sScenario = str(CutString(CurString)).upper()
                    elif "iTurn" in CurString:
                            CurEntry.iTurn = int(CutString(CurString))
                    elif "StartX" in CurString:
                            CurEntry.iX = int(CutString(CurString))
                    elif "StartY" in CurString:
                            CurEntry.iY = int(CutString(CurString))
                            SpawnUnitList.append(CurEntry)
            MyFile.close()
    
    	MapName = CyMap().getMapScriptName ()
    	bScenario = False
    	if (".CIV" in MapName.upper()) and (not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_START)):
                bScenario = True
                if "civbeyondswordwbsave".upper() in MapName.upper():
                    MapName = MapName[0:-21]                              
                if "CivWarlordsWBSave".upper() in MapName.upper():
                    MapName = MapName[0:-18]
                if "Civ4WorldBuilderSave".upper() in MapName.upper():
                    MapName = MapName[0:-21]
            MapName = MapName.upper()
    
    
            lPop = []
            del lPop[:]
            if bScenario:
                for i in range(len(SpawnUnitList)):                
                    if SpawnUnitList[i].sScenario!=MapName:                    
                        if i not in lPop:
                            lPop.append(i)
            if not bScenario:
                for i in range(len(SpawnUnitList)):            
                    if SpawnUnitList[i].sScenario!="-1":
                        if i not in lPop:
                            lPop.append(i)
                       
    
            iMaxCiv = gc.getMAX_CIV_PLAYERS ()
            lCivs = []
            del lCivs[:]
            for i in range(iMaxCiv):
                pPlayer = gc.getPlayer(i)
                lCivs.append(pPlayer.getCivilizationType())
                
            for i in range(len(SpawnUnitList)):            
                if SpawnUnitList[i].iCiv not in lCivs:
                    if i not in lPop:
                        lPop.append(i)
                if SpawnUnitList[i].iTurn<=(CyGame().getGameTurn ()-2):
                    if i not in lPop:
                        lPop.append(i)
                if SpawnUnitList[i].iCiv==-1:
                    if i not in lPop:
                        lPop.append(i)
            lPop.sort()
            lPop.reverse()
            iPop = len(lPop)
            for i in range(iPop):            
                SpawnUnitList.pop(lPop[i])        
    
            garbage.collect()
    
    
            
                                                                                 
    def CutString(string):
            string = str(string)        
            string = string.strip()        
            string = string[2:-1]
            BeginPos=-1
            EndPos = -1                
            for i in xrange(len(string)):
                    if string[i]==">":
                            BeginPos=i                                
                    elif string[i]=="<":
                            EndPos=i                                
                            break
            else:
                    return "-1"
            NewString = string[BeginPos+1:EndPos]        
            return str(NewString)
    
    class SpawnEntry:
            def __init__(self):
                    self.iUnit = ""
                    self.iCiv = 0
                    self.lPromotion = []
                    self.sScenario = ""
                    self.iNumUnit = -1
                    self.iTurn = 0
                    self.iX = -1
                    self.iY = -1

    Dazu habe ich noch eine Frage: Im Code steht, eine Einheit könne nicht auf gegnerischem Territorium spawnen. Könnte man das, wenn das ganze dann mal funktioniert, auch ändern, so dass die Einheit trotzdem dort spawnt und eventuell gleich Krieg erklärt, oder halt ein Verbündeter wird? So dass die Einheit auch eine Berechtigung hat dort zu sein. Sonst muss ich im Late Game schauen, dass, wenn ich eine neue Ziv "entstehen lassen" will, ich sie auf neutralem Territorium spawnen lasse und so darauf schauen muss, dass jenes Territorium ja bis dann neutral bleibt. Wenn ich das ändern könnte, müsste ich nicht darauf schauen.



    Und zum EventManager:

    Code:
    ## Sid Meier's Civilization 4
    ## Copyright Firaxis Games 2006
    ## 
    ## CvEventManager
    ## This class is passed an argsList from CvAppInterface.onEvent
    ## The argsList can contain anything from mouse location to key info
    ## The EVENTLIST that are being notified can be found 
    
    
    from CvPythonExtensions import *
    import CvUtil
    import CvScreensInterface
    import CvDebugTools
    import CvWBPopups
    import PyHelpers
    import Popup as PyPopup
    import CvCameraControls
    import CvTopCivs
    import sys
    import CvWorldBuilderScreen
    import CvAdvisorUtils
    import CvTechChooser
    ###SpawnUnit part 1 start###
    import SpawnUnitUtil
    ###SpawnUnit part 1 end###
    import GodsOfOld
    import pickle
    Ich denke, da muss kein .py hintendran hin, da es sonst auch nirgends steht.

Seite 4 von 7 ErsteErste 1234567 LetzteLetzte

Berechtigungen

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