Hallo zusammen,
ich wollte für mein Projekt eine Art Lager oder Stadt, indem alle verfügbaren Gruppenmitglieder sind und darauf warten mitgenommen zu werden (Wie in Dragon Age oder Mass Effect).
Das Yanfly Engine Party System Plugin bietet wie ich finde eine gute Oberfläche dafür doch es gab ein Problem.
In dem Plugin von Yanfly werden die Gruppenmitglieder als "Reserviert" markiert, wenn sie entfernt wurden und bleiben faktisch in der Gruppe.
Für mich war das inakzeptabel, weil ich mit den Gruppenmitgliedern die zurück gelassen werde auch etwas anfange, dabei können sie nicht ausgegraut in der Gruppe liegen.
Ich möchte nicht, dass sie die Ausrüstung wechseln können usw.
Hinzu kommt, dass ich mit Switches im Spiel selbst entscheiden wollte, wann welcher Charakter für die Gruppe zur Verfügung steht. Vielleicht ist er verletzt oder auf Reisen usw.
Das mag jetzt ein spezieller Fall sein aber vielleicht gibt es doch den ein oder anderen der eben genau das auch benötigt.
Also schreib ich hier die Code-Anpassungen, die direkt am Plugin vorgenommen werden müssen rein.
Updates
Natürlich muss klar sein, dass damit Updates für das Plugin erstmal nicht mehr gehen. Ich werde versuchen den Code für mich aktuell zu halten und wenn Interesse besteht ihn dann hier zu aktualisieren.
Rechte
Des Weiteren liegen die Rechte und Bedingungen für das Benutzen des Plugins selbstverständlich weiterhin bei Yanfly.
Ich werde deshalb nicht das Plugin hier anbieten, sondern dafür muss man schon auf die Webseite von ihm gehen:
Hier ist der Link: http://yanfly.moe/2015/11/20/yep-29-party-system/
Pluginversion
Getestet und implementiert wurde für Pluginversion 1.12.
Code Anpassungen - Nur hinzufügen, nichts löschen oder anpassen!
In der JavaScript Datei von Yanfly in YEP_PartySystem.js muss folgender Code hinzugefügt werden:
Der Teil beginnend ab dem Kommentar "// napkin Addon" muss hinzugefügt werden.
1. Nach der Funktion Game_Party.prototype.addActor muss folgender Funktionsaufruf passieren
- Yanfly.Party.Game_Party_addActor = Game_Party.prototype.addActor;
- Game_Party.prototype.addActor = function (actorId) {
- Yanfly.Party.Game_Party_addActor.call(this, actorId);
- if (this._battleMembers.contains(actorId)) return;
- if (!this._battleMembers.contains(0)) return;
- var index = this._battleMembers.indexOf(0);
- this._battleMembers[index] = actorId;
- $gamePlayer.refresh();
- $gameMap.requestRefresh();
- this.rearrangeActors();
- };
- Game_Party.prototype.addActorAsReserve = function (actorId) {
-
-
- Yanfly.Party.Game_Party_addActor.call(this, actorId);
- };
Alles anzeigen
Dasselbe direkt unten drunter unter der Funktion Game_Party.prototype.removeActor.
- Yanfly.Party.Game_Party_removeActor = Game_Party.prototype.removeActor;
- Game_Party.prototype.removeActor = function (actorId) {
- Yanfly.Party.Game_Party_removeActor.call(this, actorId);
- if (!this._battleMembers.contains(actorId)) return;
- var index = this._battleMembers.indexOf(actorId);
- this._battleMembers[index] = 0;
- $gamePlayer.refresh();
- $gameMap.requestRefresh();
- this.rearrangeActors();
- };
- Game_Party.prototype.removeActorFromParty = function (actorId) {
-
-
- Yanfly.Party.Game_Party_removeActor.call(this, actorId);
- };
Alles anzeigen
2. Beim Schließen des Partymanagers in Zeile 1662 muss eine neue Funktion aufgerufen werden.
Hier muss in der bestehenden Funktion Scene_Party.prototype.commandFinish ein Aufruf der neuen Funktion eingefügt werden.
- Scene_Party.prototype.commandFinish = function () {
-
- this.removeAllReserve();
- if ($gameParty.inBattle()) {
- $gameParty.reconstructActions();
- if (BattleManager._savedActor) {
- BattleManager._actorIndex = BattleManager._savedActor.index();
- }
- }
- this.popScene();
- };
- Scene_Party.prototype.removeAllReserve = function () {
- var actorsInParty = $gameParty._actors.length;
- var actorsToRemove = [];
- for (var i = 0; i < actorsInParty; i++) {
- var actorId = $gameParty._actors[i];
- if ($gameParty._battleMembers.contains(actorId)) {
- continue;
- }
- actorsToRemove.push(actorId);
- }
- for (i = 0; i < actorsToRemove.length; i++) {
-
-
- $gameParty.removeActorFromParty(actorsToRemove[i]);
- }
- };
Alles anzeigen
Das wärs dann schon.
Im Maker müsste man dann irgendeine Person hinstellen, beim Verlassen des Lagers oder irgendein Event eben, dass dann überprüft welche Gruppenmitglieder können mitgenommen werden.
In meinem Spiel sieht das dann so aus:
Das wärs. Bin mal gespannt, ob es irgendjemand gibt, der davon profitiert.
Ich habs für mich entwickelt, also wieso nicht teilen.
Ob ihr mich in die Credits packt oder nicht ist eure Sache. Yanfly gebührt die Ehre für das Plugin.