Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 31 bis 45 von 50

Thema: Modding Idee: Stadtstaaten

  1. #31
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Sinnvoller wäre es wohl, in onCityAcquired zu checken, ob der vorherige Besitzer noch Städte hat (falls nein -> tot).
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  2. #32
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    Wenn der Vorbesitzer also wirklich tot sein sollte, müsste ich danach checken: War er Vasall von jemand. Ist das möglich?
    Schließlich müsste ich danach checken, ob er eine bestimmte Eigenschaft hätte, dann kann ich seinem Hegemon die Techs wegnehmen.

    Also:
    PHP-Code:
        def onCityAcquired(selfargsList):
            
    'City Acquired'
            
    iPreviousOwner,iNewOwner,pCity,bConquest,bTrade argsList
            CvUtil
    .pyPrint('City Acquired Event: %s' %(pCity.getName()))

    ###Beginn Unterstützung verloren###    
                    
    if iPreviousOwner.hatKeineWeiterenStädteMehr ### wie formuliere ich das?
                        
    if iPreviousOwner.isVasallVonJemand ###wie frage ich das ab?
                            
    pHegemon=gc.getTeamHegemon ###muss natürlich auch irgenwie anders sein
                            
    if iPreviousOwner..hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_PRODUCTIVE")):
                                
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_PRODUCTIVE"),False,gc.getTeam(iMaster).getLeaderID(),False,True)
    ###End Unterstützung verloren### 

  3. #33
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zuerst:
    PHP-Code:
    pPreviousOwner gc.getPlayer(iPreviousOwner
    hatKeineWeiterenStädteMehr:
    PHP-Code:
    pPreviousOwner.getNumCities() == 
    (Oder wird numCities erst nach onCityAcquired angepasst? Dann wäre == 1)

    isVasallVonJemand:
    PHP-Code:
    pPreviousTeam gc.getTeam(pPreviousOwner.getTeam())
    if 
    any(pPreviousTeam.isVassal(i) for i in range(NUM_TEAMS)): 
    (Wie kommt man an NUM_TEAMS?)

    getTeamHegomon:
    PHP-Code:
    gc.getTeam(next(pPreviousTeam.isVassal(i) for i in range(NUM_TEAMS))) 
    Wie immer ohne Gewähr.

  4. #34
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    (Wie kommt man an NUM_TEAMS?)
    Würde es nicht reichen, da 18 (standardspiel) oder die Max. Spielerzahl aus der jeweiligen .dll einzugeben? Oder stürzt er dann ab, wenn es weniger Teams gibt?

  5. #35
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Weiß ich nicht - könnte man ausprobieren. Dann würde ich gc.getMAX_CIV_TEAMS() benutzen.

  6. #36
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Ach ja, xrange (statt range) wäre wahrscheinlich so ganz prinzipiell besser.

  7. #37
    Registrierter Benutzer Avatar von Akropolis
    Registriert seit
    14.09.08
    Ort
    Naturschutzgebiet Mark Brandenburg
    Beiträge
    4.430
    Zitat Zitat von The_J Beitrag anzeigen
    Sinnvoller wäre es wohl, in onCityAcquired zu checken, ob der vorherige Besitzer noch Städte hat (falls nein -> tot).
    Nicht unbedingt. Es gibt bei Civ die Option beim Spielstart, komplette Vernichtung. Damit "lebt" eine Civ als Zombie weiter, bis die letzte Einheit vernichtet wurde.

  8. #38
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Na gut, aber dass ein "Stadtstaat" ohne Städte keinen Bonus mehr bringt, ist durchaus plausibel.

  9. #39
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    Da stimme ich Delnan zu, von der Logik her bringt das schon Sinn. Allerdings habe ich gerade ein weiteres Problem entdeckt, das ich bislang übersehen habe: Angenommen, ich habe zwei Stadtstaaten mit der selben Eigenschaft als Vasallen, z.B. 2x Militärisch, dann würde ich, sobald ich einen verliere, die Unterstützung durch den 2. ebenfalls verlieren. Der Fall dürfte zwar selten sein, aber er ist möglich. Hat jemand eine Idee, wie man das verhindern könnte?
    Die (unschöne) Idee die ich habe, ist: Wenn ein Stadtstaat mit einem bestimmten Attribut stirbt,
    PHP-Code:
    ### Vasallenbonus entziehen beginn ###
            
    pPreviousOwner gc.getPlayer(iPreviousOwner)
            if 
    pPreviousOwner.getNumCities() == 0:
                
    pPreviousTeam gc.getTeam(pPreviousOwner.getTeam())
                if 
    any(pPreviousTeam.isVassal(i) for i in range(gc.getMAX_CIV_TEAMS())):
                    
    pHegemon gc.getTeam(next(pPreviousTeam.isVassal(i) for i in range(gc.getMAX_CIV_TEAMS())))

                                if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_PRODUCTIVE")):
    ###...dann muss an dieser Stelle geprüft werden, ob pHegemon nicht noch einen verbleibenden Vasallen mit dem entsprechenden Trait hat.###
                        
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_PRODUCTIVE"),False,gc.getTeam(iMaster).getLeaderID(),False,True
    Oder hat jemand eine elegantere Idee?

  10. #40
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Ich sehe da jetzt vom Effekt her keinen Unterschied .
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  11. #41
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    Ja, du hast recht, ich habe es undeutlich ausgedrückt. Es muss natürlich nicht nur geprüft werden, ob es noch einen zweiten Vasall gibt, es darf natürlich auch nur für den Fall, dass dem nicht so ist, der Vorteil entzogen werden.
    Also
    PHP-Code:
    if pHegemon.isMaster (?) von anderem pPlayer mit TRAIT_STADTSTAAT_PRODUCTIVE:
        break 
    ###oder anderswie: Mach nix###
    else Entziehe Vorteil 
    Wie gehe ich am besten durch die anderen Spieler, muss ich da irgendwie loopen, oder was wäre am elegantesten?

  12. #42
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    Bevor ich weiter über das Problem nachdenke, dass eventuell, zwei Vasallen mit dem selben Trait vorhanden sein könnten:
    Mein Test für die Funktion ergibt im Spiel folgenden Fehler:



    Es geht um diese Zeile:
    PHP-Code:
                if any(pPreviousTeam.isVassal(i) for i in range(gc.getMAX_CIV_TEAMS())): 
    in diesem Code.
    PHP-Code:
    ### Vasallenbonus entziehen beginn ###
            
    pPreviousOwner gc.getPlayer(iPreviousOwner)
            if 
    pPreviousOwner.getNumCities() == 0:
                
    pPreviousTeam gc.getTeam(pPreviousOwner.getTeam())
                if 
    any(pPreviousTeam.isVassal(i) for i in range(gc.getMAX_CIV_TEAMS())):
                    
    pHegemon gc.getTeam(next(pPreviousTeam.isVassal(i) for i in range(gc.getMAX_CIV_TEAMS())))

                                if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_PRODUCTIVE")):
                        
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_PRODUCTIVE"),False,gc.getTeam(iMaster).getLeaderID(),False,True)

                                if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_MERKANTILE")):
                        
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_MERKANTILE"),False,gc.getTeam(iMaster).getLeaderID(),False,True)

                                if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_MARITIME")):
                        
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_MARITIME"),False,gc.getTeam(iMaster).getLeaderID(),False,True)

                                if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_MILITARY")):
                        
    pHegemon.setHasTech(gc.getInfoTypeForString("TECH_SUPPORT_STADTSTAATEN_MILITARY"),False,gc.getTeam(iMaster).getLeaderID(),False,True)

                    if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_ARTISTIC")):
                        (
    loopCityiter) = pHegemon.firstCity(false)
                        while(
    loopCity):
                            
    loopCity.setNumRealBuilding(gc.getCivilizationInfo(pHegemon.getCivilizationType()).getCivilizationBuildings(gc.getInfoTypeForString("BUILDINGCLASS_SUPPORT_STADTSTAAT_ARTISTIC")),0)
                                            (
    loopCityiter) = pHegemon.nextCity(iterfalse)
                    if 
    pHegemon.isHuman():
                        
    CyInterface().addImmediateMessage(CyTranslator().getText("TXT_KEY_VASALLENGESCHENK_SUPPORT_STADTSTAAT_LOST",()),"" )


    ### Vasallenbonus entziehen Ende ### 
    Geändert von Kathy (09. Juni 2011 um 21:03 Uhr)

  13. #43
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Ne, oder? ...Tatsache, any gibt's erst seit 2.5
    Naja, dann halt per Hand:
    Code:
    def any(iterable):
        for item in iterable:
            if item: return True
        return False
    Das ganz oben zwischen PyInfo = PyHelpers.PyInfo und # globals (bitte mit Leerzeilen drunter und drüber, für die Lesbarkeit ) einfügen. Einrückung ist so in Ordnung (nur evtl musst du jeweils vier Leerzeichen durch einen Tab ersetzen, falls der sich daran stört).
    Geändert von delnan (15. November 2010 um 19:09 Uhr)

  14. #44
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.098
    Danke, delnan.
    Denke, dass ich es heute im Laufe des Tages testen werde.

  15. #45
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Sorry erstmal das ich hier einfach reinposte.

    Habe mal zwei doofe fragen!!!!

    1.) Kathy...stürzt dein Spiel nach dieser Fehlermeldung in der nächtsen Runde ab?!?!?

    2.) Ich bekomme eine ähnliche Fehlermeldung bei meinen Mod...nur mit dem zusammenhang "onTechAcquired"....

    Zur Info, habe den Techtree erweitert...

    Was kann das sein, wie kann ich das beheben?!?!
    Bei mir schmiert der Mod nämlich in der nächsten Runde ab!!!!




    Habe im Eventmanager mal nach der Funktion geschaut und habe das gefunden...

    PHP-Code:
    def onTechAcquired(selfargsList):
            
    'Tech Acquired'
            
    iTechTypeiTeamiPlayerbAnnounce argsList
            
    # Note that iPlayer may be NULL (-1) and not a refer to a player object
            
            # Show tech splash when applicable
            
    if (iPlayer > -and bAnnounce and not CyInterface().noTechSplash()):
                if (
    gc.getGame().isFinalInitialized() and not gc.getGame().GetWorldBuilderMode()):
                    if ((
    not gc.getGame().isNetworkMultiPlayer()) and (iPlayer == gc.getGame().getActivePlayer())):
                        
    popupInfo CyPopupInfo()
                        
    popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
                        
    popupInfo.setData1(iTechType)
                        
    popupInfo.setText(u"showTechSplash")
                        
    popupInfo.addPopup(iPlayer)
                    
            if (
    not self.__LOG_TECH):
                return
            
    CvUtil.pyPrint('%s was finished by Team %d' 
                
    %(PyInfo.TechnologyInfo(iTechType).getDescription(), iTeam)) 
    Kann es sein das da irgendwas nicht passt im Zusammenhang mit meinen Mod???
    Geändert von Monaldinio (02. Dezember 2010 um 11:25 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...

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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