Ergebnis 1 bis 20 von 23

Thema: [DynRPG-Plugin][RM2k3] MessageExtender | BETA

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [DynRPG-Plugin][RM2k3] MessageExtender | BETA

    HeyHey!

    Aufgrund dieses Threads kam zum Thema, dass ein Plugin gewünscht wäre dass Item- und weitere Pointer in Messages ermöglicht. Nun hab ich mich mal rangesetzt und mal mein »Glück« versucht und habe das Teil zwar soweit ausprobiert und bei mir hat auch alles funktioniert, aber ich kann ja nicht alle Situationen nachstellen - deswegen gebe ich das Plugin hier erstmal als »BETA« frei und hoffe, dass ihr das Teil mal fleißig testet^^

    Vielen Dank an:

    - goldenroy, der indirekt den Wunsch nach einem solchen Plugin geäußert hat ^^
    - Cherry, der mir bei der Lösung des Problemes geholfen hat, genau die richtige ScriptLine anzusteuern.

    Das »?« entspricht der jeweiligen ID in der Database, bzw der Map bei den Events.
    Ihr könnt unendlich verschachteln. Es sind also auch Konstrukte, wie z.B.
    Code:
    \D[\v[\v[20]]]
    bauen. Das bedeutet in diesem Fall, dass der Rang des Helden, welcher die ID des Wertes hat, die in der Variable steht, welche die ID des Inhaltes der Variable mit der ID 20 hat. Ich weiß, zu kompliziert erklärt, aber mit fiel auf die Schnelle nichts besseres ein xD

    Es funktioniert in Schleifen und mit PP's. Ich hab's mit 6 PP's getestet und es hat funktioniert.

    Code:
    \B[?] oder \b[?]
        - Switchwert ( 0 oder 1 )
        
    \D[?] oder \d[?]
        - Heldenrang (Degree)
        
    \i[?]
        - Itemname
        
    \I[?]
        - Itembeschreibung
        
    \F[?] oder \f[?]
        - Zustandsname
        
    \a[?]
        - Skillname
        
    \A[?]
        - Skillbeschreibung
        
    \E[?] oder \e[?]
        - Eventname
    !ACHTUNG!
    Es kann zu Fehlern kommen, wenn mehr als zwei PP's gleichzeitig versuchen eine Message anzuzeigen, ohne dass ein EventCommand dazwischen folgt!

    download MessageExtender.zip
    download MessageExtenderSRC.zip


    PeAcE
    MorDen

    Geändert von Morden (21.06.2013 um 20:09 Uhr) Grund: Neue Version -> 1.2

  2. #2
    Zitat Zitat
    Code:
    \s[?]
        - Skillname
        
    \S[?]
        - Skillbeschreibung
    Ähm... S wird doch aber eigentlich schon für das Tempo verwendet. òo

    Zitat Zitat
    Code:
    \B[?] oder \B[?]
    Ich glaube eines der [B]s sollte klein sein.

    Zitat Zitat
    Code:
    \e[?] oder \e[?]
    Ich glaube eines der [e]s sollte groß sein.

  3. #3
    Zitat Zitat von MagicMaker Beitrag anzeigen
    Ähm... S wird doch aber eigentlich schon für das Tempo verwendet. òo


    Ich glaube eines der [B]s sollte klein sein.


    Ich glaube eines der [e]s sollte groß sein.
    Nicht nur das, "c" im Übrigen auch >.< Ich hätte es vorher nochmal durchschauen sollen, bevor ich's aus meinem ImageText Plugin kopiert habe ^^'' Da gab's kein Speed und keine Farbe xDD

    Sorry :/ Hab's korrigiert und ich hoffe, dass ich kein Standard-Kommando vergessen habe. Sollte jetzt funktionieren ^^''

    PeAcE
    MorDen

  4. #4
    morden, y u no src?

    Ich würd mich für deine Lösung des Loopproblems interessieren.

    EDIT: Erweiterungsvorschlag: \v4[123] - gibt min. 4 Stellen aus, mit 0-Padding. Sollte natürlich für \v2 bis \v7 gehen.

  5. #5
    Zitat Zitat von Cherry Beitrag anzeigen
    morden, y u no src?

    Ich würd mich für deine Lösung des Loopproblems interessieren.

    EDIT: Erweiterungsvorschlag: \v4[123] - gibt min. 4 Stellen aus, mit 0-Padding. Sollte natürlich für \v2 bis \v7 gehen.
    Weil der Source mehr als schlecht ist, wie ich finde xDD - und mir vor allem gerade aufgefallen ist dass dort noch einiges fehlt bzw. nicht ganz rund laufen wird - wie gesagt hab den Großteil aus meinem TextImage-Plugin kopiert, was dazu führt, dass nicht alle Maker-Standard-Commands ignoriert werden und deshalb Fehler geworfen werden^^ Aber heute habe ich keine Lust mehr darauf xD

    Das Loop-Problem habe ich ganz einfach mit nem vector gelöst. Da schiebe ich die jeweilige MessageZeile rein, bevor ich sie parse - das passiert ja alles in einem einzigen Command. Und jedes Command frage ich ab, ob der Vector leer ist, wenn nicht dann springe ich so viele Zeilen zurück, wie der vector groß ist und fange an die Lines wieder mit dem alten Text zu ersetzen. Danach leere ich den vector. Und das sollte eigentlich IMMER funktionieren, weil EndOfEvent ja auch ein EventCommand ist, oder nicht?

    Hier der Source:
    ENTFERNT

    EDIT:
    Wahrscheinlich sollte ich aufgrund von PP usw noch die EventId usw speichern und auswerten?

    PeAcE
    MorDen

    Geändert von Morden (19.06.2013 um 20:21 Uhr)

  6. #6
    Tja, es kann aber mehr als ein Skript laufen! Ein PP reicht aus und deine Lösung funktioniert nicht mehr sondern corrupted das andere Event indem irgendwelche Stringparameter überschrieben werden oder, wenn du Pech hast, auf Zeile -1 oder so zugegriffen wird und das Spiel crasht.
    Darum meine Idee, auch wenn sie hacky ist - aber damit sind die Sachen wirklich konkret an eine ScriptLine gebunden!

    EDIT: return false verhindert nur dass die aktuelle Skriptzeile ausgeführt wird, das ist sinnvoll wenn man einen Eventbefehl ersetzen will durch eigenen Code. Sag mal, warum verwendest du am Ende "i = -1" statt "break" um einen Loop zu beenden? Davon abgesehen ist der Source nicht schlecht, da gibts weitaus schlimmeres. Im Falle DynRPG ist es immer erfreulich wenn Source da ist, weil es eh an Beispielen fehlt.

    EDIT2: eventId ist aber nicht verlässlich im Moment, genauso wie pageId... Und selbst wenn das schon gefixt wäre: Du vergisst dass dasselbe Event 2x laufen kann, nämlich wenn es durch zwei verschiedene PPs gecallt wird (oder 1x durch ein PP gecallt wird und 1x ohne ein PP läuft). Und Callstack ist noch nicht implementiert.

    Geändert von Cherry (17.06.2013 um 23:35 Uhr)

  7. #7
    Zitat Zitat von Cherry Beitrag anzeigen
    Tja, es kann aber mehr als ein Skript laufen! Ein PP reicht aus und deine Lösung funktioniert nicht mehr sondern corrupted das andere Event indem irgendwelche Stringparameter überschrieben werden oder, wenn du Pech hast, auf Zeile -1 oder so zugegriffen wird und das Spiel crasht.
    Darum meine Idee, auch wenn sie hacky ist - aber damit sind die Sachen wirklich konkret an eine ScriptLine gebunden!

    EDIT: return false verhindert nur dass die aktuelle Skriptzeile ausgeführt wird, das ist sinnvoll wenn man einen Eventbefehl ersetzen will durch eigenen Code. Sag mal, warum verwendest du am Ende "i = -1" statt "break" um einen Loop zu beenden? Davon abgesehen ist der Source nicht schlecht, da gibts weitaus schlimmeres. Im Falle DynRPG ist es immer erfreulich wenn Source da ist, weil es eh an Beispielen fehlt.
    Das ist mir auch gerade aufgefallen xD Und du meintest ja irgendwann mal, dass sich EventId usw nicht zuverlässig abfragen lassen - zumindest hab ich das irgendwann mal gelesen. Wie gesagt, das wäre sonst vielleicht auch noch ne Idee, zumindest für Map-Events - bei CE's gibt's ja keine eindeutige Identifizierung, außer vielleicht die DatabaseID.

    Wahrscheinlich wäre deine Lösung aber momentan wirklich das effektivste.

    Ich habe ehrlich gesagt keine Ahnung warum ich das gemacht habe xD Wahrscheinlich war ich nicht ganz da oder so

    PeAcE
    MorDen

  8. #8
    So, nachdem Cherry und ich auf 'ne gute Lösung für das Problem mit PP's usw. kamen, hab ich das Ganze jetzt mal soweit fertig gemacht. Ich hab's mit 6 PP's getestet und es funktioniert.

    Leider gibt es aber einen Fall, bei dem das Ganze nicht funktioniert, bzw. wo es zu Fehlern kommen kann. Nämlich dann, wenn zwei PP's gleichzeitig eine Message anzeigen wollen und dies unmittelbar nacheinander geschiet - also ohne, dass eine Eventzeile dazwischen ausgeführt wird. Aber ich denke, dass kann man verhindern und das wird auch nicht allzu oft vorkommen ^^''

    Hab den ersten Post aktualisiert. Für Interessierte gibt's dort auch den Source - den hab ich mal ein wenig kommentiert.

    PeAcE
    MorDen

  9. #9
    Zitat Zitat
    Code:
                    if( id > 0 && id <= RPG::map->events.count() )
                        return RPG::map->events[id]->getName();
                    break;
    Keine gute Idee. Angenommen eine Map hat die Events 1, 2, 5 und 9. RPG::map->events.count() ist dann 4. \e[5] und \e[9] werden also fehlschlagen. Besser: if(RPG::map->events[id]) bzw. RPG::Event *event = RPG::map->events[id] und dann if(event) return event->getName()

    Technisch betrachtet trifft das auch auf Actors und andere NamedCatalogPtr-Typen zu (count() sollte da nur für das Iterieren über alle, mit ->list[i], verwendet werden), aber bei denen sind eigentlich immer die IDs mit 1 beginnend ohne Lücken vorhanden.

  10. #10
    Zitat Zitat von Cherry Beitrag anzeigen
    Keine gute Idee. Angenommen eine Map hat die Events 1, 2, 5 und 9. RPG::map->events.count() ist dann 4. \e[5] und \e[9] werden also fehlschlagen. Besser: if(RPG::map->events[id]) bzw. RPG::Event *event = RPG::map->events[id] und dann if(event) return event->getName()
    Hab's schon korrigiert, aber noch nicht updated -> Wollte nicht kurz danach schon wieder nen Update schmeißen. Merke aber gerade, dass das wirklich nicht so trivial ist, wie ich dachte. Lade das korrigierte denn heute Abend auf jeden Fall hoch (wegen der Events-Sache).

    In der nächsten Version will ich dann noch deine Idee mit dem Padding umsetzen, Cherry. Und meinst du, es wäre performancetechnisch groß problematisch, wenn ich zwei Pointer speichern würde (in einem [2]-Array) und dann jeweils beide überprüfen lasse? So würde die Sache mit den PP's zumindest bei zwei parallelen Events aus der Welt geschafft sein, oder nicht? Denn ich denke nicht, dass jemand mehr als zwei PP's hat, die gleichzeitig eine Message anzeigen wollen.

    PeAcE
    MorDen

  11. #11
    Sollte keinen großen Unterschied machen.

  12. #12
    Gibt es \v und \n nicht schon vom Maker aus? Ansonsten eine sehr hilfreiches Plugin, wird bestimmt gut Verwendung finden (Falls es denn funktioniert, ist ja schließlich Beta). (:

    Oh, und zusätzlich zu MagicMakers Post wird "\c" schon für die Farbe verwendet. 0:

  13. #13
    Zitat Zitat
    Gibt es \v und \n nicht schon vom Maker aus?
    Ja, undzwar in exakt der beschriebenen Funktion.

    Warum die hier extra erwähnt werden und alle anderen ausbleiben, weiss ich allerdings nicht.
    Nur weil's keine Buchstaben sind? Wäre seltsam.

    Ach und... \c[?] gibt es auch schon.

Berechtigungen

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