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 ?
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)
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(), iOwner, player.getCivilizationName(), pSpreadCity.getName()))
edit:
ist die zweite variable, "to"... also der owner der stadt.has spread to Player %d Civilization
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 [E]: HIER (klick mich!) (Stand: 08.06.2024)
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>
EventInfos: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
damit würde ja Spieler 4 in Runde 10 irgend einem Spieler den Krieg erklären, oder?HTML-Code:<bDeclareWar>1</bDeclareWar>
Man kann ja den anderen Spieler z.B. in der PythonCallback Funktion abrufen.Kann ich den Spieler auch ändern und dem Event wieder zurückgeben?Code:otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
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
(wahrscheinlich falsch eingerückt , zu faul zum überprüfen)PHP-Code:
def canTriggerDeclareWar(argsList):
kTriggeredData = argsList[0]
player = gc.getPlayer(kTriggeredData.ePlayer)
otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
turn = kTriggeredData.iTurn
if player.getID() == 4 and otherPlayer.getID()==7 and turn == 10:
return true
return false
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)
Einrückung war diesmal tatsächlich falsch (Leerzeichen und Tabs mischt man nicht, das ist ne Todsünde ), so* gehört es:
*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.PHP-Code:
def canTriggerDeclareWar(argsList):
kTriggeredData = argsList[0]
player = gc.getPlayer(kTriggeredData.ePlayer)
otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
turn = kTriggeredData.iTurn
if player.getID() == 4 and otherPlayer.getID() == 7 and turn == 10:
return true
return false
Super Danke erstmal.
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.PHP-Code:
if player.getID() == 4 and otherPlayer.getID() == 7 and turn == 10:
Gruß Sir_Error
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).
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
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)
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?
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:
kriegst hierbei allerdings ne doppelte Meldung, falls im Normalfall die Verbreitung fehlgeschlagen wäre, dann wird nämlich beides gemeldet.PHP-Code:
def onUnitSpreadReligionAttempt(self, argsList):
'Unit tries to spread religion to a city'
pUnit, iReligion, bSuccess = argsList
iX = pUnit.getX()
iY = pUnit.getY()
pPlot = CyMap().plot(iX, iY)
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)
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)
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.
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
inif iReligion == iFavoriteReligion and not bSuccess:
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!if iReligion == iFavoriteReligion
Geändert von Kathy (25. Juni 2010 um 20:25 Uhr)
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)
Ohne "Freie Religionswahl". Wieso? Und: hat sich das vielleicht durch mein Edit jetzt erledigt?