Seite 259 von 271 ErsteErste ... 159209249255256257258259260261262263269 ... LetzteLetzte
Ergebnis 3.871 bis 3.885 von 4063

Thema: Der Pythonthread

  1. #3871
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Habe es so übernommen, da bekomme ich noch eine Fehlermeldung das pCityPlot nicht definiert ist.

    Habe

    "pCityPlot = gc.getMap().plot(pCity.getX(), pCity.getY())"

    unter

    "def onCityBuilt(self, argsList):"

    ergänzt.

    Danach bekomme ich den Hinweis das pCity nicht definiert ist....
    Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!

    Neu Version Conflict on Chiron v3.4 BETA - 16.01.16

    Patch1 - 07.04.16

    Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
    Ihr könnt sofort loslegen.

    Über Feedback würde ich mich freuen...

  2. #3872
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Sorry, konnte ja nicht wissen, dass du das nicht vorher definiert hast.

    Mach lieber pCityPlot = city.plot()
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  3. #3873
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.019
    Dann poste mal bitte "onCityBuilt" von Anfang an.

    Edit: Crosspost. Mir ging es darum, unter welcher Variable die Stadt übergeben 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

  4. #3874
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Sollte so aussehen:

    PHP-Code:
      def onCityBuilt(selfargsList):
        
    'City Built'
        
    city argsList[0
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  5. #3875
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    So siehts bei mir aus...



    PHP-Code:
    def onCityBuilt(selfargsList):
            
    'City Built'
            
    self.parent.onCityBuilt(selfargsList)
            
    city argsList[0]
            
    ###new argslist argument vvvvvvvvvvvv
            
    bOrbital argsList[1]

            
    ###neu orbitalcheck REMOVE!
            ##CyInterface().addImmediateMessage(str(bOrbital), "")

            
    pPlot city.plot()
            
    player PyPlayer(city.getOwner())
            
    pPlayer gc.getPlayer(city.getOwner())
            
    pTeam gc.getTeam(pPlayer.getTeam())
            
    pCapitalCity pPlayer.getCapitalCity()
            
    pStartEra gc.getGame().getStartEra() 
    Ich ergänze jetzt noch pCityPlot = city.plot() zusätzlich...wenn das sinnvoll ist, denn ein pPlot = city.plot() hab ich ja auch...
    Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!

    Neu Version Conflict on Chiron v3.4 BETA - 16.01.16

    Patch1 - 07.04.16

    Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
    Ihr könnt sofort loslegen.

    Über Feedback würde ich mich freuen...

  6. #3876
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.019
    Das ist nicht sinnvoll. pPlot hast du doch schon. Statt mit pCityPlot zu arbeiten, nimm einfach die Variable, die genau das selbe beinhaltet. Dann sparst du Rechenzeit und den Speicher für eine weitere Variable.

    Also:
    Code:
    for iUnit in range (pCityPlot.getNumUnits()):
      iUnitType = pCityPlot.getUnit(iUnit).getUnitType()
      if iUnitType == gc.getInfoTypeForString("UNIT_BUNKER") or iUnitType == gc.getInfoTypeForString("UNIT_BUNKER2") or iUnitType == gc.getInfoTypeForString("UNIT_BUNKER3"):
        pCityPlot.getUnit(iUnit).kill(1,city.getOwner())
    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. #3877
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Das habe ich mir auch gedacht, ich nutze nun die bereits definierte Variable! Funktioniert alles bestens, schon alle drei Bunker durchgetestet, DANKE für die Hilfe!
    Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!

    Neu Version Conflict on Chiron v3.4 BETA - 16.01.16

    Patch1 - 07.04.16

    Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
    Ihr könnt sofort loslegen.

    Über Feedback würde ich mich freuen...

  8. #3878
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Ich habe da noch ein Problem mit den Bunker....

    Im Mod können einzelnen Civs auch während des Spieles Spawnen...
    Einige Civs erhalten bei Gründung der ihrer ersten Stadt einen Bunker damit sie nicht gleich überrannt werden.

    Bei der Civ "Angels" scheint das nicht zu funzen...aber warum...
    Jedenfalls verstehe ich den Codeteil so (grün) das bei Stadtgründung auch ein Bunker erschaffen werden soll, in der Hauptstadt.


    Code:
    def onCityBuilt(self, argsList):
    		'City Built'
    		self.parent.onCityBuilt(self, argsList)
    		city = argsList[0]
    		
    ###new argslist argument vvvvvvvvvvvv
    		bOrbital = argsList[1]
    
    		###neu orbitalcheck REMOVE!
    		##CyInterface().addImmediateMessage(str(bOrbital), "")
    
    		pPlot = city.plot()
    		player = PyPlayer(city.getOwner())
    		pPlayer = gc.getPlayer(city.getOwner())
    		pTeam = gc.getTeam(pPlayer.getTeam())
    		pCapitalCity = pPlayer.getCapitalCity()
    		pStartEra = gc.getGame().getStartEra()
    		iRockyPolar = gc.getInfoTypeForString('TERRAIN_ROCKY_POLAR')
    		iRockyArid = gc.getInfoTypeForString('TERRAIN_ROCKY_ARID')
    		iRockyMoist = gc.getInfoTypeForString('TERRAIN_ROCKY_MOIST')
    		iRockyRainy = gc.getInfoTypeForString('TERRAIN_ROCKY_RAINY')
    		iFlatPolar = gc.getInfoTypeForString('TERRAIN_FLAT_POLAR')
    		iFlatArid = gc.getInfoTypeForString('TERRAIN_FLAT_ARID')
    		iFlatMoist = gc.getInfoTypeForString('TERRAIN_FLAT_MOIST')
    		iFlatRainy = gc.getInfoTypeForString('TERRAIN_FLAT_RAINY')
    		iHive = gc.getInfoTypeForString('CIVILIZATION_HIVE')
    		iTrait = CvUtil.findInfoTypeNum(gc.getTraitInfo,gc.getNumTraitInfos(),'TRAIT_INSURGENT')
    
    		if pPlot.isWater() and bOrbital==false:
    			
    			city.setNumRealBuilding(gc.getCivilizationInfo(pPlayer.getCivilizationType()).getCivilizationBuildings(gc.getInfoTypeForString("BUILDINGCLASS_SEA_BASE")),1)
    			if pPlayer.isHuman() == False:
    				pPlayer.initUnit(gc.getInfoTypeForString('UNIT_SCOUT_PATROL'), city.getX(), city.getY(), UnitAITypes.UNITAI_CITY_DEFENSE, DirectionTypes.NO_DIRECTION)
    		elif pPlayer.getCivilizationType() != iHive:
    			if pPlot.getTerrainType() == iRockyMoist:
    				pPlot.setTerrainType(iFlatMoist,True,True)
    			elif pPlot.getTerrainType() == iRockyRainy:
    				pPlot.setTerrainType(iFlatRainy,True,True)
    			elif pPlot.getTerrainType() == iRockyArid:
    				pPlot.setTerrainType(iFlatArid,True,True)
    			elif pPlot.getTerrainType() == iRockyPolar:
    				pPlot.setTerrainType(iFlatPolar,True,True)
    		if bOrbital==true:
    			city.setNumRealBuilding(gc.getInfoTypeForString("BUILDING_ORBITAL_BASE"), 1)
    
    		if pTeam.isHasTech(gc.getInfoTypeForString('TECH_MAGNETIC_PROPULSION')):
    			if (gc.getInfoTypeForString("BUILDING_ORBITAL_BASE") > 0):
    				if city.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_ORBITAL_BASE")) == 1:
    					pPlot.setRouteType(gc.getInfoTypeForString('ROUTE_ROAD'))
    		if pPlayer.getNumCities() == 1 and pCapitalCity != -1:
    			if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_PIRATES'):
    				newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BUNKER'), pCapitalCity.getX(), pCapitalCity.getY(), UnitAITypes.UNITAI_IMMOBILE, DirectionTypes.DIRECTION_NORTH)
    				newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NAVAL_FORTRESS'), True)
    			if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_AQUATORIANS'):
    				newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BUNKER'), pCapitalCity.getX(), pCapitalCity.getY(), UnitAITypes.UNITAI_IMMOBILE, DirectionTypes.DIRECTION_NORTH)
    				newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NAVAL_FORTRESS'), True)
    			if pStartEra == gc.getInfoTypeForString('ERA_ARRIVAL'):
    				bStillAlive = False
    				for iPlayer in range(gc.getMAX_PLAYERS()):
    					pHumanPlayer = gc.getPlayer(iPlayer)
    					if pHumanPlayer.isHuman():
    						iHumanPlayer = iPlayer
    						bStillAlive = True
    						break
    					break # assuming human player is slot 0. If not, player probably has already switched once
    				if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_ANGELS'):
    					pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BUNKER'), pCapitalCity.getX(), pCapitalCity.getY(), UnitAITypes.UNITAI_IMMOBILE, DirectionTypes.DIRECTION_NORTH)
    					pPlot.setRouteType(gc.getInfoTypeForString('ROUTE_ROAD'))
    					pPlayer.initUnit(gc.getInfoTypeForString('UNIT_DATAJACK'), pCapitalCity.getX(), pCapitalCity.getY(), UnitAITypes.UNITAI_MERCHANT, DirectionTypes.DIRECTION_NORTH)
    					pCapitalCity.setNumRealBuilding(gc.getInfoTypeForString('BUILDING_NETWORK_NODE'), 1)
    					if pPlot.getBonusType(-1) == -1:
    						iMod = CyGame().getSorenRandNum(2, "Maniac")
    						if iMod != 0:
    							pPlot.setBonusType(gc.getInfoTypeForString('BONUS_MINERAL'))
    						else:
    							pPlot.setBonusType(gc.getInfoTypeForString('BONUS_NUTRIENT'))
    					if bStillAlive: # if (pHumanPlayer != NO_PLAYER) in python??
    						popupInfo = CyPopupInfo()
    						popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
    						popupInfo.setText(CyTranslator().getText("TXT_KEY_POPUP_CONTROL_ANGELS",()))
    						popupInfo.setData1(iHumanPlayer)
    						popupInfo.setData2(city.getOwner())
    						popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_YES", ()), "")
    						popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_NO", ()), "")
    						popupInfo.setOnClickedPythonCallback("reassignPlayer")
    						popupInfo.addPopup(iHumanPlayer)

    Hatte probehalber mal ein "newUnit = " vor "pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BUNKER'), pCapitalCity.getX(), pCapitalCity.getY(), UnitAITypes.UNITAI_IMMOBILE, DirectionTypes.DIRECTION_NORTH)"
    gesetzt, wie bei den beiden Civs oben (PIRATES und AQUATORIANS), bei denen es funktioniert...leider ohne Erfolg.

    Sobald ich die Stadt gründe bekomme ich eine Einheit DataJack, das Gebäude Network Node wird auch in der Hauptstadt errichtet...nur die Bunker-Einheit wird nicht erschaffen...
    Geändert von Monaldinio (02. Januar 2016 um 22:47 Uhr)
    Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!

    Neu Version Conflict on Chiron v3.4 BETA - 16.01.16

    Patch1 - 07.04.16

    Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
    Ihr könnt sofort loslegen.

    Über Feedback würde ich mich freuen...

  9. #3879
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.019
    Das ist sicher nicht der komplette Code. Ich vermisse den Codeteil, bei dem die "alten" Bunker gelöscht werden. Ich nehme an, dass das danach kommt. Folge: Der Bunker wird erst gesetzt - und danach wieder gekillt.

    Lösung: Das Zerstören "alter" Bunker muss vor dem Setzen der "neuen" Bunker stattfinden. Dann das Programm kann nicht zwischen den verschiedenen Arten von Bunkern unterscheiden.
    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

  10. #3880
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Aha! Du meinst den codeteil den ihr gestern für mich erarbeitet habt!
    Oh man, daran hab ich gar nicht gedacht, das ist so ein typischer Monaldinio Fehler!
    Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!

    Neu Version Conflict on Chiron v3.4 BETA - 16.01.16

    Patch1 - 07.04.16

    Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
    Ihr könnt sofort loslegen.

    Über Feedback würde ich mich freuen...

  11. #3881
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.043
    Ich hab eine Klasse in einer eigenen Datei, die so anfängt:

    PHP-Code:
    ### Imports
    from CvPythonExtensions import *
    import CvUtil
    import random

    ### Defines
    gc CyGlobalContext()

    class 
    Trade:
        
    def __init__(self):  
            
    self.lBonusNoTrade = [ gc.getInfoTypeForString("BONUS_CELTIC"), gc.getInfoTypeForString("BONUS_ROMAN"), gc.getInfoTypeForString("BONUS_NUMID"),
                          
    gc.getInfoTypeForString("BONUS_NUBIA"), gc.getInfoTypeForString("BONUS_GREEK"), gc.getInfoTypeForString("BONUS_PERSIA"),
                          
    gc.getInfoTypeForString("BONUS_GERMAN"), gc.getInfoTypeForString("BONUS_INDIA"), gc.getInfoTypeForString("BONUS_BALEAREN"),
                          
    gc.getInfoTypeForString("BONUS_TEUTONEN"), gc.getInfoTypeForString("BONUS_BAKTRIEN"), gc.getInfoTypeForString("BONUS_KRETA"),
                          
    gc.getInfoTypeForString("BONUS_KILIKIEN"), gc.getInfoTypeForString("BONUS_MARS"), gc.getInfoTypeForString("BONUS_THRAKIEN")]
            
    # Lists of cultivatable bonuses
            
    self.lCorn = [
                
    gc.getInfoTypeForString("BONUS_WHEAT"),
                
    gc.getInfoTypeForString("BONUS_GERSTE"),
                
    gc.getInfoTypeForString("BONUS_HAFER"),
                
    gc.getInfoTypeForString("BONUS_ROGGEN"),
                
    gc.getInfoTypeForString("BONUS_HIRSE"),
                
    gc.getInfoTypeForString("BONUS_RICE")
            ]
            
    self.lCattle = [
                
    gc.getInfoTypeForString("BONUS_COW"),
                
    gc.getInfoTypeForString("BONUS_PIG"),
                
    gc.getInfoTypeForString("BONUS_SHEEP")
            ]
            
    self.lSpice = [
                
    gc.getInfoTypeForString("BONUS_OLIVES"),
                
    gc.getInfoTypeForString("BONUS_DATTELN")
            ]
            
    self.lCamel = [ gc.getInfoTypeForString("BONUS_CAMEL") ] 
    Z.B. im Konstruktor des EventManagers erstellt ich dann ein Objekt daraus, aber leider steht in allen Listen immer nur -1. Ich hab die Vermutung, dass zu diesem Zeitpunkt das XML noch nicht geladen ist o.Ä. und deshalb getInfoTypeForString noch nicht funktioniert. Aber was tu ich dagegen?
    Oder irgendeine andere Lösung ohne Klasse o.Ä.. Ich such nur einen Weg, damit ich diese Listen nur einmal initialisieren muss und dann in allen Methoden der Datei Trade darauf zugreifen kann.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  12. #3882
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Zitat Zitat von BoggyB Beitrag anzeigen
    Ich hab eine Klasse in einer eigenen Datei, die so anfängt:

    ...

    Z.B. im Konstruktor des EventManagers erstellt ich dann ein Objekt daraus, aber leider steht in allen Listen immer nur -1. Ich hab die Vermutung, dass zu diesem Zeitpunkt das XML noch nicht geladen ist o.Ä. und deshalb getInfoTypeForString noch nicht funktioniert. Aber was tu ich dagegen?
    Oder irgendeine andere Lösung ohne Klasse o.Ä.. Ich such nur einen Weg, damit ich diese Listen nur einmal initialisieren muss und dann in allen Methoden der Datei Trade darauf zugreifen kann.
    Deine Vermutung ist korrekt. Die Ladereihenfolge sieht man jedes mal beim Starten und dort werden die XML Dateien erst nach Python geladen. Dagegen kannst du nichts tun.

    Was du erst mal machen kannst? Es wäre sinnvoll, die getInfoTypeForString Zuweisungen in eine andere Methode zu verschieben. __init__ ist wie man sieht, eine sehr schlechte Idee.

    Dann würde ich eine Variabel anlegen, die Aussagt, ob die Daten geladen wurden. Die Zuweisung erlaubst du nur, wenn die Variabel aussagt, es wurde noch nichts geladen.

    Jetzt muss du irgend wo an zentraler Stelle die Methode aufrufen. Wo kann ich dir gerade nicht sagen.

  13. #3883
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von BoggyB Beitrag anzeigen
    [...]
    Was spricht den dagegen, Modulkonstanten zu verwenden?

    Achtung Spoiler:
    Code:
    BONUS_NO_TRADES = (
        "BONUS_CELTIC",
        "BONUS_ROMAN",
        "BONUS_NUMID",
        "BONUS_NUBIA",
        "BONUS_GREEK",
        "BONUS_PERSIA",
        "BONUS_GERMAN",
        "BONUS_INDIA",
        "BONUS_BALEAREN",
        "BONUS_KRETA",
        "BONUS_TEUTONEN",
        "BONUS_BAKTRIEN",
        "BONUS_KILIKIEN",
        "BONUS_MARS",
        "BONUS_THRAKIEN")
    
    CORNS = (
        "BONUS_WHEAT",
        "BONUS_GERSTE",
        "BONUS_HAFER",
        "BONUS_ROGGEN",
        "BONUS_HIRSE",
        "BONUS_RICE")
    
    CATTLES = (
        "BONUS_COW",
        "BONUS_PIG",
        "BONUS_SHEEP")
    
    SPICES = (
        "BONUS_OLIVES",
        "BONUS_DATTELN")
    
    CAMELS = (
        "BONUS_CAMEL")


    Die getInfoTypeForString-Aufrufe machst du dann, wenn du sie brauchst.

    Besser wäre es natürlich, das per XML zu regeln. Also die BonusInfos um entsprechende Attribute erweitern, die man dann auslesen kann.

  14. #3884
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Oft gibt es (wegen diesem Problem?; bin auch schon öfter rein getappt) eine init()-Methode in der Datei. Da kann an es meist bedenkenlos rein packen. Allerdings ist das beim EventManager nicht der Fall.

  15. #3885
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Zitat Zitat von alpha civ Beitrag anzeigen
    Was spricht den dagegen, Modulkonstanten zu verwenden?

    ...

    Die getInfoTypeForString-Aufrufe machst du dann, wenn du sie brauchst.

    Besser wäre es natürlich, das per XML zu regeln. Also die BonusInfos um entsprechende Attribute erweitern, die man dann auslesen kann.
    Musste fast lachen. Es ist doch gerade sinn der Sache, dass man sich die ständigen getInfoTypeForString-Aufrufe zur Laufzeit spart.

    PAE nutzt bisher eine DLL nur für mehr Civs, aber sonst läuft da alles über Python ab. Daher kommt die XML Lösung wohl nicht in Frage.

Seite 259 von 271 ErsteErste ... 159209249255256257258259260261262263269 ... LetzteLetzte

Berechtigungen

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