Seite 350 von 350 ErsteErste ... 250300340346347348349350
Ergebnis 5.236 bis 5.244 von 5244

Thema: Der-kleine-Fragen-zum-Modding-Thread

  1. #5236
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    Was sagt denn die Civilopädie des Mods, was der Mahlstrom macht? Während wir hier im Nebel stochern, hilft ein Blick dort vielleicht, etwas auszuschließen.
    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. #5237
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    Ich stehe vor einem Rätsel. Ich habe eine Python-Funktion in meinem Mod verändert. Wenn ich die jetzt Teste, funktioniert zumindest der erste Schritt davon ganz normal. Wenn ich dann aber den Spielstand laden will, den ich vorher gespeichert habe (und der sich, das habe ich getestet, vorher noch laden ließ) stürzt das Spiel ab. Debugging ergab nur eine kryptische Nachricht wegen einer Zugriffsverletzung. Noch kurioser war, dass sich der Spielstand auch danach nicht mehr lesen ließ.
    Kann eine Python-Funktion einen Spielstand zerschießen, den ich gar nicht nach ihrem Ausführen überschrieben habe? Doch wohl eher nicht. Ich kapiere nicht, wie das kommen kann.
    Zuerst hatte ich die Befürchtung, dass ich im SDK irgendwelche Mist gebaut hätte und Spielstände generell nicht mehr geladen werden können, aber ein neu erstelltes Spiel konnte ich laden, und ich konnte es auch laden, nachdem ich mir im Weltenbauer meine Testumgebung geschaffen hatte. Nur nach dem Ausführen der Python-Funktion ging es nicht mehr.

    Code:
    	def onCityLost(self, argsList):
    		'City Lost'
    		city = argsList[0]
    		player = PyPlayer(city.getOwner())
    
    ###Spaltung Anfang###
    
    		if city.isCapital():
    			if player.getNumCities() >14:
    				if gc.getMAX_CIV_PLAYERS ()>CyGame().countCivPlayersAlive ():
    					NewID = -1
    					for NumCiv in xrange (gc.getMAX_PLAYERS ()):
    						PotPlayer = gc.getPlayer(NumCiv)
    						if not PotPlayer.isEverAlive ():
    							NewID = NumCiv
    							break
    					if NewID ==-1:
    						for NumCiv in xrange (gc.getMAX_PLAYERS ()):	
    							PotPlayer = gc.getPlayer(NumCiv)
    							if not PotPlayer.isAlive():
    								NewID = NumCiv
    								break
    					if NewID ==-1:
    						return
    	###Kathy new: Rebell Civs Beginn
    					iOwnerCiv = gc.getPlayer(city.getOwner()).getCivilizationType() # funktioniert
    					iCiv1 = gc.getCivilizationInfo(iOwnerCiv).getRebellCiv()
    					iCiv2 = gc.getCivilizationInfo(iOwnerCiv).getDerivativeCiv()
    					iCiv3 = gc.getCivilizationInfo(iOwnerCiv).getDerivativeCitystate()
    #		###Kathy: Eliminiere existierende Civs aus der Liste
    					for NumCiv in xrange (gc.getMAX_PLAYERS ()):
    						LoopPlayer = gc.getPlayer(NumCiv)
    						iLoopCiv = LoopPlayer.getCivilizationType()
    						if ( iCiv1 == iLoopCiv ):
    							iCiv1 = -1
    						if ( iCiv2 == iLoopCiv ):
    							iCiv2 = -1
    						if ( iCiv3 == iLoopCiv ):
    							iCiv3 = -1
    #		### Kahty: Eliminiere existierende Civs aus der Liste 
    					iCiv = -1
    					if iCiv1 != -1:
    						iCiv = iCiv1
    					elif iCiv2 != -1:
    						iCiv = iCiv2
    					elif iCiv3 != -1:
    						iCiv = iCiv3
    	###Kathy new: Rebell Civs End
    					if iCiv == -1:
    						iCiv = iOwnerCiv
    					CurCiv = gc.getCivilizationInfo(iCiv)
    					NumLeaders = CurCiv.getNumLeaders()
    ### 					dice = gc.getGame().getMapRand()
    ###					LeaderNum = dice.get(NumLeaders , "OracleSayMeTheLeader" )
    					LeaderNum = gc.getGame().getSorenRandNum(NumLeaders, "OracleSayMeTheLeader" )
    
    					LeaderCounter=0
    					for iLeaders in range(gc.getNumLeaderHeadInfos ()):
    						if CurCiv.isLeaders(iLeaders):
    							if NumLeaders==1:
    								NewLeaderID =iLeaders
    								break
    							else:
    								if LeaderCounter==LeaderNum:
    									NewLeaderID=iLeaders
    									break
    							LeaderCounter=LeaderCounter+1
    					CyGame().addPlayer(NewID,NewLeaderID,iCiv)
    					pNewPlayer = gc.getPlayer(NewID)
    					iOldPlayer = city.getOwner()
    					OldPlayer = gc.getPlayer(iOldPlayer)
    					NewTeam = gc.getTeam(pNewPlayer.getTeam())
    					NewTeamID = NewTeam.getID()
    					techcount=0
    					for techcount in range (gc.getNumTechInfos()):
    						if ((player.getTeam().isHasTech(techcount)==true)):
    							NewTeam.setHasTech(techcount,1,NewID,0,1)
    		### Age als Grundlage für Stärke des neuen Spielers
    					iAge = pNewPlayer.getCurrentEra ()
    		### Age als Grundlage für Stärke des neuen Spielers
    					iCitiesNewPlayer = OldPlayer.getNumCities()/2
    					iCityCount = 0
    					(loopCity, iter) = OldPlayer.firstCity(True)
    					while(loopCity):
    						iCityX = loopCity.getX()
    						iCityY = loopCity.getY()
    						if ( loopCity.isCapital() == false ):
    							pNewPlayer.acquireCity(loopCity,False,True)
    							Defender = loopCity.getConscriptUnit ()
    							for i in range(1+iAge/2):
    								pNewPlayer.initUnit( Defender, iCityX,iCityY, UnitAITypes.UNITAI_CITY_DEFENSE, DirectionTypes.DIRECTION_NORTH )
    #### Beginn more Units
    							Militia = loopCity.getFoodProducedUnit()
    							for i in range(loopCity.getPopulation()/5 ):
    								pNewPlayer.initUnit(Militia, iCityX,iCityY, UnitAITypes.UNITAI_CITY_DEFENSE, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 3 ):
    								CavalryUnit = gc.getInfoTypeForString("UNIT_HORSE_ARCHER")
    								CavalryUnitUpgrade = loopCity.allUpgradesAvailable(CavalryUnit,0) 
    								if (CavalryUnitUpgrade != -1):
    									CavalryUnit = CavalryUnitUpgrade
    								for i in range(1+iAge/5):
    									pNewPlayer.initUnit(CavalryUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 5 ):
    								if loopCity.isCoastal(20):
    									RiverUnit = gc.getInfoTypeForString("UNITCLASS_EINBAUM")
    									RiverUnitUpgrade = loopCity.allUpgradesAvailable(RiverUnit ,0) 
    									if (RiverUnitUpgrade != -1):
    										RiverUnit = RiverUnitUpgrade
    									pNewPlayer.initUnit(RiverUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_ATTACK_SEA, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 6 ):
    								ArtilleryUnit = gc.getInfoTypeForString("UNIT_OXYBELES")
    								ArtilleryUnitUpgrade = loopCity.allUpgradesAvailable(ArtilleryUnit ,0) 
    								if (ArtilleryUnitUpgrade != -1):
    									ArtilleryUnit = ArtilleryUnitUpgrade
    								for i in range(1+iAge/10):
    									pNewPlayer.initUnit(ArtilleryUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_ATTACK_CITY, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 10 ):
    								FortUnit = gc.getInfoTypeForString("UNIT_OUTPOST")
    								FortUnitUpgrade = loopCity.allUpgradesAvailable(FortUnit ,0) 
    								if (FortUnitUpgrade != -1):
    									FortUnit = FortUnitUpgrade
    								pNewPlayer.initUnit(FortUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_CITY_DEFENSE, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 20 ):
    								FlakUnit = gc.getInfoTypeForString("UNIT_LIGHT_AA")
    								FlakUnitUpgrade = loopCity.allUpgradesAvailable(FlakUnit ,0) 
    								if (FlakUnitUpgrade != -1):
    									FlakUnit = FlakUnitUpgrade
    								for i in range(1+iAge/6):
    									pNewPlayer.initUnit(FlakUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_CITY_DEFENSE, DirectionTypes.DIRECTION_NORTH )
    							if (iAge > 21 ):
    								JaegerUnit = gc.getInfoTypeForString("UNIT_DOPPELDECKER")
    								JaegerUnitUpgrade = loopCity.allUpgradesAvailable(JaegerUnit ,0) 
    								if (JaegerUnitUpgrade != -1):
    									JaegerUnit = JaegerUnitUpgrade
    								pNewPlayer.initUnit(JaegerUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_DEFENSE_AIR, DirectionTypes.DIRECTION_NORTH )
    								
    
    #### More Units End
    							loopCity.changeCulture(NewID,loopCity.getCulture(iOldPlayer),1)
    							iCityCount = iCityCount+1
    						if iCityCount == iCitiesNewPlayer:
    							break
    						(loopCity, iter) = OldPlayer.nextCity(iter, true)
    
    			###Kathy: Unit Experience, um Auflösung zu verbeiden
    					(loopUnit, iter) = pNewPlayer.firstUnit(true)
    					while(loopUnit):
    						loopUnit.changeExperience(1+iAge/2,30,false,false,false)
    						if (loopUnit.getDomainType() == gc.getInfoTypeForString("DOMAIN_SEA")):
    							loopUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_DRILL1"),1)
    						elif (loopUnit.getDomainType() == gc.getInfoTypeForString("DOMAIN_IMMOBILE")):
    							loopUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_CITY_GARRISON1"),1)
    							loopUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_DRILL1"),1)
    						else:
    							loopUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_CITY_GARRISON1"),1)
    						(loopUnit, iter) = (pNewPlayer.nextUnit(iter, true))
    			###Kathy: Unit Experience, um Auflösung zu verbeiden
    					pNewPlayer.setGold(player.getGold()/2)
    					PlayerAdjectiv = player.getCivilizationInfo().getDescription ()
    					NewPlayerAdjectiv = CurCiv.getDescription ()
    					for iPlayer in range (gc.getMAX_CIV_PLAYERS ()):
    						CyInterface().addMessage(iPlayer,False,15,CyTranslator().getText("TXT_KEY_CAPITAL_LOST",(PlayerAdjectiv,NewPlayerAdjectiv)),'',0,'Art/Interface/Buttons/General/warning_popup.dds',ColorTypes(gc.getInfoTypeForString("COLOR_RED")), city.getX(), city.getY(), True,True)
    ###Spaltung ENDE###
    Hier ist der Pythoncode, wobei grün die heutigen Änderungen sind. Blau hatte ich zuletzt davor geändert, sollte aber unkritisch sein, da ich diese Änderung auch schon im Code meiner aktiven Story vorgenommen habe, wo ich die Spielstände bisher auch laden konnte.

    Beim ersten Absturz bekam ich auch einen assert (leider nicht bei weiteren Versuchen, so dass ich es nicht weiterverfolgen konnte.)
    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

  3. #5238
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    Komischerweise lässt sich der zweite, vermeintlich ebenfalls verseuchte Spielstand jetzt doch wieder laden (und damit meine Testumgebung). Sehr seltsam.
    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. #5239
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    Und auch der Spielstand nach der Spaltung lässt sich laden, wenn ich nach dem Python-Code speichere und ins Hauptmenü gehe. Warum sich Spielstand 2 allerdings nicht aus dem Spiel heraus laden ließ, nachdem ich den Code ausgeführt habe (und Spielstand 1 sogar gar nicht mehr, auch nicht aus dem Hauptmenü) verstehe ich einfach nicht.
    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

  5. #5240
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    17.648
    War das chatGPT/CoPilot?

    Ich sehe folgendes nicht in der python reference (und kenne es auch selber nicht):

    1) pCity.getFoodProducedUnit() bei dir: Militia = loopCity.getFoodProducedUnit()

    2) pCity.allUpgradesAvailable() bei dir:
    CavalryUnitUpgrade = loopCity.allUpgradesAvailable(CavalryUnit,0)
    RiverUnitUpgrade = loopCity.allUpgradesAvailable(RiverUnit ,0)
    ArtilleryUnitUpgrade = loopCity.allUpgradesAvailable(ArtilleryUnit ,0)
    FortUnitUpgrade = loopCity.allUpgradesAvailable(FortUnit ,0)
    FlakUnitUpgrade = loopCity.allUpgradesAvailable(FlakUnit ,0)
    JaegerUnitUpgrade = loopCity.allUpgradesAvailable(JaegerUnit ,0)

    das musst du bestimmt anders lösen.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins allerletzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features, die Spaß machen. Hand drauf!


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

  6. #5241
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    1) "getFoodProducedUnit()" habe ich im SDK definiert, das kannst du nicht kennen. Das macht es tatsächlich etwas schwierig, wenn ich mit meinem Code hier arbeite, weil so etwas öfter vorkommt.
    2) pCity.allUpgradesAvailable() ist laut API eine Originalfunktion. "allUpgradesAvailable (UnitType eUnit, INT iUpgradeCount)"
    Diese beiden Codeteile funktionieren auch wie gewünscht. Das komische war vor allem, dass ich nach der Anwendung dieses Codestück nicht mehr ohne Absturz den vorherigen Spielstand laden konnte - der ja eigentlich durch die Funktion gar nicht verändert werden sollte. Beim zweiten Versuch funktionierten die alten Spielstände wenigstens wieder, nachdem ich das Spiel immer über das Hauptmenü verlassen und den Spielstand geladen hatte. Die Frage, warum das Laden nicht funktioniert hat, kann ich nicht beantworten. Aber es scheint auch kein permanentes Problem zu sein. Hoffe ich. Das Problem hat sich also irgendwie von selbst aufgelöst, auch wenn ich Angst habe, dass es im ungünstigsten Moment wieder auftaucht.

    Mit ChatGPT arbeite ich gar nicht, ich versuche zumindest, zu verstehen, was ich mache. Auch wenn mir das nicht immer gelingt.
    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. #5242
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    17.648
    Ah ok, wegen getFoodProducedUnit(). Wenn ich gpt wegen civ4 c++ frage, schmeißt der mir immer funktionen vor, die es gar nicht gibt.

    und stimmt, allUpradesAvailable gibt es doch in der python reference. Hab mit () gesucht und da hat ers nicht gefunden. naja wenns nur ein einmaliger Fehler war... vielleicht durhc das Verändern der python Datei während dem Spiel, dann würd ich mir keine Sorgen machen.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins allerletzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features, die Spaß machen. Hand drauf!


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

  8. #5243
    Registrierter Benutzer Avatar von xist10
    Registriert seit
    09.11.19
    Beiträge
    6.425
    Ich glaube, einen Fehler habe ich gefunden:

    pNewPlayer.initUnit(CavalryUnitUpgrade, iCityX,iCityY, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_NORTH )

    Das müsste meine ich CavalryUnit sein. CavalryUnitUpgrade kann meine ich 0 / leer sein ? Andernfalls ergibt die Zuweisung von CavalryUnit = CavalryUnitUpgrade 2 Zeilen höher wenig Sinn.

    Der selber Fehler wird auch für die anderen Einheitentypen wiederholt.

    Ich kann mir gut vorstellen, dass in der initUnit Funktion ein assert vorkommt.
    Achtung Spoiler:
    cIV-Multiplayer-Storys
    PB 88, PB 89, PB 91, PB 90, PB 92, PB 93, PB 94, PB 95
    RB 72, RB 74, RB 79, RB 81
    Oldschool 3
    EitB PBEM
    LVII, LVIII, LIX
    ciV-Multiplayer-Storys
    PBEM 292, PBEM 293, PBEM 294, PBEM 295, PBEM 296
    Sonstige
    Anno 1800

    Alle Storylinks hier

  9. #5244
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.958
    Gut beobachtet.
    Das ist ein Fehler - den hatte ich später gefunden, nachdem es wieder lief.
    Und es gab auch noch den Fehler, dass das Flussschiff mit UNITCLASS_ statt UNIT_ initiiert wurde, führte auch zu Problemen.

    Aber keiner dieser Fehler sollte eigentlich einen Spielstand zerstören, schlimmstenfalls würde das Spiel an der Stelle abstürzen bzw. es gibt einen Fehler und danach wird der restliche Pythoncode gar nicht mehr ausgeführt.
    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

Seite 350 von 350 ErsteErste ... 250300340346347348349350

Berechtigungen

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