Ergebnis 1 bis 8 von 8

Thema: [RGSS] Event ID per Script

  1. #1

    [RGSS] Event ID per Script

    Ich würde gern wissen, ob es eine Möglichkeit gibt, per Call script die Event ID eines Events herauszufiltern, genauer gesagt, des Events, wo das Skript aufgerufen wird.
    Ich habe es einfach mal probeweise von anderen Seiten zusammengeschustert, aber ich bekomme auf der Variable eigentlich nur Hex-Müll ^^ und das ist nicht ganz das, was ich will.

    Code:
    $game_variables[14] = $game_map.events[@event_id]
    Also wenn ich in Event mit der ID 0013 das per Call Script aufrufe, will ich in Variable 14 '13' stehen haben wollen.
    Der Code oben stimmt garantiert nicht, keine Frage Wie gesagt, ist zusammengekleistert von verschiedensten Foren. Ich habs auch wahlweise mit mit self. - Bezügen versucht, aber oft crasht das Ganze halt oder es kommt nichts oder Müll auf der Variable raus (5#<Game_Event:0x47dft)...

    Weiters will ich fragen, ob es nicht schon irgendwo eine Art Kompendium für RGSS selbst gibt, wo man wirklich effektiv nachschlagen kann, was es so alles an Commands gibt. Forenstöbern schön und gut, aber wenn man dann nach Stunden immer noch nichts Ordentliches findet, frustet es

    Danke im Voraus.

  2. #2
    Zitat Zitat
    Code:
    $game_variables[14] = $game_map.events[@event_id]
    Also wenn ich in Event mit der ID 0013 das per Call Script aufrufe, will ich in Variable 14 '13' stehen haben wollen.
    Der Code oben stimmt garantiert nicht, keine Frage Wie gesagt, ist zusammengekleistert von verschiedensten Foren. Ich habs auch wahlweise mit mit self. - Bezügen versucht, aber oft crasht das Ganze halt oder es kommt nichts oder Müll auf der Variable raus (5#<Game_Event:0x47dft)...
    Mit obigem Code speicherst du auch das gesamte Event in deiner Variablen ab und nicht nur die ID.
    Die ID hast du ja bereits (@event_id), also einfach:
    Code:
    $game_variables[14] = @event_id
    Zitat Zitat
    Weiters will ich fragen, ob es nicht schon irgendwo eine Art Kompendium für RGSS selbst gibt, wo man wirklich effektiv nachschlagen kann, was es so alles an Commands gibt. Forenstöbern schön und gut, aber wenn man dann nach Stunden immer noch nichts Ordentliches findet, frustet es
    Die gesamte RGSS-Libary ist im Help-File unter "Game libary" dokumentiert. Das einzige was nicht dokumentiert ist, sind die Standardklassen, deren Scripte einsehbar sind. Da muss man in der Regel direkt im Code nachgucken wie die Klasse genau funktioniert. Eine vollständige Dokumentation über diese ist mir nicht bekannt. Doku der Ruby-Standardlib gibt es auf der offiziellen Ruby-Seite (www.ruby-lang.org)

  3. #3
    Ui, danke für die schnelle Antwort @event_id,... so einfach gehts ^^
    (Ist @event_id einfach eine globale Variable? o.o Wo kann ich da die Initialisierung in den Scripts finden? Oder muss man das einfach wissen?)

    Stimmt, eigentlich hätt ich auch in die Helpfile schauen können, aber ich glaube, da hätte ich das mit der @event_id zum Beispiel nicht gefunden, zumindest wüsste ich nicht, wo ich da gesucht hätte.
    Naja, ein kleines Nachschlagewerk mehr

    Aber ich werde gleich weiterfragen...
    Ich erläutere mal, worum es mir geht. Ich habe zwei Events, die nebeneinander platziert sind. Ich will die Event-IDs der beiden speichern, und dann will ich ihre Positionen vertauschen, das linke Event soll nach rechts wandern (um 1), das rechte nach links. Ich hab das auf "Maker-Ebene" versucht, und es will nicht so ganz, wie ich es haben will
    Ich habe was von einem Befehl "moveto" gelesen, aber nicht mehr gefunden... Wie könnte man sowas am besten anstellen? Wird da nicht vielleicht die Event-ID eines Events als Parameter gebraucht? ^^

    Geändert von TheByteRaper (18.05.2007 um 00:05 Uhr)

  4. #4
    @event_id ist eine Instanzvariable, also eine Variable, die einem Objekt der Klasse Interpreter gehört. Der "Script"-Eventcommand wird innerhalb dieses Interpreter-Objektes ausgeführt. Dadurch erhälst du von dort aus Zugriff auf alle Instanzvariablen des Interpreterobjekts, sowie auf dessen Methoden (und natürlich auch auf alle globalen Variablen). Die Interpreterklasse ist in der Helpdatei nicht dokumentiert, da sie ja im Scripteditor steht. Du kannst dort ihren Inhalt einsehen. Alles was mit def beginnt ist eine Interpretermethode. Diese Methode kannst du innerhalb von "Script" aufrufen (in dem du sie einfach hinschreibst. So steht "def command_352" z.B. für die Eventfunktion "call Save Screen". Schreibst du also in das "Script" den text command_352 rein, so ist das gleichbedeutend mit dem "Call Save Screen" Befehl). Alle Variablen die mit @ beginnen sind Instanzvariablen, auf die du ebenfalls Zugriff hast (so z.B. auch die Variable @event_id). Eine Dokumentation aller RGSS-Klassen findest du auf Phylomortis, allerdings ist diese in englisch.

    Dein Problem verstehe ich trotzdem nicht so recht. Du kannst du mit dem Befehl "Set Move Route" die Events jeweils nach rechts und nach links bewegen lassen. Warum brauchst du da die Event-ID?

  5. #5
    Ich weiss gerade nicht genau, was mit "Set Move Route" gemeint ist (ich denke, du meinst die Funktion bei jedem Event einzeln, wo man eine Custom Route eingeben kann...), aber ich kann mal so viel sagen, dass es auf "Maker-Ebene" nicht so funktioniert, wie ich es haben will

    Stell dir eine Fläche von 5x5 Tiles vor, und diese Tiles sind ALLE mit Events besetzt. Ich will nun zwei BESTIMMTE Events, die ich aussuche und nebeneinander liegen, vertauschen, sprich: Positionen wechseln. Ich will nun einen derart abstrahierten Stand-Alone-Algorithmus schaffen, der es mir ermöglicht, jedes beliebige Event mit einem seiner vier Nachbarn zu tauschen. Wenn ich das auf die "Maker-Ebene" beschränke, habe ich einen Haufen Arbeit vor mir, denn mit Move Event wollte das nicht so richtig funktionieren, oder es ist komplizierter, als ich es dachte.
    Hm,... mal sehen, ob ich es zu skizzieren schaffe:

    [01][02][03][04][05]
    [06][07][08][09][10]
    [11][12][13][14][15]
    [16][17][18][19][20]
    [21][22][23][24][25]

    5x5 Tiles, jedes Tile hat ein Event darauf mit [Event-ID]. Wenn ich nun als erstes [07] wähle und dann [08], dann soll [07] um 1 nach rechts wandern, und [08] um eins nach links.

    [06][08][07][09][10]

    Das soll aber eben mit JEDEM anderen Event funktionieren (also auch [12] mit [22], sollten sie mal neben- oder übereinander liegen, usw...), und dazu hab ich mir halt eingebildet, dass die Event-ID wahrscheinlich das minimalste und neutralste Maß ist, worauf ich das beschränken kann ^^... ok, kommt auf einen existenten Befehl an.
    Ich habe mir das auf Maker-Ebene mit Switches überlegt, aber das will nicht so richtig funktionieren... naja, belassen wirs dabei, dass es nicht funktionieren will, und es daher, damit es für alle Events gültig ist, auf Script-Ebene versuchen.

    Wenn du Bejeweled kennst, weisst du was ich meine

    Gibt es nun einen Move-Befehl auf Skriptebene, der es mir erlaubt, beliebige Events anzusprechen, auf welche Art und Weise auch immer?
    Oder noch spezifischer:
    Gibt es für Events auf Skript-Ebene einen Bewegungsbefehl (also gleichzusetzen dem Move Event), das auf Event-IDs reagiert? Also so in etwa @mein_event.moveevent( x, y), wobei @mein_event schon mit der gewollten Event-ID initialisiert ist.... so etwas?

    Geändert von TheByteRaper (18.05.2007 um 19:08 Uhr)

  6. #6
    Ich glaube, ich habe die Lösung selbst gefunden.
    Code:
    x = $game_map.events[$game_variables[14]].x
    y = $game_map.events[$game_variables[14]].y
    $game_map.events[$game_variables[14]].moveto(x, y)
    Bewegt mir ein Event mit VARIABLER Event-ID stupide da hin, wo ich will, wenn ich bei moveto(x, y) die entsprechenden Werte setze (x+1 oder x-1, y+1 oder y-1). Sieht zwar sehr rapide aus, also ein blosses Setzen (kein echtes Movement), aber es erfüllt zumindest die Voraussetzungen, die ich haben will. Wenn ich wieder Zeit habe, werde ich mich darum kümmern, das schöner aussehen zu lassen und zu verfeinern.

  7. #7
    Hi an alle!

    Wenn du den normalen Move Route Befehl per RGSS haben möchtest, schau mal hier vorbei:

    http://www.rmxp.de/forum/thread.php?threadid=10772

  8. #8
    Jaaa, sowas in der Art habe ich ursprünglich gesucht
    Ich habe das momentan so gestellt:

    Code:
    $move = RPG::MoveRoute.new
    $move.list = [RPG::MoveCommand.new(35), 
    RPG::MoveCommand.new(2)]
    temp = $game_variables[15]
    $game_map.events[temp].force_move_route($move)
    Das Problem dabei aber ist: Das Lock Facing (35) will nicht so richtig funktionieren (beim Wandern nach links mit MoveCommand.new(2) sieht man trotzdem noch eine Move-Animation, das Event, das ich bewegen will, flackert in einer anderen Grafik auf, was eigentlich nicht passieren sollte; dabei ist alles in dem Event gelocked: Facing, Move-Animation, Phasing ON), und das Movement passiert viel zu langsam, obwohl der Speed beim Event auf "Fastest" gestellt ist

    Aber im Grunde genau das, was ich gesucht habe.

    Edit: Ich habe mal ein einfaches Event mit dem Standardhelden gemacht: Gesicht nach unten, Lock Facing, Phasing ON, No Animation, und ihm bei Action key ein Move right aufgedrängt. Da sieht man das genauer, was ich meine: der Held macht trotz aller Möglichkeiten, ihn in siner Bewegung zu hindern, trotzdem diesen Zwischenschritt, wo er einen Fuß nach vorne streckt. DAS muss ich wegkriegen, ohne, dass ich gleich das Charset ändern muss, denn das interessiert mich grad überhaupt nicht ^^

    Doppeledit: Nun ists egal mit der Animation, ich habe das Charset doch geändert... nun bewegt sich das Event aber aus irgendeinem Grund viel zu träge...

    Geändert von TheByteRaper (20.05.2007 um 20:55 Uhr)

Berechtigungen

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