Seite 11 von 26 ErsteErste ... 78910111213141521 ... LetzteLetzte
Ergebnis 201 bis 220 von 505

Thema: +++ DynRPG - Das RM2k3-Plugin-SDK +++

  1. #201
    Zitat Zitat von Ghabry Beitrag anzeigen
    Was ist die beste Möglichkeit zu ermitteln auf welcher Karte man gerade spielt? Den Wechsel der Karte zu erkennen würde auch schon ausreichen
    Also ich weiß nicht ob es die beste Möglichkeit ist, aber du wirst mMn nicht daran vorbeikommen, auf jeder Map einen PP mit Erase Event zu packen, der vor dem Erase Event entweder selbst testet, ob die Map gewechselt wurde oder der einen Common Event callt, der das prüft. Funktionieren tut es dann so, dass du ein Set Variable mit der Map ID füllst. Dazu musst du dann wissen, welche Map ID welcher Map entspricht. Danach kannst du damit "rechnen"...

    Zitat Zitat von Ghabry Beitrag anzeigen
    Und ist es irgendwie möglich das Lesen eines switches zu erkennen? (und den Rückgabewert zu ändern) Ja, brauch das wirklich beim Lesen, nicht beim Schreiben ^^
    Ich verstehe nicht, was der Unterschied von lesen und schreiben eines Switches sein soll? Bzw. was du erreichen willst?
    Das klingt so als willst du erkennen ob ein PP prüft ob ein Switch gesetzt ist? Wenn du das willst, dann kannst du doch gleich die im 2k3 enthaltene Funktion nutzen und suchen, welche Events auf den Switch zugreifen ^^; (hoffe ich hab das richtig verstanden)

  2. #202
    Zitat Zitat
    Was ist die beste Möglichkeit zu ermitteln auf welcher Karte man gerade spielt? Den Wechsel der Karte zu erkennen würde auch schon ausreichen
    Öh, lass immer bei Betreten einer Map eine Vari einen bestimmten Wert annehmen und frag den ab.

    Zitat Zitat
    Und ist es irgendwie möglich das Lesen eines switches zu erkennen? (und den Rückgabewert zu ändern) Ja, brauch das wirklich beim Lesen, nicht beim Schreiben ^^
    Conditional Branch: "Branch if Switch XXX is ON/OFF ..."

  3. #203
    Zitat Zitat von Ghabry Beitrag anzeigen
    Was ist die beste Möglichkeit zu ermitteln auf welcher Karte man gerade spielt?
    Code:
    <>SetVariable [0001:Map] = Object[Player]'s MapID

  4. #204
    Ich frage schon absichtlich im DynRPG Thread, kommt mir nicht mit Maker-Eventcode. Will bisschen mit DynRPG rumspielen

    Zitat Zitat von MagicMaker Beitrag anzeigen
    Code:
    <>SetVariable [0001:Map] = Object[Player]'s MapID
    Hmm stimmt. Da muss ich wohl mal testen, ob man über RPG::hero->mapId die aktuelle Map ID bekommt.

    Zitat Zitat
    Das klingt so als willst du erkennen ob ein PP prüft ob ein Switch gesetzt ist? Wenn du das willst, dann kannst du doch gleich die im 2k3 enthaltene Funktion nutzen und suchen, welche Events auf den Switch zugreifen ^^; (hoffe ich hab das richtig verstanden)
    Den Satz versteh ich nicht.

    Also geht wirklich darum, dass ich alle Switch-Leseversuche mitbekomme und so das Ergebnis des Lesevorgangs verändern kann (für Schreiben gibts nen Callback, das ist daher kein Problem)
    Bei Events ist das einfach, da könnte ich über onEventCommand alle Events behandeln, die Switche lesen und schreiben können, z.B. EVCMD_CHANGE_SWITCH. Gibt aber noch einen weiteren Fall, wo Switche vorkommen: Die Überprufung, ob ein(e) Event(seite)/ein CommonEvent die Startbedingungen erfüllt hat. Da würde ich Switch lesen auch gerne behandeln.
    Oder vielleicht weiß Cherry zufällig die Adressen im ASM-Code wo das passiert (Startbedingungen von Events überprüfen)? Die jmp-Anweisungen patch ich dann selber rein.

  5. #205
    RPG::hero->mapId ist korrekt.

    Übrigens hatte DynRPG am Anfang onGetVariable und onGetSwitch Callbacks. Diese hab ich allerdings entfernt weil das Spiel einfach nur saulangsam wurde, sogar wenn keine Plugins das verwendet haben (rein durch den Aufruf der Funktion in dynloader.dll), weil das Auslesen von Switches und Variablen einfach extrem oft intern stattfindet.

    Und warum willst du das Lesen des Switches abfangen? Willst du eine Art Selfswitch-Ding machen? Die Funktion zum Lesen eines Switches ist übrigens an VA 0x48B324, eax ist RPG::system, edx ist die Switch-ID. Rückgabewert ist 0 oder 1 in al.

    Damit fängst du allerdings kein RPG::switches[xyz] von DynRPG-Plugins ab, weil diese direkt auf das Switcharray zugreifen (schau dir switches.h an).

    Vielleicht kannst du einfach den Switch setzen, statt das Lesen abzufangen? Mit RPG::map->updateEvents() erreichst du dass die Startbedingungen neu evaluiert werden nachdem du den Switch geändert hast.

    Geändert von Cherry (26.04.2013 um 10:45 Uhr)

  6. #206
    Zitat Zitat von Cherry Beitrag anzeigen
    RPG::hero->mapId ist korrekt.
    Übrigens hatte DynRPG am Anfang onGetVariable und onGetSwitch Callbacks. Diese hab ich allerdings entfernt weil das Spiel einfach nur saulangsam wurde, sogar wenn keine Plugins das verwendet haben (rein durch den Aufruf der Funktion in dynloader.dll), weil das Auslesen von Switches und Variablen einfach extrem oft intern stattfindet.
    Wundert mich, dass das langsamer wurde, gehe mal davon aus, dass du einfach in eine Funktion der DLL reinjmpst?

    Zitat Zitat von Cherry Beitrag anzeigen
    Und warum willst du das Lesen des Switches abfangen? Willst du eine Art Selfswitch-Ding machen? Die Funktion zum Lesen eines Switches ist übrigens an VA 0x48B324, eax ist RPG::system, edx ist die Switch-ID. Rückgabewert ist 0 oder 1 in al.
    Ja, genau sowas wollte ich mal versuchen

    Zitat Zitat von Cherry Beitrag anzeigen
    Damit fängst du allerdings kein RPG::switches[xyz] von DynRPG-Plugins ab, weil diese direkt auf das Switcharray zugreifen (schau dir switches.h an).
    Ja, das ist dann Pech. Müssen die Pluginentwickler halt beachten.

    Und ach stimmt ja, muss mit gcc compilen, die ihre Assembler-Syntax ist so hässlich :/

    Edit: und __attribute__ ((naked)) funktioniert unter x86 nicht, toll, macht alles nur unnötig kompliziert -.-

    Geändert von Ghabry (27.04.2013 um 16:48 Uhr)

  7. #207
    Zitat Zitat von Cherry Beitrag anzeigen
    Vielleicht kannst du einfach den Switch setzen, statt das Lesen abzufangen? Mit RPG::map->updateEvents() erreichst du dass die Startbedingungen neu evaluiert werden nachdem du den Switch geändert hast.


    Was spricht hiergegen?

  8. #208
    Hey. Stichwort: "ShakeScreen", gibt es die Möglichkeit das per DynRPG zu verwenden/zu setzen?
    Vom Makerbefehl her scheint das ein globales Setting zu sein, Shakestärke, Speed, Restdauer~ kriegt man das irgendwie zugegriffen?

    Geändert von Corti (13.05.2013 um 21:26 Uhr)

  9. #209
    @Corti
    Eine Möglichkeit wäre wohl direkt auf die Pixel bzw. das Bitmap vom RPG::screen->canvas zuzugreifen und damit eine Art ShakeScreen zu erzeugen. Ansonsten würde mir keine Möglichkeit einfallen diesen Befehl per DynRPG zu erzeugen. Außerdem wirkt der ShakeScreen des Makers auf alles, außer die Font!

    Du kannst direkt beim ausführen des EventCommands darauf zugreifen. In onEventCommand().
    Edit: Dabei kannst du dann auch direkt auf die EventCommandParameter zugreifen und diese eben auch ändern und/oder dem Wert gewisser RPG::variables verpassen. Du kannst übrigens auch durch ein EventScript "springen", wenn du *nextScriptLine clever verwendest

    Edit:
    Weitere Idee: Z.B. Screenshottool (SFX.exe) per DynRPG aufrufen und einen Screen machen lassen und diesen dann shaken. Hätte aber den Nachteil, dass es dann ein fixes Bild wäre.

    PeAcE
    MorDen

    Geändert von Morden (14.05.2013 um 09:17 Uhr)

  10. #210
    Die Frage war auch eher an Cherry gerichtet.

  11. #211
    Ich hab's wenigstens versucht

  12. #212
    Ich weiss das zu würdigen, danke :-)

  13. #213
    Hi. Ich dachte ich frag mal hier bei euch nach.

    Gibt es eine Möglichkeit mehrere Variablen miteinander zu vergleichen um die größte bzw. kleinste Variable herauszufinden?

    Die Frage kam im Probleme-Sammelthread auf und mich würde auch interessieren, ob sowas möglich ist und - wenn ja - wie man das angehen könnte.

  14. #214
    Wenn die Variablen alle in einer Reihe liegen, also z. B. 401, 402, 403, 404, geht das einfach und ohne Plugins mit einem Pointer und einer Schleife.
    Hier ein Beispiel für den größten Wert:
    Code:
    pointer = 401
    vergleich = 0
    ergebnis = 0
    label #1
    vergleich = variablen[pointer]
    if vergleich > ergebnis
        ergebnis = vergleich
    endif
    if pointer < 404
        pointer += 1
        goto label #1
    endif

  15. #215
    Danke. Aber wenn die Varis jetzt nicht in einer Reihe liegen, sondern wild gestreut sind? :/

  16. #216
    Klaro. Geht sogar ohne DynRPG. Kannst du dir selbst in einem CE bauen. Musst halt nur den Index der zu vergleichenden Variablen in einen Datenbereich schreiben und dir dann einen CE basteln, der die an diesen Punkten liegenden Daten miteinander vergleicht.

  17. #217
    Tagchen, ich hätte da mal ne frage...

    Ich benutze den Callback "onSetSwitch" und das klappt auch super, aber gibt es eine Möglichkeit nun die EventID und die MapID vom Event zu bekommen, das diesen Befehl ausführt?

  18. #218
    Es gibt den Callback "onEventCommand" da bekommst du Daten zum ausführenden Event gleich mit.
    http://rpg-maker.cherrytree.at/dynrp...44142110ee9776

    Im Parameter (EventCommand command) kannst du den Typen des Befehls abfragen, hier gibts mögliche Commands.
    http://rpg-maker.cherrytree.at/dynrp...143a88beab89d5

  19. #219
    Sry, bin noch relativ neu mit C++ und generell verstehe ich vieles noch nicht XD...

    Also ich benutze "onEventCommand" aber was muss dan gemacht werden, damit ich abfragen kann ob nun ein switch verändert wird? Weil das hier klappt nicht wirklich so wie ich es mir gedacht habe...

    if (RPG::EventCommand(EVCMD_CHANGE_SWITCH(1))
    {
    return false;
    }

    Und wenn ich schon dabei bin, ich verstehe nicht wann ich -> benutzen muss und wann ::

  20. #220
    Ich habs bisher selbst nicht benutzt und hab jetzt auch grad keine Möglichkeit es zu testen daher mal blind gescriptet.

    Code:
    onEventCommand ( RPG::EventScriptLine *  scriptLine, RPG::EventScriptData *  scriptData, int  eventId,	int  pageId, int  lineId,	int *  	nextLineId 	) 	
    {
    // in scriptline ist enthalten welcher Befehl verwendet wurde. 
    // scriptLine hat einen Member namens "command" vom Typ RPG::EventCommand, das ist ein enum, aus dem Namensraum RPG
    // (http://rpg-maker.cherrytree.at/dynrp...ript_line.html)
    if(scriptLine->command == RPG:: EVCMD_CHANGE_SWITCH) // darum hier der Vergleich mit dem Enumwert, der dem Switchbefehl entspricht
    {
    
    }
    
    return true;
    }
    Zitat Zitat
    Und wenn ich schon dabei bin, ich verstehe nicht wann ich -> benutzen muss und wann ::
    :: ist wenn du an einen Namensraum willst, z.B. RPG, kennst du von std::string, dort ist std der Namensraum.
    -> wenn du auf Inhalte von etwas zugreifen willst, dass dir als Pointer vorliegt, wie hier scriptLine, siehe Sternchen ;-)

    Schau dir am besten dies hier mal an:
    http://www.youtube.com/watch?v=YurDkWSh41M
    erklärt das einfach und schnell. Die insgesamt 20 Minuten sinds wert wenn man da noch unsicher ist.

Berechtigungen

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