Emerald ist ein plattformunabhängiges Plugin-System für Ruby. Es schlankt u.A. den nötigen Code insofern ab, dass keine Schnittstellen (aliasse) mehr nötig sind.
Obwohl es für jede Form von Rubyprogrammen gedacht ist, liegt der Schwerpunkt dennoch bei RGSS(2). Das Plugin-System ist in allen Komponenten austauschbar, Plugins sind unabhängig voneinander.
2. Features
Dynamische Pluginverwaltung.
Plugins werden von EMERALD erkannt, auf Kompatibilität geprüft, ausgeführt, bei Fehlern ausgeworfen,...
SDK-/APD-Unterstützung (optional)
Erkennung von RGSS-Version, RubyGame, APD, MACL, SDK
Log-Funktion.
Es ist eine maximale Dateigröße der Logs einstellbar. Überschreiten die Log-Dateien von EMERALD und (optional) der APD diese Größe, werden die Logs geleert.
Einmalige (individuelle) Schnittstellen-Implementierung über die "Boot Scripte".
Updateverhalten der Plugins individuell programmierbar dank frei wähl barer "Cerne".
Zentrales Vokabular-Modul für Konstanten, die ggf. andere Plugins nutzen wollen.
Selbstschutz von EMERALD gegen Veränderung durch irgendwelche anderen Scripte. (Methoden, Singletons, Including)
Hohe Flexibilität der Plugins.
(Sehr leichter Ein-/Ausbau. "Plug'n'Play" sozusagen.)
Auf einem Pentium M bei 6 aktiven Plugins keine Leistungseinbuße erkennbar.
Nichts weltbewegendes, doch eine flexible Arbeitsabnahme für Ruby-Programmierer.
3. Wichtiges über die wichtigsten Komponenten
Hier einmal die wichtigsten Methoden und deren kurze Erklärung, ggf. mit Beispielen.
DAT = "DD.MM.JJJJ"#Datum der letzten Änderung (String || NilClass)
#Prüft auf Kopatibilität, gibt true/false zurück.
#So kann man z.B. prüfen, ob bestimmte Plugins vorhanden sind, usw.
defself.check_comp()
return(wert)
end
#Gibt einen String zurück, der aktuelle Informationen über den Status des
#Plugins enthält.
defself.get_stat()
return(info)
end
#Gibt einen String zurück, der aktuelle Informationen über den Status des
#Plugins enthält.
defself.build()
end
#Hauptmethode, wird parallel zur Steuerklasse stehts aktualisiert.
defself.main()
end
end
end
3.6. Boot-Scripte
Die Haupt-Boot-Scripte sind eigentlich nicht nötig, selbst zu schreiben, außer man arbeitet mit etwas anderem, als dem RPG Maker XP/VX. Falls eine Steuerklasse zu wenig für euren Bedarf ist, hier ein Boot-Template. Ein normales Zusatz-Boot-Script braucht nur die Aliasses in einer Klasse (Siehe den darauf folgenden Code-Block).
module EMY
# Welches Bootscript ist vorhanden?
BOOT_NAME_AUTOR = 0b00000001
end
if(EMERALD.nil?())
# Emerald laden, wenn nicht bereits vorhanden.
$:.push('.')
Kernel.require('emerald')
if(EMERALD.nil?())
# Ohne Emerald ist dieses Script sinnlos, also ScriptFehler!
Kernel.raise(ScriptError,"Emerald konnte nicht gefunden werden!")
4. Regeln für die erfolgreiche Verwendung von EMERALD
4.1. RPG Maker
Theoretisch gesehen ist es egal, wo man die Plugins und die Hauptscripte hin tut, bis auf das Hauptbootscript. Ich habe hier mal einfache Regeln erstellt, wie ich persönlich immer die Scripte sortieren.
Standard-Scripte und andere
SDK, APD, MACL, falls vorhanden
EMERALD
Vokabular
Ein Cern
Nun die Plugins
Bootscripte von anderen
Das Haupt-Boot-Script
Main
4.2. Ruby-Scripte in Ordnern
Nach Starten des Main-Scripts zunächst die nötigen normalen Scripte requiren.
Die Scripte emerald.rb, emvocab.rb, optional auch emcern.rb in den selben Ordner stecken.
Dort zwei Unterordner "emy" und "emb" erstellen.
Alle Plugins in den Ordner "emy" (Auch eigene Cerne).
Alle zusätzlichen Boot-Scripte in den Ordner "emb".
Das Haupt-Boot-Script als ".rb"-Datei neben emerald.rb legen, also im selben Ordner.
Das Haupt-Boot-Script requiren.
4.3. Aufgabe von Boot-Scripten und Cernen
Boot-Scripte sind Ruby-Scripte, ähnlich zum "Main" aus dem RGSS(2). Es erstellt einmalig Aliasse, die die Cernmethoden von EMERALD (z.B. EMY.cern_init(*args)) in bestimmte Klassen des Programms einbinden.
Die Cerne sind besondere Arten von Plugins. Sie werden im Gegensatz zum Rest direkt von EMERALD angesprochen, um sozusagen die Drecksarbeit zu machen. Das heißt im Klartext: Scripte zur richtigen Zeit ausführen, Fehler beheben, ggf. Plugins zur Laufzeit entfernen (Ohne Programmabstürze), usw.
Da jeder Entwickler andere Anforderungen an einen Programmablauf hat, sind die Cerne austauschbar, sodass man sich ggf. selbst welche schreiben kann. Standard sind CRN und CRN_Lite. Sie unterscheiden sich darin, dass CRN_Lite nur ausführt und bei Abstürzen sofort die fehlerhaften Plugins entfernt, der (klobigere) CRN jedoch ein größeres Exceptionhandling hat, das z.B. versucht, Dummy-Dateien zu erstellen und ein Script erneut laufen zu lassen, sollten Dateien fehlen (Errno::ENOENT).
5. Zukunftspläne
CRN v3.0
Noch unnötig komplexeres Exceptionhandling und etwas veränderte Arbeitsweise.
CRN_Smart
Minimalistischer Cern nach veränderter Arbeitsweise.
EMY v3.0
Etwas veränderte Arbeitsweise, richtige Überprüfung der Plugins bei Anfrage auf einen Kick.
Mehr Funktionen für APD und SDK statt nur deren Erkennung.
DLL-Plugin "TSys"
Ein etwas anderes Dateiformat mit optionaler Verschlüsselung. (Grundidee vergleichbar mit Marshal. Wer's braucht...^^")
Bugfixes, falls welche vorhanden sind, was ich nicht ausschließe.
Spezielle Plugins für eine dynamische GUI, Eventsteuerung/-Manipulation, und dem Abspielen von Animationen auf der Map, usw. ... (warten auf Motivationsphasen)
5.1. Bekannte Bugs:
Derzeit keine...
5.2. Vermutete Bugs:
Kann sein, dass die Standard-Boot-Scripte einen nicht geplanten Error werfen, falls das Script EMERALD nicht vorhanden ist, doch ist der Wurf einer Exception in diesem Fall eh' vorgesehen.
6. Muss ich noch etwas wissen, bevor ich damit rumspiele?
Ja, ich möchte zu einem gerne bei Verwendung irgendwo in den Credits angemerkt werden; als "Evrey".
Außerdem...
Das Schreiben eigener Plugins, Boot-Scripte, sowie Cerne steht euch frei. Tippt nach Lust und Laune. Fertige Plugins & Co. können mir anschließend (falls ihr es wollt) zugesendet werden, zur besseren Verbreitung (Ich würde sie lediglich parallel zu EMERALD als Download reinstellen, ggf. auch eigene Plugins dafür optimieren, um eure besser nutzen zu können, falls nötig).
Das Umschreiben/Editieren von EMERALD und dem Vocabular selbst ist 'ne heiklere Sache. Ich bin kein Fan von inoffiziellen Versionen. Juckt es euch in den Fingern, unbedingt daran zu basteln, so tut es, doch sollte dieses Werk eher für die Masse gedacht sein, schlage ich vor, mit mir zwecks gemeinsamer Entwicklung ein Team zu werden. So können die Ideen eine optimale Kompatibilität zu den Plugins erzielen. Diese Behauptung Stütze ich mal auf die Behauptung, dass ich EMERALD wohl am besten kennen dürfte^^" Angemerkt werden als Autoren natürlich ihr, und ich. Letzteres, da nunmal die Grundtechnik meine Schöpfung ist.
7. Schlusswort
Ich erhoffe mir mal, durch EMERALD vielen Programmierern lauter Aliasse ersparen zu können und zugleich eine höhere Kompatibilität unter den Scripten erzielen zu können.
Nuja...
Viel Spaß damit, würd' ich mal sagen!
8. Installation eines Plugins
Für die ohne Ruby-Kenntnisse die mit dem Maker arbeiten nochmal hier eine Kurzanleitung.
Ladet euch das Plugin als ".rb", ".txt", oder kopiert es euch aus dem Browser oder von sonst wo.
Öffnet die Dateien mit dem Texteditor und kopiert das Script dort raus, falls nicht schon von wo anders rauskopiert.
Erstellt irgendwo zwischen den Boot-Scripten und EMERALD ein neues Script und kopiert dort den Code rein.
Sollte es kein Plugin, sondern ein Zusatz-Boot-Script sein, kopiert den Inhalt direkt über das Haupt-Boot-Script und unter allen Plugins.
Löscht alle Plugins einfach aus der Scriptliste, die euch nicht gefallen, z.B. einen HUD oder das Windoof-Script.
9. Ich habe kein 7zip, wie öffne ich dieses #&§%$ Archiv?!
Geh' auf folgende Seite: THE_LINK! Dort lädst du dir für deine OS-Version 7zip runter. Installiere es, dann entpacke das Archiv mit dem 7zFM (oder so ähnlich heißt es).
WinRAR unterstützt ebenfalls den 7z-Format. Unter Linux kann es zB der GNOME Archive Manager öffnen.
Archive Manager hat ein 7z-Plugin für sowas.
1. Allgemein
Sprache Deutsch, Englisch Maker RPG Maker XP, RPG Maker VX SDK SDK ist optional APD APD ist optional Mex Kein Mex-Code RDoc Documentation
2. Compatibility Notes
2.1. Used Classes
EEMYCMP
EEMYRUN
File
Game_System
Module
Object
Scene_Base
Scene_Map
self
2.2. Used Modules
CRN
CRN_Lite
EMY
Errno
Kernel
SDK
VCB
Windoof
2.3. Used Global Variables
$
$!
$:
$APD_install
$DEBUG
$fontface
$scene
2.4. Aliasses
EMY.log1("ERR","CERN",$!.message(),"Verantwortlich sind vermutlich aliasse statt alias_method().")
EMY.log1("ERR","CERN",$!.message(),"Verantwortlich sind vermutlich aliasse statt alias_method().")
EMY.log1("ERR","CERN",$!.message(),"Verantwortlich sind vermutlich aliasse statt alias_method().")
EMY.log1("ERR","CERN",$!.message(),"Verantwortlich sind vermutlich aliasse statt alias_method().")
alias_method(:emy_cern_file_initialize,:initialize) if (!method_defined?(:emy_cern_file_initialize))
alias_method(:emy_module_alias_method,:alias_method) if (!method_defined?(:emy_module_alias_method))
def alias_method(sym0,sym1)
emy_module_alias_method(sym0,sym1)
alias_method(:emy_game_system_initialize,:initialize) if (!method_defined?(:emy_game_system_initialize))
alias_method(:emy_game_system_update,:update) if (!method_defined?(:emy_game_system_update))
alias_method(:emy_scene_map_main,:main) if (!method_defined?(:emy_scene_map_main))
alias_method(:emy_scene_map_update,:update) if (!method_defined?(:emy_scene_map_update))
alias_method(:emy_game_system_initialize,:initialize) if (!method_defined?(:emy_game_system_initialize))
alias_method(:emy_game_system_update,:update) if (!method_defined?(:emy_game_system_update))
alias_method(:windoof_evrey_scene_map_update,:update) if (!method_defined?(:windoof_evrey_scene_map_update))
Öffne dein Projekt mit dem Maker. Danach öffne mit F11 den RGSS Editor, scrolle links die Liste bis zum Schluss. Klicke dann rechts auf 'Main' und dann 'Insert'. Nenne das neue Skript Emerald V2 und füge auf der rechten Seite ein: QuellcodeWeiterlesen
Kopiere die benötigten Dateien in dein Projekt.
Was enthält der Ordner, den ich da jetzt gleich lade genau?
./emerald.rb => Hauptscript
./emvocab.rb => Vocabular-Plugin
./emcern.rb => Standard-Cern "CRN"
./bweboot.rb => Boot-Script ohne Schnittstellen
./rgss1boot.rb => Boot-Script für den RPG Maker XP, mit oder ohne SDK
./rgss2boot.rb => Boot-Script für den RPG Maker VX
./emy/cernlite.rb => Abgeschlankter "CRN"
./emy/windoof.rb => Ein Scherzplugin, das seine Macht nur unter dem OS Windows entfaltet. Eher zu Demozwecken *hust*