Seite 55 von 271 ErsteErste ... 54551525354555657585965105155 ... LetzteLetzte
Ergebnis 811 bis 825 von 4063

Thema: Der Pythonthread

  1. #811
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Aus dem selben Grund den du anführst würd' ich ja behaupten, dass das der Owner vom Missionar ist .
    Wissen tue ich's aber nicht .

    das könnt' ich an irgendeinen Trait dranhängen, 100% Verbreitungschance für Missionare.
    Oder ist das deine Idee ?
    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. #812
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.454
    wenn, dann müsstest du das wohl bei onUnitSpreadReligionAttempt einstellen. das gibts auch und da wird auch der missionar überprüft. das hier sieht danach aus, dass es nur aktiv wird, wenn eine religion erfolgreich verbreitet wird - wodurch auch immer. entsprechend ists wahrscheinlich der owner von der stadt. kannst du vielleicht hier rauslesen, wer iOwner ist?

    PHP-Code:
            player PyPlayer(iOwner)
            if (
    not self.__LOG_RELIGIONSPREAD):
                return
            
    CvUtil.pyPrint('%s has spread to Player %d Civilization %s city of %s'
                
    %(gc.getReligionInfo(iReligion).getDescription(), iOwnerplayer.getCivilizationName(), pSpreadCity.getName())) 

    edit:
    has spread to Player %d Civilization
    ist die zweite variable, "to"... also der owner der stadt.
    Geändert von Cybah (21. Juni 2010 um 13:37 Uhr)
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  3. #813
    Registrierter Benutzer Avatar von Sir_Error
    Registriert seit
    28.09.08
    Beiträge
    802
    Hallo Leute.
    Ich würde in meine Mod gerne ein paar historische Kriegserklärungen einfügen. Am liebsten über Events, da ich dem menschlichen Spieler die Auswahl lassen will, ob er es macht oder nicht. Über reines XML bei Events gehts ja nicht, also vielleicht mit Hilfe von Python.

    Kleines Beispiel: Spieler 4 soll in Runde 10 Spieler 7 den Krieg erklären

    EventTriggers:

    HTML-Code:
     <iPercentGamesActive>100</iPercentGamesActive> 
     <iWeight>-1</iWeight> 
    
     <bPickPlayer>1</bPickPlayer> 
     <PythonCanDo>canTriggerDeclareWar</PythonCanDo>
    
     <bRecurring>0</bRecurring> 


    Code:
    def canTriggerDeclareWar(argsList): 
    
       kTriggeredData = argsList[0]
    
       player = gc.getPlayer(kTriggeredData.ePlayer) 
       turn = kTriggeredData.iTurn
    
    
    
       if player == player4 and turn == 10:	(wie geht da die genau Syntax? "if player.getID() == 4" ?) 
          return true
    
       return false
    EventInfos:

    HTML-Code:
    <bDeclareWar>1</bDeclareWar>
    damit würde ja Spieler 4 in Runde 10 irgend einem Spieler den Krieg erklären, oder?
    Man kann ja den anderen Spieler z.B. in der PythonCallback Funktion abrufen.
    Code:
    otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
    Kann ich den Spieler auch ändern und dem Event wieder zurückgeben?
    Oder muss die Kriegserklärung komplett über Python laufen?

    Wohin müsste ich die canDeclareWar Funktion kopieren?

    Ich hoffe ich liege nicht komplett daneben...
    Gruß Sir_Error

  4. #814
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    PHP-Code:
    def canTriggerDeclareWar(argsList): 

       
    kTriggeredData argsList[0]

       
    player gc.getPlayer(kTriggeredData.ePlayer
        
    otherPlayer gc.getPlayer(kTriggeredData.eOtherPlayer)
       
    turn kTriggeredData.iTurn



       
    if player.getID() == and otherPlayer.getID()==and turn == 10:
          return 
    true

       
    return false 
    (wahrscheinlich falsch eingerückt , zu faul zum überprüfen)

    mit player.getCivilizationType()==gc.getInfoTypeForString("CIVILIZATION_XY") geht sowas etwas komfortabler.

    Auch solltest du bRecurring auf 1 setzen, sonst wird die Kalkulation nur einmal in Runde 1 durchgeführt und danach nie wieder.
    Da du die Runde bereits auf 10 festgelegt hast, sollte auch ein Aufruf in jeder Runde zu keiner Konfussion führen.
    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)


  5. #815
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Einrückung war diesmal tatsächlich falsch (Leerzeichen und Tabs mischt man nicht, das ist ne Todsünde ), so* gehört es:
    PHP-Code:
    def canTriggerDeclareWar(argsList): 
        
    kTriggeredData argsList[0]
        
    player gc.getPlayer(kTriggeredData.ePlayer
        
    otherPlayer gc.getPlayer(kTriggeredData.eOtherPlayer)
        
    turn kTriggeredData.iTurn

        
    if player.getID() == and otherPlayer.getID() == and turn == 10:
            return 
    true
        
    return false 
    *kein Reklamationsrecht bei Tippfehlern oder Verpenntheit des Lektors. Semantische Analyse und das Auffinden logischer Fehler gehören nicht zum Aufgabenbereich des Lektors. Alle Rechte vorbehalten.

  6. #816
    Registrierter Benutzer Avatar von Sir_Error
    Registriert seit
    28.09.08
    Beiträge
    802
    Super Danke erstmal.

    PHP-Code:
    if player.getID() == and otherPlayer.getID() == and turn == 10
    Da kann ich mir nicht vorstellen, dass es geht. Gut, ich hab aber auch keine Ahnung wann, wie und wo die Events überprüft werden. Ich teste das einfach mal.

    Gruß Sir_Error

  7. #817
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Wieso sollte es nicht gehen? Jedes mal, wenn das Event getriggert wird, ruft die Engine diese Python-Funktion auf und gibt ihr die relevanten Daten für das aktuelle Event (wer, wen, was, wie, wo, wann, usw).

  8. #818
    Registrierter Benutzer Avatar von Sir_Error
    Registriert seit
    28.09.08
    Beiträge
    802
    Mein Gedanke war halt, dass das Event in Runde 10 nicht sooft aufgerufen wird, bis dann zufällig mal die Spieler übereinstimmen. Die werden doch zufällig bestimmt, oder?
    Ich bin immer davon ausgegangen, dass pro Spielerzug einmal die Events überprüft werden ob die Vorraussetzungen passen. Dann wäre es ja schon nur zufall, wenn der otherPlayer Spieler 7 wäre. Aber wie gesagt, ich weiß ja nicht wie das wirklich abläuft.
    Bei meinem ersten, schnellen Test gestern gings nicht, aber das kann noch an allem Möglichen liegen...

    Gruß Sir_Error

  9. #819
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    okay, könntest recht haben.

    Wenn nicht, musst du halt die Events von Hand triggern .
    Guck dir im CvEventManager nach onCityRazed mal an, wie der Partisanen-Event getriggert wird, sollte sich übertragen lassen.
    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)


  10. #820
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Wäre es irgendwie machbar, dass ein Missionar, der die "Favorite_Religion" eines Leaders verbreiten soll, immer erfolgreich ist, sobald er eine Stadt dieses Leaders betritt? Wenn möglich sogar trotz Verbreitungsverbot durch Theokratie?

  11. #821
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    An Theo vorbei geht mMn nicht.
    Edit: Moooment: Ich hab' das jetzt als beim verbreiten interpretiert. Scheint mir jetzt aber so, dass du meinst, wenn der Missionar jetzt echt nur in die Stadt reinläuft.
    Für ersteres wäre unten der Code.


    Sonst geht das:
    PHP-Code:
        def onUnitSpreadReligionAttempt(selfargsList):
            
    'Unit tries to spread religion to a city'
            
    pUnitiReligionbSuccess argsList

            iX 
    pUnit.getX()
            
    iY pUnit.getY()
            
    pPlot CyMap().plot(iXiY)
            
    pCity pPlot.getPlotCity()
    ###100% falls favorite religion
            
    pPlayer gc.getPlayer(pCity.getOwner())
            
    iLeader pPlayer.getLeaderType ()
            
    pLeader gc.getLeaderHeadInfo(iLeader)
            
    iFavoriteReligion pLeader.getFavoriteReligion ()
            if 
    iReligion == iFavoriteReligion and not bSuccess:
                
    pCity.setHasReligion(iReligion,True,True,True
    kriegst hierbei allerdings ne doppelte Meldung, falls im Normalfall die Verbreitung fehlgeschlagen wäre, dann wird nämlich beides gemeldet.
    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)


  12. #822
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Nun, ich meinte schon beim Verbreiten. Wenn das bei Theokratie nicht geht, auch gut. Immerhin wird so schon die bevorzugte Religion etwas aufgewertet. Danke, ich teste es sofort.

  13. #823
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    So, wie es jetzt ist, konnte ich im Test jede Religion ohne Einschränkung verbreiten - auch Taoismus bei einem Leader, der Staatsreligion Hellenismus hatte und als Favorite Religion Judentum, während einer Phase der Theokratie. Das war natürlich nicht Sinn der Sache.

    Edit:
    Ich habe einmal diese Zeile
    if iReligion == iFavoriteReligion and not bSuccess:
    in
    if iReligion == iFavoriteReligion
    geändert. Jetzt wurde mein Christlicher Missionar in der Theokratie geblockt, während der jüdische Missionar trotz Staatsreligion "Hinduismus" und Theokratie erfolgreich blieb, weil der Leader Favorite: Judaism hat. Auch die gescheiterten Bekehrungen mit jüdischen Missionaren ohne Theokratie waren erfolgreich. Danke, The_J!
    Geändert von Kathy (25. Juni 2010 um 20:25 Uhr)

  14. #824
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Hast du das mit oder ohne aktivierter "Freie Religionswahl" getestet?

    Edit: gut, dass es klappt.
    Allerdings verstehe ich nicht, warum not bSuccess da den Unterschied macht .
    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. #825
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.020
    Ohne "Freie Religionswahl". Wieso? Und: hat sich das vielleicht durch mein Edit jetzt erledigt?

Seite 55 von 271 ErsteErste ... 54551525354555657585965105155 ... LetzteLetzte

Berechtigungen

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