• Anmelden

1

Samstag, 17. August 2013, 17:47

Event's sollen sich während aktiver Message nicht bewegen

Hallo,
ich hätte gerne, dass während der Anzeige einer Message, alle Events wie z.B. beim RPG Maker 2000/2003 anhalten und das Spiel sozusagen wie pausiert wird, damit man sich in Ruhe die Message durchlesen kann. Das ist verdammt wichtig für mich, da mein Spiel auf einem AKS basiert und es wirklich dämlich ist, wenn man sich gemütlich die Message durchliest wie viele Tränke man gerade in einer Truhe gefunden hat und dabei von einer Horde Zombies attackiert wird ohne das man sich wehren kann.
Hier im Forum wurden bisher immer nur Fragen gestellt, wie man das Spiel bei einer Message weiterlaufen lassen kann aber genau das passiert bei mir schon standardmäßig (natürlich abgesehen vom player der immer gefixt wird), daher also die Frage ob ich einfach eine komische RPG-Maker-Version habe, bei der die Events weiterlaufen oder ob das normal ist und man es irgendwie ändern kann damit es endlich wieder so ist wie beim guten alten 2ker und 2k3er.
Viele Grüße
Splatty

Voudisteppi2

Ankömmling

Motto: Ich lass es mal sein mit dem Motto.. In mehreren Jahren guck ich hier drauf und denke, wie naiv ich doch früher gewesen bin... Edit: Mein Gott, bin ich naiv gewesen!

  • Nachricht senden

2

Samstag, 17. August 2013, 20:12

Sorge dafür, dass die Message innerhalb eines Autostart-Events abgespielt wird.
Soweit ich weiß, laufen dabei keine parallelen Prozesse ab.
Das Event kann sich ja dann einfach per Switch (oder besser Variable) aktivieren lasssen.

3

Samstag, 17. August 2013, 21:11

Soweit ich weiß, laufen dabei keine parallelen Prozesse ab.
Nope, beim Ace ist das so, beim XP glücklicherweise nicht.

Splatty, poste bitte mal dein ABS-Script.
Bild

4

Sonntag, 18. August 2013, 09:10

@Voudisteppi2
Das klappt leider nicht und wäre auch echt anstrengend im kompletten Spiel umzusetzen. ich dachte eher an eine RGSS-Modifikation.



@Terv
Mein ABS funktioniert mit geklonten und normalen Eventgegnern deren Attribute(Lp,MP,Ang,Vert,Int,etc..) per RGSS in der Game_Character_Klasse gespeichert werden und RGSS-basierten Berechnungen in der Game_Map-Klasse um verschiedene Zauber bzw. Positionsabfragen zu berechnen. Das ABS beeinflusst aber keineswegs das Anzeigen von Messages, was ich auch in neuen Projekten ausprobiert habe, bei denen Events weiterhin umherlaufen obwohl die Message angezeigt wird.

Hat dieses Problem des Makers denn bisher noch keinen hier gestört?



Ich hatte an eine Lösung ähnlich wie in der Game_Player Klasse gedacht, in der die Bewegungen des Players ja auch nur geupdated werden wenn $game_temp.message_window_showing=false ist. Ich bin mir nur unsicher wo ich dann überall etwas verändern soll. Nur in der Game_Event Klasse? Wenn das klappt könnte ich sogar speziellen Events erlauben weiterzulaufen(z.B. Vögel, Tiere etc.) und anderen dies verbieten was praktisch wäre, da alle meine ABS-Gegner ein Attribut in der Character-Klasse haben ob sie befeindet, verbündet oder ganz normale Leute sind.

Gruß

Splatty



5

Sonntag, 18. August 2013, 09:22

Naja warum denn dann nicht einfach Folgendes in Game Character 2, Zeile 16:

Ruby Quellcode

1
    elsif moving? and (!$game_temp.message_window_showing or @move_route_forcing)
sowie Zeile 54:

Ruby Quellcode

1
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency) and (!$game_temp.message_window_showing or @move_route_forcing)

Dann bleiben approachende Events stehen, Set Move Route funktioniert hingegen weiterhin (für Cutscenes und dergleichen).
Bild

6

Sonntag, 18. August 2013, 10:49

@ Terv
Genau so etwas habe ich gesucht! Vielen Dank :D :D :D

Nun gibts nur noch ein klitzekleines Problem wegen meines ABS'. Zwar stehen die Gegner jetzt still aber falls ein Gegner und ein Verbündeter in direkter Reichweite stehen greifen sie sich trotzdem an, denn meine Gegnerevents laufen auf der ersten Seite immer per Parallel Process mit folgendem Scriptinhalt:
"

id=@event_id
dist=$game_map.events[id].dist
dir=$game_map.events[id].direction
if $game_map.enexth(id, dist,dir,10)
m = $game_map.map_id
$game_self_switches[[m, id,'A']]=true
else
@wait_count=1
end
"
Dabei wird dauerhaft die Funktion "enexth" aufgerufen in der mit Hilfe der event-ID, der Distanz und der Blickrichtung überprüft wird ob sich der Player oder ein Verbündeter des Players in der Reichweite des Events befindet. Ist dies der Fall, wird der Self Switch aktiviert und damit werden die folgenden Seiten(auch Parallel Prozess) aufgerufen in denen der Schlag und Schadensberechnungen sowie Block- und Ausweichberechnungen ausgeführt werden.

D.h. ich müsste jetzt im RGSS noch irgendwie bei der Anzeige einer Message alle Parallel Prozesse von Kampf-Events verhindern. Aber an welcher Stelle kann man das machen? Ich habe bereits ohne Erfolg versucht in "Game_Event" "def start"zu editierten, sodass dort steht:


def start
# If list of event commands is not empty
if @list.size > 1 and (!$game_temp.message_window_showing or @move_route_forcing or $game_map.events[@id].state==4)
@starting = true
end
end

D.h. damit dürfte ein Event ja nur starten wenn entweder keine Nachricht angezeigt wird oder falls doch eine Nachricht angezeigt wird und das Event trotzdem ausgeführt werden soll muss der "state" des Events gleich 4 sein. (attr_accessor :state habe ich bei Game_Character hinzugefügt um beim ABS genauer zu bestimmen um was für ein Event es sich handelt)

Vermutlich muss man stattdessen wieder irgendwas beim Update verändern oder?

Gruß

Splatty

7

Sonntag, 18. August 2013, 10:53

Weiß nicht, kannst du deinen Script Call nicht einfach in ne neue Methode in den Scripts packen und da deine Bedingungen einfügen? Wäre auch performanter als so nen eval-Block 20 mal pro Sekunde für jeden Gegner abzurattern.
Bild

8

Sonntag, 18. August 2013, 11:07

ahh wie dumm stimmt...
Ich habe in "enexth" einfach die Bedingung eingebaut, dass es immer false zurückgibt, falls eine Message angezeigt wird :D
Danke für deine Hilfe. Jetzt klappt alles bestens!
:dance:

Verwendete Tags

Event, Message, stop

Social Bookmarks