Seite 6 von 7 ErsteErste ... 234567 LetzteLetzte
Ergebnis 76 bis 90 von 104

Thema: Partisanen-Event abändern

  1. #76
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Füg' mal am Ende der letzten Zeile noch ein
    PHP-Code:
    and (pCity.getPreviousOwner() == pCity.getOriginalOwner ()) 
    Das wäre die einfache Methode, nur für den Gründer der Stadt halt.

    über Kultur wäre
    PHP-Code:
    and (pCity.getCultureTimes100(iPlayer)> XYZ
    Befehl ist nur geraten, k.A. was der macht, steht aber im API, und ich rate mal, dass das die Prozent sein sollen. XYZ natürlich durch eine Zahl ersetzen.
    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. #77
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.022
    Danke, The_J! Wenn es nur für den Originalbesitzer gilt, ist das auch schon okay.

  3. #78
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Die Idee mit den Partisanen finde ich super. Allerdings muss ich jetzt nochmal nachfragen, ob es genügt, den zuletzt von Kathy geposteten Code bei 'onCityAcquiredAndKept' einzufügen oder ob nun doch andere Verwicklungen zu berücksichtigen sind. Danke!

  4. #79
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.022
    Nun, zunächst genügt dies, um das Partisanenevent auch bei einer Stadteroberung aktiv werden zu lassen. Allerdings funktioniert es so wie im Originalspiel, wenn eine Stadt niedergebrannt wurde, es wird nicht immer aktiv. Das wird über die Civ4Eventtrigger.xml gesteuert.
    Im Original sieht das so aus:
    PHP-Code:
            <EventTriggerInfo>
                <
    Type>EVENTTRIGGER_PARTISANS</Type>
                <
    WorldNewsTexts>
                    <
    Text>TXT_KEY_EVENTTRIGGER_PARTISANS</Text>
                </
    WorldNewsTexts>
                <
    TriggerTexts>
                    <
    TriggerText>
                        <
    Text>TXT_KEY_EVENT_TRIGGER_PARTISANS_1</Text>
                        <
    Era>NONE</Era>
                    </
    TriggerText>
                </
    TriggerTexts>
                <
    bSinglePlayer>0</bSinglePlayer>
                <
    iPercentGamesActive>100</iPercentGamesActive>
                <
    iWeight>-2</iWeight>
                <
    bProbabilityUnitMultiply>0</bProbabilityUnitMultiply>
                <
    bProbabilityBuildingMultiply>0</bProbabilityBuildingMultiply>
                <
    Civic>CIVIC_EMANCIPATION</Civic>
                <
    iMinTreasury>0</iMinTreasury>
                <
    iMinPopulation>0</iMinPopulation>
                <
    iMaxPopulation>0</iMaxPopulation>
                <
    iMinMapLandmass>0</iMinMapLandmass>
                <
    iMinOurLandmass>0</iMinOurLandmass>
                <
    iMaxOurLandmass>-1</iMaxOurLandmass>
                <
    MinDifficulty>NONE</MinDifficulty>
                <
    iAngry>0</iAngry>
                <
    iUnhealthy>0</iUnhealthy>
                <
    UnitsRequired/>
                <
    iNumUnits>0</iNumUnits>
                <
    iNumUnitsGlobal>0</iNumUnitsGlobal>
                <
    iUnitDamagedWeight>0</iUnitDamagedWeight>
                <
    iUnitDistanceWeight>0</iUnitDistanceWeight>
                <
    iUnitExperienceWeight>0</iUnitExperienceWeight>
                <
    bUnitsOnPlot>0</bUnitsOnPlot>
                <
    BuildingsRequired/>
                <
    iNumBuildings>0</iNumBuildings>
                <
    iNumBuildingsGlobal>0</iNumBuildingsGlobal>
                <
    iNumPlotsRequired>0</iNumPlotsRequired>
                <
    bOwnPlot>0</bOwnPlot>
                <
    iPlotType>-1</iPlotType>
                <
    FeaturesRequired/>
                <
    TerrainsRequired/>
                <
    ImprovementsRequired/>
                <
    BonusesRequired/>
                <
    RoutesRequired/>
                <
    ReligionsRequired/>
                <
    iNumReligions>0</iNumReligions>
                <
    CorporationsRequired/>
                <
    iNumCorporations>0</iNumCorporations>
                <
    bPickReligion>0</bPickReligion>
                <
    bStateReligion>0</bStateReligion>
                <
    bHolyCity>0</bHolyCity>
                <
    bPickCorporation>0</bPickCorporation>
                <
    bHeadquarters>0</bHeadquarters>
                <
    Events>
                    <
    Event>EVENT_PARTISANS_1</Event>
                    <
    Event>EVENT_PARTISANS_2</Event>
                </
    Events>
                <
    PrereqEvents/>
                <
    bPrereqEventPlot>0</bPrereqEventPlot>
                <
    OrPreReqs/>
                <
    AndPreReqs/>
                <
    ObsoleteTechs/>
                <
    bRecurring>1</bRecurring>
                <
    bTeam>0</bTeam>
                <
    bGlobal>0</bGlobal>
                <
    bPickPlayer>0</bPickPlayer>
                <
    bOtherPlayerWar>0</bOtherPlayerWar>
                <
    bOtherPlayerHasReligion>0</bOtherPlayerHasReligion>
                <
    bOtherPlayerHasOtherReligion>0</bOtherPlayerHasOtherReligion>
                <
    bOtherPlayerAI>0</bOtherPlayerAI>
                <
    iOtherPlayerShareBorders>0</iOtherPlayerShareBorders>
                <
    OtherPlayerHasTech>NONE</OtherPlayerHasTech>
                <
    bPickCity>0</bPickCity>
                <
    bPickOtherPlayerCity>0</bPickOtherPlayerCity>
                <
    bShowPlot>1</bShowPlot>
                <
    iCityFoodWeight>0</iCityFoodWeight>
                <
    PythonCanDo/>
                <
    PythonCanDoCity/>
                <
    PythonCanDoUnit/>
                <
    PythonCallback/>
            </
    EventTriggerInfo
    Neben dem Verlust der Stadt ist dabei Voraussetzung, dass man die Civic "Emanzipation" hat. Die habe ich auf NONE gesetzt, damit das Ereignis immer eintrifft, und statt dessen (da das Event sonst nicht eintritt, soweit ich weiß) eine Technologie als Voraussetzung eingefügt - dazu kannst du dich an einem anderen Event orientieren, das eine Technologie verlangt.

  5. #80
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Ich kam gerade dazu, das einmal zu testen. Es passiert auch was. Leider handelt es sich dabei jedoch um einen Fehler, der einem ähnelt, den ich schon einmal zu anderem Anlass hier diskutiert habe ( http://www.civforum.de/showthread.php?t=71519 ).

    In diesem Fall:

    Traceback (most recent call last):
    File "CvEventInterface", line 23, in onEvent
    File "CVEventManager", line 187, in handleEvent
    File "CvEventManager", line 1180, in onCityAcquiredAndKept
    NameError: global name 'iPlayer' is not defined

  6. #81
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Wir brauchen den kompletten Code von onCityAcquiredAndKept, dann ist das sofort gelöst - irgendwo hat irgendwer sich nicht zwischen zwei Namen entscheiden können.

  7. #82
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Natürlich, hier ist er:

    Code:
    ### partisanen durch Eroberung beginn###        
            	if pCity.getPopulation > 1 and iOwner != -1 and iPlayer != -1:
                		owner = gc.getPlayer(iOwner)
                		if not owner.isBarbarian() and owner.getNumCities() > 0:
                    		if gc.getTeam(owner.getTeam()).isAtWar(gc.getPlayer(iPlayer).getTeam()):
                        			if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error
                            			iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_PARTISANS')
                            			if iEvent != -1 and gc.getGame().isEventActive(iEvent) and owner.getEventTriggerWeight(iEvent) < 0:
                                				triggerData = owner.initTriggeredData(iEvent, true, -1, pCity.getX(), pCity.getY(), iPlayer, pCity.getID(), -1, -1, -1, -1) and (pCity.getPreviousOwner() == pCity.getOriginalOwner ())
    		### partisanen durch Eroberung end###

  8. #83
    Registrierter Benutzer
    Registriert seit
    29.09.10
    Ort
    Hier, wo ich gerade bin
    Beiträge
    112
    Da wird versucht auf iPlayer zuzugreifen, obwohl das überhaupt nicht vorhanden ist. Versuch mal vorne dran

    Code:
    iPlayer = pCity.getPreviousOwner ()
    einzufügen, dann sollte es klappen. Wenn ich nicht grad nen Denkfehler hab, weil ich keinen zugriff auf meinen CIV-PC habe
    `|__|
    `|__|
    |____| <------
    | MET| Das ist Met. Kopiere Met in dein Profil um
    |____| ihm zum Siege über die Alcopops zu
    |____| verhelfen

  9. #84
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Fehlermeldungen folgen in der Tat keine mehr. Allerdings erhält nicht derjenige eine Partisaneneinheit, dessen Stadt erobert wurde, sondern der Angreifer. Das soll natürlich nicht so sein, auch wenn wir schon nah an der Wahrheit sind.

  10. #85
    Registrierter Benutzer
    Registriert seit
    29.09.10
    Ort
    Hier, wo ich gerade bin
    Beiträge
    112
    Dann muss es

    Code:
    pCity.getOwner ()
    statt

    Code:
    pCity.getPreviousOwner ()

    heißen.

    und eventuell sollte noch ein

    Code:
    iOwner = pCity.getPreviousOwner ()
    eingefügt werden.
    `|__|
    `|__|
    |____| <------
    | MET| Das ist Met. Kopiere Met in dein Profil um
    |____| ihm zum Siege über die Alcopops zu
    |____| verhelfen

  11. #86
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Ich habe die Teile jetzt so zusammengefügt:


    Code:
    		### partisanen durch Eroberung beginn###
    		iOwner = pCity.getPreviousOwner () 
    		iPlayer = pCity.getOwner ()		      
            	if pCity.getPopulation > 1 and iOwner != -1 and iPlayer != -1:
                		owner = gc.getPlayer(iOwner)
                		if not owner.isBarbarian() and owner.getNumCities() > 0:
                    		if gc.getTeam(owner.getTeam()).isAtWar(gc.getPlayer(iPlayer).getTeam()):
                        			if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error
                            			iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_PARTISANS')
                            			if iEvent != -1 and gc.getGame().isEventActive(iEvent) and owner.getEventTriggerWeight(iEvent) < 0:
                                				triggerData = owner.initTriggeredData(iEvent, true, -1, pCity.getX(), pCity.getY(), iPlayer, pCity.getID(), -1, -1, -1, -1) and (pCity.getPreviousOwner() == pCity.getOriginalOwner ())
    		### partisanen durch Eroberung end###
    Nun funktioniert alles. Vielen Dank!

  12. #87
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Im Grunde hat ja alles funktioniert, leider gilt das jedoch nicht für den MP-Teil. Denn hier zeigt das Spiel immer OOS-Fehler an, wenn eine Stadt von einer Nation erobert wurde, die über die Voraussetzungs-Technologien verfügt.

    Kann mir dabei jemand helfen? Danke!

  13. #88
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Ich nicht . Ich hab' zwar grob verstanden, wo da das technische Problem liegt, aber hab' keine Ahnung, wie man es praktisch löst (nur theoretisch).
    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)


  14. #89
    Registrierter Benutzer
    Registriert seit
    21.04.07
    Ort
    Im AKW-freien NRW
    Beiträge
    69
    Ich verstehe ja nun mal nicht viel von Python, versuche aber den Code dennoch mal zu verstehen, da das Problem wohl dadurch entsteht, dass bei den if-Abfragen beide Teilnehmer zu verschiedenen Ergebnissen kommen:

    iOwner ist derjenige, der die Stadt verloren hat; iPlayer ist entsprechend der Stadteroberer. Dann folgt die erste Abfrage, die überprüft, ob die Stadtgröße größer 1 ist und ob iOwner und iPlayer nicht gleich -1 sind. An der Stelle weiß ich schon nicht, was damit gemeint ist.

    Im Folgenden wird iOwner zu Owner (warum auch immer das sein muss, wird aber schon stimmen) und überprüft, ob es sich dabei nicht um einen Barbaren handelt und dass die Zivilisation nach dem Stadtverlust überhaupt noch existiert. Dann wird noch abgefragt, ob sich Eroberte und der Eroberer noch im Krieg befinden. Alles in diesem Absatz scheint mir sinnvoll !?!

    Die dann folgende Abfrage wird durch den Kommentar erklärt. Sind diese und die vorangegangenen Abfragen positiv beantwortet wurden, wird das gewünschte Event aufgerufen. Die vorletzte Zeile kann ich gar nicht interpretieren. Von der letzen Zeile nehme ich an, dass sie die Partisanen-Einheiten platziert.

    Möglicherweise interpretiere ich den Code auch falsch, aber ich halte den unterstrichenen Teil verantwortlich für das Problem. Ich hoffe, mir kann jemand sagen, was der Teil macht, sodass ich meine These weiter verfolgen kann oder verwerfen muss.


    P.S.: Ich lasse mich auch gerne über andere Fehlinterpretationen aufklären; vielleicht lerne ich dann noch ein bischen was.

  15. #90
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Alles richtig interpretiert (prinzipiell) , aber das Problem liegt woanders.

    Ja, es kommt zu unterschiedlichen Ereignissen, aber nicht an der Stelle. Der Unterschied ist an der Stelle, an der der Event ausgelöst wird. Diese Abfrage wird an die .exe geschickt, aber nur auf einem der Rechner, nicht auf beiden, das macht hier den Unterschied aus, da der zweite Rechner dies nicht weiß.
    Das kann man theoretisch über die Python-Funktion onModNetMessage in CvEventManager beheben, aber da hört es bei mir mit dem Wissen auf, kein Plan was man da genau machen muss .


    -----
    iOwner oder iPlayer == -1: -1 steht für nicht vorhanden. Das heißt, es ist eine Sicherheitsabfrage, falls irgendwas unvorhergesehenes passiert. Sollte natürlich keine Stadt geben, die keinen Besitzer hat, und sollte auch nicht von einem nicht-vorhandenen Spieler eingenommen werden können, aber man weiß nie, wie Civ das ganze Zeug intern handhabt, deswegen ist es immer besser solche Abfragen zu haben. Nur für den Fall halt.

    ----
    owner = gc.getPlayer(iOwner)
    iOwner = ID des Spielers, also 1, 2, 8, 15, egal, abhängig halt vom Slot in dem der Spieler gestartet ist.
    owner = Der Spieler selbst (ist wie der Unterschied Auto und KFZ-Kennzeichen)
    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)


Seite 6 von 7 ErsteErste ... 234567 LetzteLetzte

Berechtigungen

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