Kelven
08.02.2014, 13:59
... für alle, die keine Lust haben Ruby zu lernen und trotzdem ein paar mehr Funktionen haben wollen, als der Maker normalerweise bietet. Es handelt sich im Grunde zwar nur um Kleinigkeiten, aber wenn man die mit dem Eventcode scripten wollte, wäre das viel umständlicher. Vielleicht kann der eine oder andere sie ja gebrauchen. Ich weiß nicht, ob die Scripte auch im VX oder Ace benutzt werden können, weil ich dessen Syntax nicht kenne. Ich hab im Code auf allzu kryptische Ausdrücke verzichtet, weil ich nichts von denen halte, wobei das für die Ruby-Uninteressierten wohl sowieso egal ist. Und mir ist bewusst, dass man die Scripte vielleicht hätte besser lösen können, z. B. indem man sie direkt bei Game_Character einbindet, aber für die Funktionalität ist das ja nicht so entscheidend. Falls es Fehler gibt, sagt bitte sofort Bescheid. Falls die Scripte Unsinn sind natürlich auch.
Um die Scripte zu benutzen, müsst ihr den Code im Spoiler in den Script-Editor einfügen:
- Script markieren und mit Strg+c kopieren
- F11 im Maker drücken
- In der linken Liste ganz nach unten zu Main scrollen
- Rechte Maustaste, Insert auswählen
- Beim neuen Eintrag einen beliebigen Namen eingeben
- Das Script im rechten Bereich mit Strg+v einfügen
Im Moment gibt es folgende Methoden:
eventInBereich(event, x1, y1, x2, y2)
Testet, ob sich das Event mit der ID 'event' innerhalb der Koordinaten befindet. Beim Event 0 wird der Held getestet. 'x1' und 'y1' sind die obere linke Ecke,
'x2' und 'y2' die untere rechte des Bereiches.
Aufrufen könnt ihr das Script so:
- im Eventcode "Conditional Branch" auswählen
- auf der letzten Seite "Script" anklicken
- Falls ihr z. B. testen wollt, ob sich Event 1 innerhalb der Koordinaten 0,0 bis 2,2 befindet, gebt ihr Folgendes ein: Sammlung.eventInBereich(1, 0, 0, 2, 2) == true
- Wenn ihr testen wollt, ob sich das Event nicht innerhalb der Koordinaten befindet, schreibt ihr: Sammlung.eventInBereich(1, 0, 0, 2, 2) == false
inReichweite(event1, event2, radius)
Testet, ob das Event mit der ID 'event1' 'radius' Felder oder weniger vom Event mit der ID 'event2' entfernt ist. Beim Event 0 wird wieder der Held genommen.
Aufrufen könnt ihr das Script so:
- im Eventcode "Conditional Branch" auswählen
- auf der letzten Seite "Script" anklicken
- Falls ihr z. B. testen wollt, ob sich Event 1 3 oder weniger Felder von Event 2 entfernt ist, gebt ihr Folgendes ein: Sammlung.inReichweite(1, 2, 3) == true
- wenn ihr testen wollt, ob Event 1 außerhalb der Entfernung ist, schreibt ihr: Sammlung.inReichweite(1, 2, 3) == false
stepTowardEvent(event1, event2)
Diese Methode funktioniert genauso wie step toward hero, nur dass ein beliebiges Event mit der ID 'event1' zum Event mit der ID 'event2' geht. Beim Event 0 wird wieder der Held genommen.
Aufrufen könnt ihr das Script so:
- im Eventcode "Script" auswählen
- falls ihr z. B. wollt, dass Event 1 zu Event 2 geht, gebt ihr Folgendes ein: Sammlung.stepTowardEvent(1, 2)
- ihr müsst danach aber je nachdem wie schnell euer Event ist selbst ein Wait eingeben (s. u. bei Schritttempo) und es wird auch nur ein einziger Schritt gemacht.
module Sammlung
# Testet, ob sich das Event 'event' innerhalb der Koordinaten
# 'x1, y1' (obere linke) Ecke und 'x2, y2' (untere rechte Ecke) befindet.
# Wenn 'event' = 0 ist, wird die Spielfigur genommen.
def self.eventInBereich(event, x1, y1, x2, y2)
if existiert(event)
x = eventKoordinate(event, 1)
y = eventKoordinate(event, 2)
if x >= x1 && x <= x2 && y >= y1 && y <= y2 then return true end
end
return false
true # Wegen Bug vom XP
end
# Ermittelt die Entfernung zwischen den beiden Events 'event1' und 'event2'.
# Die Entfernung wird in ganzen Tiles angegeben. Wenn 'event1' = 0 oder
# 'event2' = 0 sind, wird jeweils die Spielfigur genommen.
def self.eventEntfernung(event1, event2)
if existiert(event1) && existiert(event2)
x1 = eventKoordinate(event1, 1)
y1 = eventKoordinate(event1, 2)
x2 = eventKoordinate(event2, 1)
y2 = eventKoordinate(event2, 2)
return (x1-x2).abs + (y1-y2).abs
end
return nil
end
# Testet, ob das Event 'event2' 'radius' Tiles oder weniger von Event 'event1'
# entfernt ist. Wenn 'event1' = 0 oder 'event2' = 0 sind, wird jeweils
# die Spielfigur genommen.
def self.inReichweite(event1, event2, radius)
if eventEntfernung(event1, event2) <= radius then return true end
return false
true # Wegen Bug vom XP
end
# Funktioniert wie step toward hero, nur dass 'event1' zu 'event2' geht.
# Wenn 'event1' = 0 oder 'event2' = 0 sind, wird jeweils die Spielfigur
# genommen.
# Wichtig: Das Wait für die Bewegung muss manuell im Eventcode gesetzt
# werden.
def self.stepTowardEvent(event1, event2)
if existiert(event1) && existiert(event2)
# Es müssen unterschiedliche Events sein
if event1 != event2
# Grundsätzlich die gleiche Methode wie unter Game_Charakter 3,
# nur mit zwei Events.
sx = eventKoordinate(event1, 1) - eventKoordinate(event2, 1)
sy = eventKoordinate(event1, 2) - eventKoordinate(event2, 2)
if sx == 0 and sy == 0
# Koordinaten sind identisch, abbrechen
return
end
abs_sx = sx.abs
abs_sy = sy.abs
# Wenn horizontale und vertikale Entfernung gleich sind ...
if abs_sx == abs_sy
# ... eine zufällig erhöhen.
if rand(2) == 0
abs_sx += 1
else
abs_sy += 1
end
end
# Wenn die horizontale Entfernung größer ist ...
if abs_sx > abs_sy
# Bewegung nach links und rechts hat höhere Priorität
if event1 == 0
if sx > 0
$game_player.move_left
else
$game_player.move_right
end
if not $game_player.moving? && sy != 0
if sy > 0
$game_player.move_up
else
$game_player.move_down
end
end
else
if sx > 0
$game_map.events[event1].move_left
else
$game_map.events[event1].move_right
end
if not $game_map.events[event1].moving? && sy != 0
if sy > 0
$game_map.events[event1].move_up
else
$game_map.events[event1].move_down
end
end
end
# Wenn die vertikale Entfernung größer ist ...
else
# Bewegung nach unten und oben hat höhere Priorität
if event1 == 0
if sy > 0
$game_player.move_up
else
$game_player.move_down
end
if not $game_player.moving? && sx != 0
if sx > 0
$game_player.move_left
else
$game_player.move_right
end
end
else
if sy > 0
$game_map.events[event1].move_up
else
$game_map.events[event1].move_down
end
if not $game_map.events[event1].moving? && sx != 0
if sx > 0
$game_map.events[event1].move_left
else
$game_map.events[event1].move_right
end
end
end
end
end
end
end
# Hilfsmethode: Testet, ob das Event 'event' existiert.
def self.existiert(event)
if event == 0
# Spielfigur
return true
else
if $game_map.events[event] == nil
return false
else
# Event
return true
end
end
end
# Hilfsmethode: Liefert die x- oder y-Koordinate von 'event'. 'koordinate'
# kann entweder 1 oder 2 sein. Die Methode geht davon aus, dass 'event'
# existiert.
def self.eventKoordinate(event, koordinate)
if event == 0
# Spielfigur
if koordinate == 1
return $game_player.x
elsif koordinate == 2
return $game_player.y
end
else
# Event
if koordinate == 1
return $game_map.events[event].x
elsif koordinate == 2
return $game_map.events[event].y
end
end
return nil
end
end
Schritttempo (bei höchster Frequenz):
1: Slowest - Wait 32
2: Slower - Wait 16
3: Slow - Wait 8
4: Fast - Wait 4
5: Faster - Wait 2
6: Fastest - Wait 1
Um die Scripte zu benutzen, müsst ihr den Code im Spoiler in den Script-Editor einfügen:
- Script markieren und mit Strg+c kopieren
- F11 im Maker drücken
- In der linken Liste ganz nach unten zu Main scrollen
- Rechte Maustaste, Insert auswählen
- Beim neuen Eintrag einen beliebigen Namen eingeben
- Das Script im rechten Bereich mit Strg+v einfügen
Im Moment gibt es folgende Methoden:
eventInBereich(event, x1, y1, x2, y2)
Testet, ob sich das Event mit der ID 'event' innerhalb der Koordinaten befindet. Beim Event 0 wird der Held getestet. 'x1' und 'y1' sind die obere linke Ecke,
'x2' und 'y2' die untere rechte des Bereiches.
Aufrufen könnt ihr das Script so:
- im Eventcode "Conditional Branch" auswählen
- auf der letzten Seite "Script" anklicken
- Falls ihr z. B. testen wollt, ob sich Event 1 innerhalb der Koordinaten 0,0 bis 2,2 befindet, gebt ihr Folgendes ein: Sammlung.eventInBereich(1, 0, 0, 2, 2) == true
- Wenn ihr testen wollt, ob sich das Event nicht innerhalb der Koordinaten befindet, schreibt ihr: Sammlung.eventInBereich(1, 0, 0, 2, 2) == false
inReichweite(event1, event2, radius)
Testet, ob das Event mit der ID 'event1' 'radius' Felder oder weniger vom Event mit der ID 'event2' entfernt ist. Beim Event 0 wird wieder der Held genommen.
Aufrufen könnt ihr das Script so:
- im Eventcode "Conditional Branch" auswählen
- auf der letzten Seite "Script" anklicken
- Falls ihr z. B. testen wollt, ob sich Event 1 3 oder weniger Felder von Event 2 entfernt ist, gebt ihr Folgendes ein: Sammlung.inReichweite(1, 2, 3) == true
- wenn ihr testen wollt, ob Event 1 außerhalb der Entfernung ist, schreibt ihr: Sammlung.inReichweite(1, 2, 3) == false
stepTowardEvent(event1, event2)
Diese Methode funktioniert genauso wie step toward hero, nur dass ein beliebiges Event mit der ID 'event1' zum Event mit der ID 'event2' geht. Beim Event 0 wird wieder der Held genommen.
Aufrufen könnt ihr das Script so:
- im Eventcode "Script" auswählen
- falls ihr z. B. wollt, dass Event 1 zu Event 2 geht, gebt ihr Folgendes ein: Sammlung.stepTowardEvent(1, 2)
- ihr müsst danach aber je nachdem wie schnell euer Event ist selbst ein Wait eingeben (s. u. bei Schritttempo) und es wird auch nur ein einziger Schritt gemacht.
module Sammlung
# Testet, ob sich das Event 'event' innerhalb der Koordinaten
# 'x1, y1' (obere linke) Ecke und 'x2, y2' (untere rechte Ecke) befindet.
# Wenn 'event' = 0 ist, wird die Spielfigur genommen.
def self.eventInBereich(event, x1, y1, x2, y2)
if existiert(event)
x = eventKoordinate(event, 1)
y = eventKoordinate(event, 2)
if x >= x1 && x <= x2 && y >= y1 && y <= y2 then return true end
end
return false
true # Wegen Bug vom XP
end
# Ermittelt die Entfernung zwischen den beiden Events 'event1' und 'event2'.
# Die Entfernung wird in ganzen Tiles angegeben. Wenn 'event1' = 0 oder
# 'event2' = 0 sind, wird jeweils die Spielfigur genommen.
def self.eventEntfernung(event1, event2)
if existiert(event1) && existiert(event2)
x1 = eventKoordinate(event1, 1)
y1 = eventKoordinate(event1, 2)
x2 = eventKoordinate(event2, 1)
y2 = eventKoordinate(event2, 2)
return (x1-x2).abs + (y1-y2).abs
end
return nil
end
# Testet, ob das Event 'event2' 'radius' Tiles oder weniger von Event 'event1'
# entfernt ist. Wenn 'event1' = 0 oder 'event2' = 0 sind, wird jeweils
# die Spielfigur genommen.
def self.inReichweite(event1, event2, radius)
if eventEntfernung(event1, event2) <= radius then return true end
return false
true # Wegen Bug vom XP
end
# Funktioniert wie step toward hero, nur dass 'event1' zu 'event2' geht.
# Wenn 'event1' = 0 oder 'event2' = 0 sind, wird jeweils die Spielfigur
# genommen.
# Wichtig: Das Wait für die Bewegung muss manuell im Eventcode gesetzt
# werden.
def self.stepTowardEvent(event1, event2)
if existiert(event1) && existiert(event2)
# Es müssen unterschiedliche Events sein
if event1 != event2
# Grundsätzlich die gleiche Methode wie unter Game_Charakter 3,
# nur mit zwei Events.
sx = eventKoordinate(event1, 1) - eventKoordinate(event2, 1)
sy = eventKoordinate(event1, 2) - eventKoordinate(event2, 2)
if sx == 0 and sy == 0
# Koordinaten sind identisch, abbrechen
return
end
abs_sx = sx.abs
abs_sy = sy.abs
# Wenn horizontale und vertikale Entfernung gleich sind ...
if abs_sx == abs_sy
# ... eine zufällig erhöhen.
if rand(2) == 0
abs_sx += 1
else
abs_sy += 1
end
end
# Wenn die horizontale Entfernung größer ist ...
if abs_sx > abs_sy
# Bewegung nach links und rechts hat höhere Priorität
if event1 == 0
if sx > 0
$game_player.move_left
else
$game_player.move_right
end
if not $game_player.moving? && sy != 0
if sy > 0
$game_player.move_up
else
$game_player.move_down
end
end
else
if sx > 0
$game_map.events[event1].move_left
else
$game_map.events[event1].move_right
end
if not $game_map.events[event1].moving? && sy != 0
if sy > 0
$game_map.events[event1].move_up
else
$game_map.events[event1].move_down
end
end
end
# Wenn die vertikale Entfernung größer ist ...
else
# Bewegung nach unten und oben hat höhere Priorität
if event1 == 0
if sy > 0
$game_player.move_up
else
$game_player.move_down
end
if not $game_player.moving? && sx != 0
if sx > 0
$game_player.move_left
else
$game_player.move_right
end
end
else
if sy > 0
$game_map.events[event1].move_up
else
$game_map.events[event1].move_down
end
if not $game_map.events[event1].moving? && sx != 0
if sx > 0
$game_map.events[event1].move_left
else
$game_map.events[event1].move_right
end
end
end
end
end
end
end
# Hilfsmethode: Testet, ob das Event 'event' existiert.
def self.existiert(event)
if event == 0
# Spielfigur
return true
else
if $game_map.events[event] == nil
return false
else
# Event
return true
end
end
end
# Hilfsmethode: Liefert die x- oder y-Koordinate von 'event'. 'koordinate'
# kann entweder 1 oder 2 sein. Die Methode geht davon aus, dass 'event'
# existiert.
def self.eventKoordinate(event, koordinate)
if event == 0
# Spielfigur
if koordinate == 1
return $game_player.x
elsif koordinate == 2
return $game_player.y
end
else
# Event
if koordinate == 1
return $game_map.events[event].x
elsif koordinate == 2
return $game_map.events[event].y
end
end
return nil
end
end
Schritttempo (bei höchster Frequenz):
1: Slowest - Wait 32
2: Slower - Wait 16
3: Slow - Wait 8
4: Fast - Wait 4
5: Faster - Wait 2
6: Fastest - Wait 1