Ergebnis 1 bis 15 von 15

Thema: Event-Call-Verschachtelungen

  1. #1

    Event-Call-Verschachtelungen

    Ich erstelle gerade mein eigenes KS. Da ich aber in jedem Spielevorstellungsthread nur höre "Langweilig, du benutzt Serges KS", habe ich mich entschlossen, dieses KS von Serge nicht zu beachten und von Grund auf was selbst zu machen.
    Klappt soweit auch ganz gut, nur brauche ich nun trotzdem den Rat von Jemandem, der sich schon gut damit auskennt.
    Ich habe vor, alle technischen Bestandteile des KS über Call-Events aufzubauen. Es gibt also ein Start-Callevent, das bei der Monsterbegegnung ausgelöst wird, dieses wird dann gefolgt von einem Kreislauf aus verschiedensten Berechnungs- und Anzeige-Events.
    Es gibt ja allerdings diese Call-in-Call-Grenze, wenn man irgendwie 500 Calls ineinander verschachtelt, dass dann der Maker abstürzt. Das habe ich zwar nicht vor, aber bei den ganzen Loops und Verschachtelungen ist es sehr wahrscheinlich, dass sich irgendwo eine Schlaufe ergibt, wo mindestens ein Event vor seinem Ablauf wieder und wieder gecallt wird. Das heisst, bei längeren Kämpfen könnte das dann durchaus zum Tragen kommen.

    Deshalb frage ich, ob jemand mit diesem Problem zu tun hatte und mir gute Tipps geben kann, wie man so etwas vermeiden könnte... Irgendwie von der Struktur her zB.

    Technische Daten: SKS, bis zu 5 Gegner, bis zu 3 Helden, am Ende insgesamt etwa 20 verschachtelte CEs, momentan 8 verbundene CE.

  2. #2
    die grenze liegt bei 1000. Anstatt ein Event zu machen, was ich permanent selber neu callt, mach nen Cycel rein und das Prob ist vom Tisch. Ich code ähnlich und bei mir ergab sich nie ein Problem.

  3. #3
    Hmm, an sich glaube ich nicht das das zu Problemen führen dürfe. Du musst nur beim erstellen des KS ein bisschen ein Auge darauf haben.
    Was schonmal eine große Hilfe ist:
    Bau gleich am Anfang ein "Manager-Event" auf "Auto Start" (PP geht auch...) ein. Dieses Event regelt den kompletten Kampfablauf und callt die benötigten Events. Z.B. kannst du dort die Berechnung der Zugreihenfolge reinpacken, sodass es auch gleich sinnvoll genutzt wird. Ist jemand am Zug wird "XYZ am Zug" gecallt. Dieses beinhaltet dann die Menüs. Jene callen dann z.B. "Angriff", welcher "Schadensberechnung" callt und dieses braucht dann wieder "Stribt ein Gegner?" und "Angriffsanimation" sowie "Ist Kampf zuende?".
    Danach ist die Reihe an calls ganz einfach zuende und dein Manager-Event ist wieder an der Reihe. Dies hat natürlich für den Maker die folge das ein Event mehr im "Speicher" ist. Das Problem bei Call-Events ist, was du ja auch geschrieben hast, das sie sich alle in den Speicher laden bis sie zuendegelaufen sind. Callt sich also ein Event in einer Schlaufe selber sind irgendwann 1000 Events im Speicher und der Maker stürzt wegen Überlastung, bzw. der desshalb gesetzten Höchstgrenze ab (aber das sagtest du ja schon ).

    Fazit:
    Mach ruhig dein KS mit Call-Events, an sich habe ich es noch nie erlebt das dabei eine Schlaufe entstand (erst recht nicht wenn du das Manager-Event benutzt).

    mfg
    Phönix Tear

    @DR_Zeph:
    Um Call-Events zu vermeiden bräuchte man eine ganze Masse an PP Events die per Switch aktiviert werden, oder man müsste alles in ein Event packen, und das ist viel zu unübersichtlich (außerdem wird der Maker (bei mir zumindest) ab ca. 400 Codezeilen extrem langsam wenn man noch was einfügen will...)
    Uaaah, cycle = böse \o/. Ich benutz lieber einen Label. Find ich nicht so statisch wie den vorgegebenen cycle...

    Geändert von Phönix Tear (05.10.2006 um 17:16 Uhr)

  4. #4
    du hast mich falsch verstanden.

    Zitat Zitat
    wo mindestens ein Event vor seinem Ablauf wieder und wieder gecallt wird.
    Diese Zeile legte ich so aus, das er vorhat ein Event permanent sich selber zu callen, was ja nun durch einen Cycel in einem Event sicherlich sinniger zu lösen ist, da man diesen erst unterbrechen lässt, wenn das ganze Event vorbei ist.

    Zitat Zitat
    Find ich nicht so statisch wie den vorgegebenen cycle...
    Das Label schneller ablaufen ist sicherlich auch noch erwähnenswert, nur wollte ich vermeiden zuschreiben, einen mit Label gestalteten Cycel...


    Btw. hab ich mal ein Tut zur Umsetzung einer Ablaufkette im Maker geschrieben, was quasi dein gewünschtes Verfahren darstellt. Behandelt wird Pixelmovement. Vll. schaust du mal rein, unbedingt negativ ist es sicherlich nicht.

    http://forum.rpg2000.4players.de/vie...739&highlight=

  5. #5
    Thx für die Hilfe Das Tut werd ich mir mal anschauen.
    So naiv, ein sich selbst callendes Event zu machen, bin ich natürlich nicht. Vielmehr habe ich folgende Sorge:

    Meine Events:

    - Teleport auf KS-Map
    Legt einige wichtige Startparameter fest, merkt sich Position des Helden und warpt dann auf KS-Map. am Schluss wird "Startscript" gecallt.

    -Startscript
    Hier werden die von mir zuvor einzeln zusammengebastelten Startevents gecallt, das "Gegnerevent" (Lässt Gegner erscheinen und weist ihnen Werte zu), und das "Aktualisieren" (Zerlegt die Werte HP und MP aller Helden in einzelne Stellen, für das Interface. Rechnet dazu noch die Prozentwerte für die Balken aus). Aktualisieren setzt sich wiederum aus zwei anderen Events zusammen, welche die gewünschten Umrechnungen mit Platzhaltern vornehmen. Am Ende des Scripts wird dann erstmals die "Zugreihenfolge" gecallt.

    -Zugreihenfolge
    Hier wird ausgerechnet, wer an die Reihe kommt. Das Ganze habe ich so gelöst, dass ich für jeden Kampfteilnehmer einen "Punktepool" in Form einer Variable erstellt habe. Die wird in einem Cycle immer weiter hochgezählt und sobald eine gewisse Grenze überschritten wurde, wird der Grenzwert von ihr abgezogen. Klappt ganz gut. Jedenfalls wird dann ein Switch "Kampfteilnehmer X am zug" On gesetzt und der Cycle verlassen. Am Ende des Cycles wird das "Zugbestimmer-Event" gecallt.

    -Zugbestimmer
    Je nachdem, wer am Zug ist, wird der entsprechende Kampfteilnehmer kurz animiert und kann dann seinen Zug beginnen. So weit habe ich momentan gescriptet.

    Nun habe ich Angst, dass irgendwo einmal irgendein Event niemals enden könnte. Gedacht ist ja, dass Event A Event B callt, dieses callt C, das läuft zuende, dann läuft B zuende, dann geht A weiter.... Bis halt alles wieder von vorne wiederholt wird, ohne ein Event offen zu lassen.
    Nun könnte es aber passieren, dass Event A Event B callt, dieses C callt und dieses wiederum A callt (Viel komplexer natürlich, aber nur mal um zu zeigen was ich meine...)

    Das mit dem Masterevent find ich eine gute Idee, das könnte aber auch ein Call-Event in einem Cycle sein, welches gleich am Anfang gecallt wird...?

  6. #6
    Da irgendwann bei dir die Charaktere mit dem Zug drankommen, müßte es doch immer einen Zeitpunkt geben in dem alle Events außer dem zur Aktionsabfrage terminiert worden sind. Normalerweise solltest du dort nicht an die 1000er Grenze kommen.

  7. #7
    Stimmt schon, vielleicht mache ich mir auch einfach zu viele Sorgen... Ich werde das ganze mal fertigscripten, ausführlich testen und den Thread hier aktualisieren, falls das Problem dann auftauchen sollte.
    Danke für die Tipps und das Tutorial fürs Pixelmovement

  8. #8
    wenn man gaaaaaanz lang serges ks spielt, dann kommt man reichlich bald an die 1000er-grenze. vorallem, wenn man vorher die zeit, die zur vorhandenen zeit addiert wird, bis man drankommt, ein bischen verringert, geht das ziemlich schnell, wirklich.

  9. #9
    Dann ist dieses sagenumwobene KS von Serge ja scheinbar doch nicht unfehlbar o.O Naja, wie gesagt, da in jeder Spielevorstellung mit eigenem KS nur steht "Warum kopiert ihr alle Serges KS" hab ich mich dazu entschlossen, ein SKS ohne Einfluss von diesem Ks von Serge zu machen. Dann hoffe ich, dass auch dieser Fehler bei mir net auftaucht^^ Bin jetzt jedenfalls alles turnbased am Verschachteln, also dass jedes mal, wenn der Zug eines Spielers oder Gegners beendet ist, damit auch alle offenen gecallten Events fertig werden und das ganze so jede Runde von vorne losgeht... Sollte klappen.

  10. #10
    Ich glaube, der besagte "Fehler" in Serges KS ist denkbar einfach und noch einfacher zu vermeiden. Er liegt in dem rekursiven Aufruf seines Common Events "ATB Verfahren". Dieses ruft sich nämlich am Ende immer wieder selbst auf, d.h. dieses Event hat niemals die Chance durchzulaufen (und den Prozess abzuschließen), ohne dass es sich selbst wieder neu aufruft (während der Durchlauf davor noch NICHT beendet ist!!). Das geht gut, wenn der Kampf kurz genug ist. Sollte der Kampf aber erfordern, dass dieses Common Event sich 1000mal aufrufen muss, dann stürzt der Maker ab.
    Dies passt auch zur Aussage von Marian, dass es schneller geht, wenn man die Agilität-Werte, die zum ATB-Balken addiert werden, herunterschraubt. Das ATB-Event muss sich öfter aufrufen, weil es länger dauert, bis mal jemand dran ist.

    Geändert von S!r !ronh@nd (08.10.2006 um 15:34 Uhr)

  11. #11
    Das wäre in diesem Fall ganz einfach zu vermeiden, indem man (wie ich das in mienem KS gemacht habe) die rekursive Funktion, also den Selbstcall am Ende des Turnscriptes, entfernt, und stattdessen ein PP macht, welches nur den Befehl <Call Event: "Turnscript"> beinhaltet... So wird immer erst jedes CallEvent beendet, bevor ein neuer Zug beginnt.

  12. #12
    yep, oder man macht es so wie Serge und regelt es aber anstatt der Rekursion einfach über ein Label oder einen Cycle. Kann man sich aussuchen. Allerdings mag ich diesen Aufbau des KS eh nicht so, da man dort immer nur ein passives ATB erhält (Balken laufen nicht, während man Aktionen auswählt und ausführt). Um das flexibel einstellen zu können, empfiehlt es sich aus meiner Sicht auf jeden Fall, den Weg über ein unabhängiges PP-Event, das die Balken auffüllt, zu wählen.

    Geändert von S!r !ronh@nd (11.10.2006 um 07:57 Uhr)

  13. #13
    Ich hab eh ein rein turnbasiertes (iiiks.. deutsches englisch) KS ohne Timeleiste...
    Das schwierigste ist es aber imo, den Helden und Monstern passende Animationen zuzuweisen... also das Picture alle 0.3 Sekunden auswechseln, damit es so aussieht, als atmen die Dinger, dann aber, falls jemand stirbt, im passenden Moment die Sterbeani und dann das Liegenbleiben, bei der Wiederbelebung wieder was anderes etc... Und dann das richtige Animationstiming, wenn eine Attacke oder ein Skill kommt... Um die Posen zu regeln, brauch ich bis jetzt für 3 fixe Helden (ohne Angriffe, Skills und Items) schon 9 CEs, das kann ja nicht der Sinn sein...

  14. #14
    Zitat Zitat von Noshire Beitrag anzeigen
    Ich hab eh ein rein turnbasiertes (iiiks.. deutsches englisch) KS ohne Timeleiste...
    Das schwierigste ist es aber imo, den Helden und Monstern passende Animationen zuzuweisen... also das Picture alle 0.3 Sekunden auswechseln, damit es so aussieht, als atmen die Dinger, dann aber, falls jemand stirbt, im passenden Moment die Sterbeani und dann das Liegenbleiben, bei der Wiederbelebung wieder was anderes etc... Und dann das richtige Animationstiming, wenn eine Attacke oder ein Skill kommt... Um die Posen zu regeln, brauch ich bis jetzt für 3 fixe Helden (ohne Angriffe, Skills und Items) schon 9 CEs, das kann ja nicht der Sinn sein...
    Also ich mache das so. Ich habe 3 Events, fuer jeden Hero einen. Diese haben ein Loop mit deren Atem Animation. Diese Loops werden nun unterbrochen, wenn eine Attacke folgt, der Hero stirbt etc. Vielleicht hilft dir das weiter...

  15. #15
    Habs jetzt entsprechend abgeändert. Also für jeden Helden ein Call-Common. Am Anfang werden die gecallt und laufen mit geloopten Animationen weiter, solange die Helden atmen oder tot sind. Wenn sie einen Move machen, wird ein Skillanimationsdurchlauf gemacht, danach gehts wieder zum normalen zurück.
    Nur ist das Problem, dass ich nicht genau weiss, wie ich das Angriffskommando mit der Schlaganimation synchronisieren kann, da in diesen Loops zB beim Atmen ja immer ein bisschen gewaitet wird und dadurch zwischen Druck auf Enter und Angriffsanimation Unstimmigkeiten von bis zu 0.3 sec entstehen...

Berechtigungen

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