Seite 49 von 271 ErsteErste ... 394546474849505152535999149 ... LetzteLetzte
Ergebnis 721 bis 735 von 4063

Thema: Der Pythonthread

  1. #721
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.077
    Gibt es eine Möglichkeit, dass Python am Ende der Runde (eines Spielers) alle seine Landeinheiten, die ohne Transporter auf See sind, auf das nächste Landfeld setzt? Mein Problem ist derzeit: Wenn man auf einer "unerforschten" Insel in Küstennähe etwas findet, kann jeder normale Mensch die Einheit auch ohne Transporter an Land bewegen. Die KI ist aber zu dumm dazu, sie lässt ihre Krieger und Goldschätze auf dem Wasser stehen. Dort wehren sie sich nicht einmal gegen einen Angriff.

  2. #722
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.623
    Das geht, du musst aber glaub die neue Runde nehmen und dann einen Spieler zurückgehen.

  3. #723
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.077
    Und wo muss ich so etwas einfügen, damit er es macht? Frisst das viel Rechenzeit?

  4. #724
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.623
    da gibts glaub irgendwo einen Befehl oder so:

    onTurnStart diesen machst du und nehmst den Player, und ziehst eins ab. Jetzt hast du den Player der die Runde beendet hat. Du gehst jetzt alles durch wie gewollt und machst deine Sachen.

  5. #725
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.623
    Hmm hab grad was gefunden:

    Code:
    	def onEndGameTurn(self, argsList):
    		'Called at the end of the end of each turn'
    		iGameTurn = argsList[0]
    dürfte wenn ich richtig sehe das Ende des Zuges sein.

    Da sollte es rein...

  6. #726
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Das hieße, man müsste nach jeder Runde alle Einheiten eines Spielers überprüfen...*argh*, das geht für die Performance ja gar nicht.

    Ich denk' mal, bei onImprovementDestroyed müsste man das auch dranhängen können, die Einheit würde dann halt schon in der selben Runde transportiert .
    Kann man natürlich noch eine Runde lang einfrieren, damit's wieder gleichstand ist.
    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)


  7. #727
    o0
    Registriert seit
    22.06.08
    Ort
    Rheinhessen
    Beiträge
    525
    Es gibt auch onGoodyReceived...

  8. #728
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Ups, übersehen .
    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)


  9. #729
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.077
    Das ist ja noch besser. Natürlich soll die Einheit sofort, wenn möglich, verladen werden, aber onGoodyReceived kannte ich auch nicht.
    Es müsste also irgendwie so aussehen:
    PHP-Code:
             if pPlot == water
                prüfe ob eine Landheit erhalten
                wenn pUnit hat freien Frachtraum
                    verlade auf pUnit
                
    else versetze auf nächstes Landteil 
    1. Frage: Weiß jemand, ob man direkt abfragen kann, ob das Gelände Wasser ist, oder muss ich da alle Geländetypen mit getInfoTypeForString abfragen?
    2. wie bekomme ich überprüft, ob eine Landeinheit erhalten wurde bzw. kann ich diese irgendwie identifizieren? Es gibt ja iGoodyType, aber darin ist ja auch nicht die eine Einheit, sagen wir, pUnit2, enthalten. Muss ich vielleicht für pPlot alle Units abfragen, prüfen ob Domain=Land?
    3. hat jemand eine Idee, wie man das automatische Verladen machen könnte? Kennt jemand eine Abfrage, mit der man nachschauen kann, ob die Einheit freien Frachtraum hat?

  10. #730
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Da ich zu faul für großartige weitere Erklärungen bin , hab' ich's mal schnell versucht zusammen zu coden. Hab' allerdings direkt eine Bewegung der Einheit erzwungen, bin zu faul zu testen, ob noch ein freier Transporter auf dem Feld ist :
    PHP-Code:
        def onGoodyReceived(selfargsList):
            
    'Goody received'
            
    iPlayerpPlotpUnitiGoodyType argsList
    ####new code start
            
    if pPlot.isWater():
                if 
    iGoodyType == gc.getInfoTypeForString("GOODY_WARRIOR"):        
                    
    iMaxPlotUnit pPlot.getNumUnits ()-1
                    
    for i in xrange(iMaxPlotUnit,0,-1):
                        
    pPlotUnit pPlot.getUnit(i)
                        if 
    pPlotUnit.getDomainType ()==gc.getInfoTypeForString("DOMAIN_LAND"):
                            if 
    not pPlotUnit.isCargo ():
                                
    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 
    not NewPlot.isWater():
                                            
    pGroup pPlotUnit.getGroup ()
                                            
    pGroup.pushMoveToMission(iXLoop,iYLoop)
                                            break
    ###new code end                                        
            
    if (not self.__LOG_GOODYRECEIVED):
                return
            
    CvUtil.pyPrint('%s received a goody' %(gc.getPlayer(iPlayer).getCivilizationDescription(0)),) 
    einrückung ist wahrscheinlich falsch und ist auch nicht getestet .


    Zu den Fragen:
    1) geht, isWater() .
    2) ja .
    3) ja, kann man auch abfragen, allerdings muss man dann halt auch testen, wem der Transporter gehört und noch ein paar andere Sachen.

    Teste erstmal das oben, dann sehen wir weiter.
    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. #731
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.623
    J: Ich vermute mal das es mit:

    Code:
    # INT getNearestLandArea()
    int ()
    
    # CyPlot getNearestLandPlot()
    CyPlot* ()
    leichter geht das nächste Landfeld zu finden

  12. #732
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Einrückung sieht korrekt aus. Aber wo ich schon dabei bin, mecker ich mal an was anderem rum (): Die () für calls ohne Leerzeichen an den Funktionsnamen, und Leerzeichen zwischen Operatoren (== und , und co.) und Operanden
    Und noch was: xrange(n,m) geht immer noch von n zu m-1 und nicht umgekehrt. Muss also iMaxPlotUnit-1, -1 sein, wie mir der Interpreter grade bestätigt hat.

  13. #733
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Ich würde auch dafür pUnit.jumpToNearestValidPlot() verwenden.

  14. #734
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Jaja, selbst nix machen wollen aber hinterher kräftig rumnörgeln .



    Zitat Zitat von Pie Beitrag anzeigen
    Ich würde auch dafür pUnit.jumpToNearestValidPlot() verwenden.
    Ach, den Befehl gibt's auch?
    Ist natürlich besser .
    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)


  15. #735
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Klar Abgesehen davon haben wir doch schon geklärt, dass ich keine Ahnung von der Civ-API habe?

Seite 49 von 271 ErsteErste ... 394546474849505152535999149 ... LetzteLetzte

Berechtigungen

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