Beiträge von waynee95

    Am Anfang ist das alles auch echt verwirrend mit den Plugins, aber mit der Zeit hat man dann den Dreh raus. :)

    Ich würde dir empfehlen immer die Videos von Yanfly's Plugins zu schauen, da wird immer alles ganz gut erklärt.


    Habe das NameInput Menü ein bisschen bearbeitet. Kannst ja mal ausprobieren, ob das mit deiner Auflösung jetzt passt (Download).

    Wegen der Message Box kannst du YEP_MessageCore und YEP_X_ExtMesPack1.js benutzen und da dann die Breite anpassen. Ich habe ein Fix erstellt, damit die Position des Choice Windows richtig ist, wenn man eine kleineres Message Window benutzt als die Auflösung (Download).


    Für das Hauptmenü kannst du mal bei SumRndmDde vorbeischauen, er hat ein paar coole Menüs.


    Für das Name Input Problem kann ich die Tage gerne mal schauen, dass ich da einen Fix schreibe. :)

    Welche Auflösung benutzt du?

    i_RMMV


    Hey! Heute gibt es ein weiteres Tutorial von mir zum Thema Scripting/Plugins für den RPG Maker MV.


    Voraussetzungen:

    • Ihr braucht ein Programm, mit dem man programmieren kann, da es im MV keinen eingebauten Editor mehr gibt, wie es beim VX Ace war. Ich benutze Notepad++ (Download).
    • Dieses Tutorial baut auf dem ersten Teil auf (Link).


    Grundlage für dieses Tutorial ist das Plugin, welches wir im ersten Tutorial erstellt haben. Wie Ihr sehen könnt, habe ich noch ein paar Dinge hinzugefügt.

    Heutiges Thema: Plugin Parameter


    Wir ihr sehen könnt habe ich das Plugin schon um einige Dinge erweitert.


    Imported Object
    Das ist ein globales Objekt. Der Ausdruck Imported II {} prüft, ob das Objekt bereits definiert wurde. Falls ja, wird das schon vorhandene Imported Objekt der Variable zugewiesen. Andernfalls wird mit dem Object-Literal (mehr Infos hier) ein neues leeres Objekt erzeugt. Danach setzen wir die Eigenschaft (im englischen Property) WAY_TitleSceneAddon auf true, um zu signalisieren, dass unser Plugin importiert wurde.
    (mehr Infos zu Objekteigenschaften und der Punkt-Notation hier).


    Die meisten Plugin Coder verwenden das, denn damit kann man ganz leicht überprüfen, ob dieses Plugin verwendet wird. Das spielt zum Beispiel eine Rolle, wenn ich bestimmte Funktionsweisen anpassen muss, um Inkompatibilität von Plugins zu verhindern oder wenn ich ein Plugin schreibe, dass ein anderes Plugin voraussetzt.


    Namespace
    Im ersten Tutorial haben wir ja ein Nametag kennengelernt. Dieses werden wir heute noch für weitere Dinge benutzen. Wir legen von unserem Nametag ein globales Objekt an. Über dieses Objekt haben wir Zugriff auf alle unsere Plugins.


    Jetzt können wir endlich mit dem eigentlichen Thema beginnen.:)


    Plugin Parameter
    Plugin Parameter sind ein echt praktisches Feature des MV. Man kann damit ganz leicht Werte im Pluign ändern. In den früheren Makern musste man immer in den Code reinschauen und dort die Werte anpassen. Gerade für Anfänger ist das vielleicht gar nicht so leicht. Deshalb hat man über den Plugin-Manager Zugriff auf die einzelnen Pluign Parameter.


    Manchmal sind sie aber echt nervig, da es gerade bei vielen Plugin Parametern im Editor echt unübersichtlich werden kann.


    JavaScript
    1. //=============================================================================
    2. // Plugin Parameters
    3. //=============================================================================
    4. var params = PluginManager.parameters('WAY_TitleSceneAddon');


    Um auf meine Plugin Parameter Zugriff zu bekommen, verwendet man die Funktion PluginManager.parameters(pluginName). Die Funktion gibt ein Array zurück, welches wir in der Variable params speichern (mehr zu Arrays hier).

    Es ist wichtig, dass das Plugin genauso heißt, wie der Parameter der übergeben wird. Die Funktion rufen wir in userem IIFE Ding ganz oben auf.


    Um einen Plugin Parameter im Editor hinzuzufügen, verwendet man eine ganz bestimme Methode. Die Plugin Parameter werden als Kommentar oben eingefügt.
    Mit unserem Plugin können wir ja die Position des Command Windows ändern. Damit man nicht jedes mal, wenn man die Position ändern will, in den Code schauen muss, fügen wir Plugin Parameter hinzu.



    Plugin Paramter bestehen aus mehreren Teilen. Den Namen des Parameters gibt man mit @param an. Danach kann man mit @desc eine kleine Beschreibung hinzuzufügen.

    Außerdem kann man dem Parameter noch einen default Wert geben, indem man @default benutzt. Jedoch könnte man die Letzten beiden auch weglassen.


    Wenn wir nun in den Plugin-Manager schauen, können wir unsere beiden Parameter sehen und auch Werte eintragen. Diese Werte wollen wir dann für die Command Window Position nutzen.


    JavaScript
    1. //=============================================================================
    2. // Plugin Parameters
    3. //=============================================================================
    4. var params = PluginManager.parameters('WAY_TitleSceneAddon');
    5. WAY.TitleSceneAddon.x = Number(params['Command Window X']);
    6. WAY.TitleSceneAddon.y = Number(params['Command Window Y']);


    Da params ein Array ist, können wir über den Namen des Parameters auf den Wert zugreifen und speichern diese jeweils in einer Variable.
    Die beiden Variablen können wir jetzt in unserer Funktion updatePlacement verwenden. Aber hier müssen wir aufpassen. Die Werte sind eine Zeichenkette (im Englischen String) deshalb müssen wir diese erst zu einer Zahl umwandeln. Dazu nutzen wir die Funktion
    Number(n), die beliebige Werte zu einer Zahl umwandelt (mehr Infos zu Number hier).


    JavaScript
    1. //=============================================================================
    2. // Window_TitleCommand
    3. //=============================================================================
    4. Window_TitleCommand.prototype.updatePlacement = function() {
    5. this.x = WAY.TitleSceneAddon.x;
    6. this.y = WAY.TitleSceneAddon.y;
    7. };


    Wir können noch weitere Parameter hinzufügen, wie den Namen des Quit Commands, Command Alignment und die Opacity vom Command Window.



    Wir speichern uns die Werte wieder in Variablen.


    JavaScript
    1. WAY.TitleSceneAddon.commandName = params['Command Name'];
    2. WAY.TitleSceneAddon.opacity = Number(params['Command Window Opacity']);
    3. WAY.TitleSceneAddon.align = params['Command Text Align'];


    Wir ersetzen den vorherigen Namen des Command einfach mit der Variable _.commandName. Außerdem prüfen wir vorher mit einer If-Bedingung, ob ein Name eingetragen wurde, wenn nicht fügen wir kein Command hinzu (mehr Infos zu If hier).


    JavaScript
    1. var _Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList;
    2. Window_TitleCommand.prototype.makeCommandList = function() {
    3. _Window_TitleCommand_makeCommandList.call(this);
    4. if (WAY.TitleSceneAddon.commandName !== '') {
    5. this.addCommand(WAY.TitleSceneAddon.commandName, 'exitGame');
    6. }
    7. };


    Mit der Funktion itemTextAlign können wir das Alignment bestimmen. Die Funktion hat als Rückgabewert entweder 'left', 'center' oder 'right'. Dei Funktion fügen wir einfach unserem Plugin hinzu.

    JavaScript
    1. Window_TitleCommand.prototype.itemTextAlign = function() {
    2. return WAY.TitleSceneAddon.align;
    3. };


    Außerdem erweitern wir die Funktion createCommandWindow. Nachdem das Command Window erstellt wurde, setzen wir die Opacity auf unseren Wert.


    JavaScript
    1. var _Scene_Title_createCommandWindow = Scene_Title.prototype.createCommandWindow;
    2. Scene_Title.prototype.createCommandWindow = function() {
    3. _Scene_Title_createCommandWindow.call(this);
    4. this._commandWindow.setHandler('exitGame', this.commandExitGame.bind(this));
    5. this._commandWindow.opacity = WAY.TitleSceneAddon.opacity;
    6. };


    Das komplette Plugin sieht nun so aus.



    Vielen Dank für's lesen! Ich hoffe es hat Spaß gemacht und es konnte einen kleinen Einblick geben, wie man mit Plugin Parametern arbeitet und was man damit so alles anstellen kann.;)


    lg

    waynee95







    Hm, könnte durchaus an irgendwelchen Inkompabilitäten liegen.


    Ne es gibt keine weiteren Einstellungen, das ist einfach Plug'n Play.

    Dankeschön! Ja, dass hat mich auch gestört. Aber man kann es ja recht schnell selber basteln :)


    Das nächste Tutorial ist auch schon in Arbeit und wird auf diesem aufbauen. Unter anderem wird es um Plugin Parameter und Icons gehen und ein bisschen JavaScript wie Arrays und Schleifen.


    Falls jemand irgendwelche Wünsche oder Ideen für ein Plugin/Tutorial hat, schreibt mir gerne eine PM :D!

    i_RMMV


    Hey! Heute gibt es das erste Tutorial von mir zum Thema Scripting/Plugins für den RPG Maker MV.


    Voraussetzungen: Ihr braucht ein Programm, mit dem man programmieren kann, da es im MV keinen eingebauten Editor mehr gibt, wie es beim VX Ace war. Ich benutze Notepad++ (Download).


    Erste Schritte

    Als erstes Starten wir mit dem Grundgerüst eines Plugins. Das könnt Ihr einfach kopieren und einfügen.


    Ganz oben steht der Name des Plugins. Viele haben ihr eigenes Nametag, meins ist zB. WAY, dass vor dem Pluginname hinzugefügt wird, so kann man schnell sehen, von wem welches Plugin ist und man kann sie leicht im Plugin-Manager sortieren.

    Außerdem kann man noch einiges an Info hinzufügen.


    Wenn Ihr den Namen eingetragen habt, könnt Ihr die Datei speichern. Plugins befinden sich im Projekt\js\plugins. Vergesst dabei nicht die Dateiendung .js.


    Ganz unten startet dann der Code. Der Code wird einfach immer in dieses Ding geschrieben. Ich werde hier nicht genau drauf eingehen, was genau das ist, da das den Rahmen dieses Tutorials sprengen würde. Wer gerne mehr darüber erfahren will, das Ding nennt man Immediately-Invoked Function Expression, oder kurz IIFE (mehr Infos hier). Das ist ein Konstrukt in JavaScript, mit dem man verhindern kann, dass Funktions- und Variablendeklarationen im globalen Namespace landen. Das klingt natürlich erstmal total heftig, aber im Grunde bedeutet das einfach nur wir haben einen eigen Raum in dem wir Dinge tun können und es geht weniger kaputt dabei.



    So nachdem wir mit dem ganzen Kram fertig sind, können wir mit dem eigentlichen Plugin beginnen.


    Heutiges Thema: Titelbildschirm

    • Position vom Command Window ändern
    • Spiel verlassen Command hinzufügen, um das Spiel vom Titelbildschirm aus zu beenden



    I. Position ändern

    Zuerst schauen wir uns mal an, wie der Titelbildschirm im MV funktioniert. Dafür gehen wir in den \js Ordner und finden dort eine Menge Dateien.

    Der Titelbildschirm ist eine Scene, deshalb schauen wir uns rpg_scenes.js an und suchen nach Scene_Title. Dort sehen wir dann, dass ein Window_TitleCommand erstellt wird.

    Das ist doch genau das, was wir verändern wollen. Also schauen wir in rpg_windows.js und suchen nach Window_TitleCommand.

    Wenn wir uns das genau anschauen, finden wir die Funktion updatePlacement. Das hört sich doch gut, also kopieren wir das ganze in unser eigenes Plugin.


    JavaScript
    1. (function() {
    2. //=============================================================================
    3. // Window_TitleCommand
    4. //=============================================================================
    5. Window_TitleCommand.prototype.updatePlacement = function() {
    6. this.x = (Graphics.boxWidth - this.width) / 2;
    7. this.y = Graphics.boxHeight - this.height - 96;
    8. };
    9. })();


    Dann sollte das ganze so aussehen. Zur Übersichtlichkeit habe ich den ganzen oberen Teil vom Plugin weggelassen, da das sonst viel zu lang wird. Außerdem kann man sein Plugin noch strukturieren, indem man über die einzelnen Funktionen den Namen schreibt. Ich würde das auf jeden Fall empfehlen, denn so findet man alles viel schneller.


    Schauen wir uns das Ganze mal genauer an. In der Funktion werden zwei Variablen Werte zugewiesen. Die beiden Variablen heißen x und y. Das this bezieht sich dabei auf das Window_TitleCommand und bedeutet, wir nehmen vom Command Window die x und y Position.

    (Mehr Infos zu this hier)

    Hier können wir jetzt unsere gewünschten Positionen eintragen. Das kann man entweder mit festen Zahlen machen oder mit einer Berechnung.

    Man kann sich den Bildschirm als ein x,y-Koordinatensystem vorstellen. Dabei ist die linke obere Ecke vom Bildschirm 0,0. Graphics.boxHeight und Graphics.boxWidth sind schon vorhandene Variablen, die wir benutzen können. Die beiden Variablen stehen für die Auflösung des Spiels, per default sind die Werte 816 bzw. 624. this.height und this.width ist die Höhe bzw. Breite des Command Windows.


    JavaScript
    1. Window_TitleCommand.prototype.updatePlacement = function() {
    2. this.x = 42;
    3. this.y = Graphics.boxHeight - this.height - 42;
    4. };


    Nun würde das Command Window unten links in der Ecke sein.


    Den ersten Teil haben wir also schon geschafft.


    II. Command hinzufügen

    Um ein neues Command hinzufügen schauen wir uns wieder das Window_TitleCommand an.

    Dort finden wir die Funktion makeCommandList, diese erstellt alle Commands. Also kopieren wir uns die Funktion wieder ins unser Plugin.



    Hier können wir nun unser eigenes Command hinzufügen. Dazu benutzen wir die Funktion this.addCommand(name, handler, enabled). Der erste Parameter ist der Name des Commands, welcher später im Spiel zu sehen ist. Als Zweites kommt der Name des Handlers, der später nochmal wichtiger wird. Der dritte Parameter gibt an, ob man das Command benutzen kann oder nicht. Das wird beim Spiel laden Command benutzt, denn wenn man das Spiel startet und kein gespeichertes Spiel vorhanden ist, kann man das Command nicht benutzen und es ist ausgegraut.



    Wenn wir jetzt das Spiel starten, sehen wir das neue Command im Command Window. Jedoch passiert noch gar nichts. Das liegt daran, dass wir das noch nicht implementiert haben. Die Funktionsweise dahinter wird getrennt implementiert.

    Diesmal schauen wir wieder in rpg_scenes.js und finden createCommandWindow. Dort wird das Fenster erstellt und alle Handler für die einzelnen Commands.


    JavaScript
    1. Scene_Title.prototype.createCommandWindow = function() {
    2. this._commandWindow = new Window_TitleCommand();
    3. this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this));
    4. this._commandWindow.setHandler('continue', this.commandContinue.bind(this));
    5. this._commandWindow.setHandler('options', this.commandOptions.bind(this));
    6. this.addWindow(this._commandWindow);
    7. };


    Hier erstellen wir also auch den Handler für unser neues Command. Dafür benutzen wir die Funktion setHandler(handler, method). Der erste Parameter gibt an, zu welchen Command der Handler gehört und der zweite Parameter ist die Funktion, die dann ausgeführt wird, wenn man auf das Command klickt.

    Für das Spiel starten Command, wird dann die Funktion this.commandNewGame ausgeführt. Wenn wir unseren 'exitGame' Handler hinzufügen wollen, müssen wir also erstmal eine neue Funktion erstellen.


    JavaScript
    1. //=============================================================================
    2. // Scene_Title
    3. //=============================================================================
    4. Scene_Title.prototype.commandExitGame = function() {
    5. this.fadeOutAll();
    6. SceneManager.exit();
    7. };


    Wir erstellen eine Funktion mit dem Namen commandExitGame. Die Funktion blendet den Bildschirm aus und beendet dann das Spiel.

    Jetzt können unseren Handler erstellen. Der Name vom Handler muss gleich dem Namen sein, den wir benutzt haben, als wir das Command erstellt haben.


    JavaScript
    1. Scene_Title.prototype.createCommandWindow = function() {
    2. this._commandWindow = new Window_TitleCommand();
    3. this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this));
    4. this._commandWindow.setHandler('continue', this.commandContinue.bind(this));
    5. this._commandWindow.setHandler('options', this.commandOptions.bind(this));
    6. this.addWindow(this._commandWindow);
    7. this._commandWindow.setHandler('exitGame', this.commandExitGame.bind(this));
    8. };


    Wenn wir jetzt unser Spiel starten und im Titelbildschirm auf Spiel beenden, klicken sich das Spiel. ^^


    Eigentlich sind wir fertig, wir haben alles gemacht, was wir scripten wollten. Jedoch haben wir einfach alle vorhandenen Funktionen überschrieben und somit ersetzt. Hätten wir auch noch ein anderes Plugin installiert, dass auch ein neues Command zum Command Window hinzufügt, würden wir das überschreiben. Deshalb gibt es das Aliasing.

    In JavaScript können wir Funktionen in Variablen speichern.


    JavaScript
    1. var _Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList;


    Wir speichern also die alte Funktion makeCommandList vom Window_TitleCommand in einer Variable. Die Variable nennen wir _Window_TitleCommand_makeCommandList. Wenn wir jetzt also die Funktion überschreiben, haben wir immernoch eine Kopie der alten Funktion. Diese können wir auch immernoch aufrufen.


    JavaScript
    1. var _Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList;
    2. Window_TitleCommand.prototype.makeCommandList = function() {
    3. _Window_TitleCommand_makeCommandList.call(this);
    4. this.addCommand("Spiel verlassen", 'exitGame');
    5. };


    Jetzt können wir einfach die alte Funktion aufrufen, dass macht man mit call. Und danach können wir unsere neuen Sachen hinzufügen.

    Das Gleiche machen wir mit der Funktion createCommandWindow.


    JavaScript
    1. var _Scene_Title_createCommandWindow = Scene_Title.prototype.createCommandWindow;
    2. Scene_Title.prototype.createCommandWindow = function() {
    3. _Scene_Title_createCommandWindow.call(this);
    4. this._commandWindow.setHandler('exitGame', this.commandExitGame.bind(this));
    5. };


    Damit sind wir am Ende dieses Tutorials angekommen.

    Das komplette Plugin sieht nun so aus:



    Vielen Dank für's lesen! Ich hoffe es hat Spaß gemacht und es konnte einen kleinen Einblick geben, wie man ein Plugin erstellt.

    Wer direkt mit dem zweiten Teil weiter machen will, kann hier klicken! :)


    lg

    waynee95

    Herzlich Willkommen :)

    Ich bin auch eher der Programmierer und kenne mich recht gut mit den bekannteren Plugins aus, also falls da mal fragen sind, vielleicht kann ich helfen.


    Zu den mehreren Party-Mitgliedern kannst du ja mal das PartySystem Plugin von Yanfly anschauen, falls du das noch nicht kennst.