Seite 270 von 271 ErsteErste ... 170220260266267268269270271 LetzteLetzte
Ergebnis 4.036 bis 4.050 von 4063

Thema: Der Pythonthread

  1. #4036
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Ja okay, das meinte ich.

    Hm.... wahrscheinlich müsste man:

    - Rundenbeginn: Alle Einheiten durchgehen und Variable Nichtangegriffen setzen

    - Nach (dem ersten) Kampf mit aktiver Variable und isMadeAttack TRUE wird Trigger ausgelöst und Variable entfernt

    --

    Fall 1:
    Einheit greift zuerst selber an: Startet den Kampf mit Nichtangegriffen, löst Trigger aus, weil isMadeAttack TRUE geworden ist und verliert Variable
    Einheit wird danach angegriffen: Hat Variable nicht und löst den Trigger deshalb nicht aus

    Fall 2:
    Einheit wird zuerst angegriffen: Startet mit Nichtangegriffen, löst Trigger aber nicht aus und verliert auch nicht die Variable, weil isMadeAttack false ist
    Einheit greift danach selber an: Startet den Kampf mit Nichtangegriffen, löst Trigger aus, weil isMadeAttack TRUE geworden ist und verliert Variable
    Einheit wird danach erneut angegriffen: Löst Trigger ebenso nicht aus, weil Variable nicht mehr vorhanden


    Müsste gehen oder? Verbraucht natürlich wieder zusätzliche Ressourcen...

    Edit: Und geht so auch nur einmal pro Runde.

    Edit2: Mit Variable meine ich ScriptData.
    Geändert von Cybah (08. August 2021 um 22:12 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)

  2. #4037
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Angreifen kann ja nur der aktive Spieler.

    Wenns darum geht, dass die Einheit nur beim ersten Angriff irgendwas bekommen soll, dann hab ich in Python bei OnCombatResult eine Liste gemacht, wo ich die Einheit eingefügt habe.
    Wenn die also nochmal angreift, dann wirds ignoriert.

    Ok, in meinem Fall ists bei der Verteidigung. Weil als Aktiver anzugreifen kann man ja meist nur einmal (außer bei Blitzkrieg). Bei der Verteidigung siehts schon anders aus.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  3. #4038
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Ich hab nen Logikproblem oder bin einfach zu müde.... hab aktuell das Problem, dass ich trigger bei meinem ersten Angriff (gewollt) und wenn ich die Runde beende, trigger ich nochmal bei Verteidigung (nicht gewollt).

    Konkret: Hab KI-Einheiten mit Lemming-KI (greift immer an egal welche Kampfchancen) um meine Stadt geparkt. Wenn ich eine davon angreife, triggert es. Wenn ich weitere angreife, dann nicht. Wenn ich die Runde beende, triggert es aber nochmal bevor ich wieder ziehen kann. WTF?

    Code:

    onUnitCreated: Script der Einheit auf 1

    onBeginPlayerTurn: Script aller eigenen Einheiten auf 1
    (^ GRUND DES PROBLEMS!!! ABER WARUM? Also wenn ich das hier ausklammere, kommt kein Verteidigungstriggern zustande ^)

    onCombatResult: Wenn attackcount == 1 (gibt es in BASE) und Script == 1: Trigger und stelle Script auf 0.


    ---


    Es sieht so aus, als wird onBeginPlayerTurn von mir ausgelöst noch bevor die KI wieder am Zug ist und angreifen kann. Deshalb wird das Script wieder auf 1 gesetzt. Was Sinn macht, wenn ich Erstzieher bin. Wenn das so wäre, müsste aber auch attackcount auf 0 zurückgesetzt werden (man kann nach dem unsinnigen Verteidigungstrigger sehen, dass das 0 ist) und dann dürfte nix triggern. Das macht einfach keinen Sinn. Ich verstehe gerade nur Bahnhof. Wie kann das Script auf 1 zurückgesetzt werden bevor die KI angreift, aber nicht attackcount? Oder warum triggert es?
    Geändert von Cybah (09. August 2021 um 00:25 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)

  4. #4039
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zur Sicherheit ein allg. Kommentar, aber vermutlich weißt du das:
    onBeginPlayerTurn wird nicht zum beginn der nächsten Runde ausgelöst sondern am Ende der aktuellen Runde, wenn die Berechnung des Spielerzuges beginnt. Aufgrund des Names nimmt man gerne mal das andere an…

    @onCombatResult: Die KI zieht immer am Rundenbeginn. Kann es sein, dass daher attackcount einfach wieder auf 0 gesetzt ist und dann auf 1 springt, auch wenn die Einheit verteidigt? Dann triggert der zweite KI-Angreifer.

    Aber ohne Code ist es nur Raten.

  5. #4040
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Nach deinem Edit: Wird also vermutlich doch an der Reihenfolge liegen. onBeginPlayerTurn wird ausgelöst bevor die KI-Einheiten angreifen. Wenn du da also zurücksetzt löst es zweimal aus.

  6. #4041
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Wenn ich wieder am Zug bin, kann ich per Weltenbauer sehen, dass der Attackcount der Einheit auf 0 ist.
    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)

  7. #4042
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Nach deinem Edit: Wird also vermutlich doch an der Reihenfolge liegen. onBeginPlayerTurn wird ausgelöst bevor die KI-Einheiten angreifen. Wenn du da also zurücksetzt löst es zweimal aus.
    D.h. das Problem ist eigentlich das Testszenario selbst? Nach dem zweiten Trigger dürfte ich dann in der Runde, wo ich wieder dran bin, nicht nochmal triggern können oder?

    Ändert leider nichts daran, dass das meinen Ursprungswunsch kaputt macht: Es soll ja GAR NICHT beim Verteidigen triggern. Das scheint dann aber unmöglich.

    Edit: Also kann ich nur sowas machen wie: Maximal 1x pro Runde? (unabhängig vom Verteidigen/Angreifen)

    Edit2: Das Fettgedruckte ist tatsächlich so. Also auch durch das Verteidigen wird isMadeAttack bzw. in BASE changeAttackCount ausgelöst. Verdammt. Emoticon: tisch

    Edit3: Muss dann wohl irgendwas mit Bewegungspunkten machen? Die dürften ja zurückgesetzt werden bevor die KI angreift. Ich sollte mal schlafen.
    Geändert von Cybah (09. August 2021 um 00:36 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)

  8. #4043
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Kann man in onCobbatResult nicht erkennen wer der Angreifer ist?!

  9. #4044
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Nope, da gibt es nur Gewinner und Verlierer.

    Also konkret:

    CvEventReporter::getInstance().combatResult(this, pDefender);

    und

    CvEventReporter::getInstance().combatResult(this, pAttacker);

    Wie man sieht 2x dasselbe. This ist immer der Gewinner, das zweite immer der Verlierer. Also wird immer ein Gewinner und ein Verlierer übertragen, man kann aber nicht mehr nachvollziehen, wer mal Angreifer war, weil beides dasselbe Event ist.
    Geändert von Cybah (09. August 2021 um 00:55 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)

  10. #4045
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Bewegungspunkte abfragen geht auch nicht... scheinen erst nach dem Kampf reduziert zu werden. Ich dreh durch. Gute Nacht erstmal.

    Kleines Edit: Bei onBeginPlayerTurn nur Einheiten, die nicht alle Bewegungspunkte haben, Script auf 1 setzen? (geht auch nicht)

    Edit2: Am besten wär's wohl, wenn pAttacker und pDefender aus dem SDK irgendwie ins Python übertragen werden könnten...
    Geändert von Cybah (09. August 2021 um 00:55 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)

  11. #4046
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Die Lösung ist die Übergabe ins Python zu erweitern:

    CvEventReporter::getInstance().combatResult(this, pDefender, true);

    CvEventReporter::getInstance().combatResult(this, pAttacker, false);

    Wobei true oder false angibt, ob "this" (also der Gewinner) der pAttacker war. Also dieses dritte müsste man dann per Python abfragen können. Wie codet man das?
    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)

  12. #4047
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Wegen onBeginPlayerTurn: Ja, solche Sachen wie zurücksetzen von irgendwas musst du in onEndPlayerTurn machen. Schon probiert?
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  13. #4048
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Zitat Zitat von Pie Beitrag anzeigen
    Wegen onBeginPlayerTurn: Ja, solche Sachen wie zurücksetzen von irgendwas musst du in onEndPlayerTurn machen. Schon probiert?
    Gleiches Problem. Muss irgendwie über die SDK-Änderung gehen. Wäre auch das Eleganteste.

    Sollte nicht so schwierig sein, probier ich morgen mal.
    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)

  14. #4049
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    PHP-Code:
    error C2062type 'bool' unexpected 


    Hab's wie bFirstOwned von cityacquired eingebaut und der Compiler spuckt mir diesen Fehler aus -.-

    (müsste eigentlich wohl in den SDK Faden)


    PHP-Code:
                bool bWinnerIsAttacker true;
                
    CvEventReporter::getInstance().combatResult(thispDefenderbool bWinnerIsAttacker); 
    in die ganzen SDK-Dateien fürs Python ist es jedenfalls auch eingebaut.

    Muss das noch irgendwie in die CvUnit.h ? bFirstOwned ist beispielsweise nämlich NICHT in CvPlayer.h, sondern nur in CvPlayer.cpp.


    Edit: Das doppelte bool in CvEventReporter::getInstance musste weg.

    Edit2: FUNKTIONIERT.
    Geändert von Cybah (09. August 2021 um 07:21 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)

  15. #4050
    Registrierter Benutzer Avatar von klops
    Registriert seit
    20.05.16
    Ort
    Hannover
    Beiträge
    4.916


    new feature incoming...

Seite 270 von 271 ErsteErste ... 170220260266267268269270271 LetzteLetzte

Berechtigungen

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