Seite 50 von 271 ErsteErste ... 4046474849505152535460100150 ... LetzteLetzte
Ergebnis 736 bis 750 von 4063

Thema: Der Pythonthread

  1. #736
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    jumpToNearestValidPlot()

    ja, den befehl verwend ich auch einmal irgendwo.

  2. #737
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Zitat Zitat von Pie Beitrag anzeigen
    Ich würde auch dafür pUnit.jumpToNearestValidPlot() verwenden.
    Anstelle von
    PHP-Code:
                                for iXLoop in xrange(iX-1,iX+2,1):
                                    for 
    iYLoop in xrange(iY-1,iY+2,1):
                                        
    NewPlot CyMap().plot(iXLoop,iYLoop)
                                        if 
    not NewPlot.isWater():
                                            
    pGroup pPlotUnit.getGroup ()
                                            
    pGroup.pushMoveToMission(iXLoop,iYLoop)
                                            break 
    oder ab wo?

    Und bezüglich der Zeile:
    PHP-Code:
                if iGoodyType == gc.getInfoTypeForString("GOODY_WARRIOR"): 
    Wie sieht bei Python eine zulässige OR-Verknüpfung aus? Einfach so?
    PHP-Code:
                if iGoodyType == gc.getInfoTypeForString("GOODY_WARRIOR") or if iGoodyType == gc.getInfoTypeForString("GOODY_SETTLER") : 
    Oder muss ich noch etwas beachten?
    Denn ich muss ja alle Goodys erfassen, die Einheiten erzeugen.

  3. #738
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    1.
    2. nur OR, nicht or if .
    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)


  4. #739
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Danke, ich teste es gerade.

    Edit: Der Test hat ergeben, dass die Einheiten weiter auf dem Wasser schwimmen. Ist vielleicht irgendwo noch eine Abfrage enthalten, die nach der geänderten Situation keinen Sinn mehr bringt?

    Aber es ergibt sich eine weitere Frage. Bei Barbaren stehen diese auch auf dem Wasser, aber leider nicht auf pPlot. Wie kann ich diese am besten an Land setzen oder - besser - Triremen umwandeln?

    Ich denke, man muss von pPlot aus mit iX = PlotX-1, iY=PlotY-1 einmal um den pPlot herumgehen, bei jeder Unit abchecken: isBarbarian, dann Feld isWater, dann checken ob die Domain = Land ist und dann den Einheitentyp auf UNIT_TRIREME umändern.

  5. #740
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Zitat Zitat von Kathy Beitrag anzeigen
    Danke, ich teste es gerade.

    Edit: Der Test hat ergeben, dass die Einheiten weiter auf dem Wasser schwimmen. Ist vielleicht irgendwo noch eine Abfrage enthalten, die nach der geänderten Situation keinen Sinn mehr bringt?
    Eigentlich nicht .
    Nimm aber mal if not pPlotUnit.isCargo (): raus (und natürlich nächste Zeile neu einrücken).

    Zitat Zitat von Kathy Beitrag anzeigen
    Aber es ergibt sich eine weitere Frage. Bei Barbaren stehen diese auch auf dem Wasser, aber leider nicht auf pPlot. Wie kann ich diese am besten an Land setzen oder - besser - Triremen umwandeln?

    Ich denke, man muss von pPlot aus mit iX = PlotX-1, iY=PlotY-1 einmal um den pPlot herumgehen, bei jeder Unit abchecken: isBarbarian, dann Feld isWater, dann checken ob die Domain = Land ist und dann den Einheitentyp auf UNIT_TRIREME umändern.


    PHP-Code:
        def onGoodyReceived(selfargsList):
            
    'Goody received'
            
    iPlayerpPlotpUnitiGoodyType argsList
    ### barb transform start
            
    if iGoodyType == gc.getInfoTypeForString("GOODY_BARBARIANS_WEAK"):
                    
    iX pPlot.getX()
                    
    iY pPlot.getY()
                    for 
    iXLoop in xrange(iX-1,iX+2,1):
                        for 
    iYLoop in xrange(iY-1,iY+2,1): 
                            
    NewPlot CyMap().plot(iXLoop,iYLoop)
                            if 
    NewPlot.isUnit() and NewPlot.isWater():
                                
    iMaxPlotUnit NewPlot.getNumUnits ()-
                                
    for i in xrange(iMaxPlotUnit,-1,-1):
                                    
    pPlotUnit NewPlot.getUnit(i
                                    if 
    pPlotUnit.isBarbarian() and pPlotUnit.getDomainType ()==gc.getInfoTypeForString("DOMAIN_LAND"): 
                                        
    newUnit gc.getPlayer(gc.getBARBARIAN_PLAYER ()).initUnit(gc.getInfoTypeForString("UNIT_TRIREME"), iXLoop,iYLoopUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_NORTH)
                                        
    pPlotUnit.setDamage(100False)
    ###barb transform end                                    
                                                    
            
    if (not self.__LOG_GOODYRECEIVED):
                return
            
    CvUtil.pyPrint('%s received a goody' %(gc.getPlayer(iPlayer).getCivilizationDescription(0)),) 
    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)


  6. #741
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Bei mir sieht jetzt jetzt so aus:
    PHP-Code:
    ####An Land gehen start
            
    if pPlot.isWater():
                if 
    iGoodyType == gc.getInfoTypeForString("GOODY_WARRIOR") or iGoodyType == gc.getInfoTypeForString("GOODY_SETTLER") or iGoodyType == gc.getInfoTypeForString("GOODY_ENTDECKER") or iGoodyType == gc.getInfoTypeForString("GOODY_SCHRIFTSTUECKE") or iGoodyType == gc.getInfoTypeForString("GOODY_KUNSTWERK") or iGoodyType == gc.getInfoTypeForString("GOODY_ARTEFAKT") or iGoodyType == gc.getInfoTypeForString("GOODY_RELIC") or iGoodyType == gc.getInfoTypeForString("GOODY_SCHATZ") or iGoodyType == gc.getInfoTypeForString("GOODY_SCOUT") or iGoodyType == gc.getInfoTypeForString("GOODY_WORKER") or iGoodyType == gc.getInfoTypeForString("GOODY_SLAVE"):
                    
    iMaxPlotUnit pPlot.getNumUnits ()-1
                    
    for i in xrange(iMaxPlotUnit,0,-1):
                        
    pPlotUnit pPlot.getUnit(i)
                        if 
    pPlotUnit.getDomainType ()==gc.getInfoTypeForString("DOMAIN_LAND"):
                            
    iX pPlot.getX()
                            
    iY pPlot.getY()
                            
    pUnit.jumpToNearestValidPlot()
    ###An Land gehen end                                        
    ### barb transform start
            
    if iGoodyType == gc.getInfoTypeForString("GOODY_BARBARIANS_WEAK") or iGoodyType == gc.getInfoTypeForString("GOODY_BARBARIANS_STRONG"):
                
    iX pPlot.getX()
                
    iY pPlot.getY()
                for 
    iXLoop in xrange(iX-1,iX+2,1):
                    for 
    iYLoop in xrange(iY-1,iY+2,1): 
                        
    NewPlot CyMap().plot(iXLoop,iYLoop)
                        if 
    NewPlot.isUnit() and NewPlot.isWater():
                            
    iMaxPlotUnit NewPlot.getNumUnits ()-
                            
    for i in xrange(iMaxPlotUnit,-1,-1):
                                
    pPlotUnit NewPlot.getUnit(i
                                if 
    pPlotUnit.isBarbarian() and pPlotUnit.getDomainType ()==gc.getInfoTypeForString("DOMAIN_LAND"): 
                                    
    newUnit gc.getPlayer(gc.getBARBARIAN_PLAYER ()).initUnit(gc.getInfoTypeForString("UNIT_TRIREME"), iXLoop,iYLoopUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_NORTH)
                                    
    pPlotUnit.setDamage(100False)
    ###barb transform end 
    Bei keinem Ereignis im Testspiel gingen keine Einheiten an Land.

    Ich glaube, ich habe es. Bei pPlotUnit=LAND versucht er, pUnit (also das Schiff, das das Feld aufgedeckt hat) auf den nächsten gültigen Platz zu versetzen, es bliebt also an Ort uns stelle.
    Geändert von Kathy (25. Mai 2010 um 20:50 Uhr)

  7. #742
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Zunächst einmal die gute Nachricht: Die Barbaren funktionieren, ich konnte bei meinen Tests viele Triremen aufdecken.
    Allerdings bleiben die Einheiten trotz meiner Änderung in der letzten Spalte noch auf dem Ozean stehen, was ja nicht Sinn der Sache ist.

  8. #743
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    ich denke so:

    (ich weiß nämlich nicht was das mit dem xrange 0,-1 soll,
    drum ändere ich dies nach meinen kenntnissen)
    und du hast pUnit statt pPlotUnit geschrieben. is ja klar, warum dir die einheit nicht ans land geht. pUnit hab ich nur deshalb geschrieben, damit du dich auskennst und eben deine unit vor den jump-befehl hinschreibst. wusste ja nicht, dass du deine einheit pPlotUnit nennst.

    PHP-Code:
                    for i in pPlot.getNumUnits ():
                        
    pPlotUnit pPlot.getUnit(i)
                        if 
    pPlotUnit.getDomainType()== gc.getInfoTypeForString("DOMAIN_LAND"):    
                          
    pPlotUnit.jumpToNearestValidPlot() 

  9. #744
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Das mit dem pPlotUnit habe ich, siehe letzte Zeile im vorletzten Post, schon bemerkt und korrigiert. Das andere probiere ich dann einmal.

    Edit:
    Diese Zeile verursacht einen Fehler.
    PHP-Code:
                    for i in pPlot.getNumUnits (): 
    Der Fehler lautet:
    Type error: iteration over non sequence.
    Geändert von Kathy (25. Mai 2010 um 21:57 Uhr)

  10. #745
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Lass das mal, wie es vorher war, ändere nur pUnit.jumpToNearestValidPlot() in pPlotUnit.jumpToNearestValidPlot() um.
    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. #746
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    ups. warum geht dieses for i in plot.getNumUnits() nicht, J?

  12. #747
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Einmal weil du das range vergessen hast (das hab' ich gestern nichtmal gesehen ).
    Und das Ende der Schleife muss während eines Durchlaufes konstant bleiben und darf nicht verändert werden, was aber bei einem dynamischen Aufruf nicht unbedingt gegeben sein muss und deswegen wahrscheinlich rumgenörgelt wird -> einfach vorher in ne Variable speichern.
    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)


  13. #748
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    aja... hehe... ich hab das range auch nicht bemerkt.
    und dass das mit der vorher definierten variable glaub ich dir gern, vc ist genauso sch...ön.

  14. #749
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.083
    Zitat Zitat von The_J Beitrag anzeigen
    Lass das mal, wie es vorher war, ändere nur pUnit.jumpToNearestValidPlot() in pPlotUnit.jumpToNearestValidPlot() um.
    Ich habe das Gefühl, dass diese Zeile nicht verstanden worden ist:
    Ich glaube, ich habe es. Bei pPlotUnit=LAND versucht er, pUnit (also das Schiff, das das Feld aufgedeckt hat) auf den nächsten gültigen Platz zu versetzen, es bliebt also an Ort und Stelle.
    Darin schreibe ich doch, dass ich es korrigiert habe. Trotzdem haben ich danach einen neuen Post gesetzt, in dem ich schreibe, dass es nicht funktioniert. Deinen Vorschlag habe ich also schon durchgeführt. Das scheint das Problem also nicht zu beheben. Ich stelle es trotzdem wieder her, da Pies Vorschlag ja offenbar nicht ganz funktioniert.
    Es sieht jetzt so aus, und ich teste es jetzt noch einmal.
    PHP-Code:
    ####An Land gehen start
            
    if pPlot.isWater():
                if 
    iGoodyType == gc.getInfoTypeForString("GOODY_WARRIOR") or iGoodyType == gc.getInfoTypeForString("GOODY_SETTLER") or iGoodyType == gc.getInfoTypeForString("GOODY_ENTDECKER") or iGoodyType == gc.getInfoTypeForString("GOODY_SCHRIFTSTUECKE") or iGoodyType == gc.getInfoTypeForString("GOODY_KUNSTWERK") or iGoodyType == gc.getInfoTypeForString("GOODY_ARTEFAKT") or iGoodyType == gc.getInfoTypeForString("GOODY_RELIC") or iGoodyType == gc.getInfoTypeForString("GOODY_SCHATZ") or iGoodyType == gc.getInfoTypeForString("GOODY_SCOUT") or iGoodyType == gc.getInfoTypeForString("GOODY_WORKER") or iGoodyType == gc.getInfoTypeForString("GOODY_SLAVE"):
                    
    iMaxPlotUnit pPlot.getNumUnits ()-1
                    
    for i in xrange(iMaxPlotUnit,0,-1):
                        
    pPlotUnit pPlot.getUnit(i)
                        if 
    pPlotUnit.getDomainType ()==gc.getInfoTypeForString("DOMAIN_LAND"):
                            
    pPlotUnit.jumpToNearestValidPlot()
    ###An Land gehen end                                        


  15. #750
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Ne Idee zum Problem habe ich nicht, ich kann nur sowas in der Art vorschlagen:
    Code:
    if iGoodyType in (gc.getInfoTypeForString("A"), gc.getInfoTypeForString("B"),
      gc.getInfoTypeForString("C"), gc.getInfoTypeForString("D"),
      gc.getInfoTypeForString("E"), gc.getInfoTypeForString("F"),
      usw):
        #...
    Macht das gleiche, ist etwas weniger schmerzhaft zu lesen und eventuell sogar schneller. Löst aber keine Probleme

Seite 50 von 271 ErsteErste ... 4046474849505152535460100150 ... LetzteLetzte

Berechtigungen

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