Hallo und willkommen hier.
Ich hoffe dich stört meine Kraftreserve nicht all zu sehr, ausser du bist ein Pokemon mit einer Schwäche für Käfer-Attacken 😬
Und endlich mal nicht mehr der einzige Österreicher hier
Hallo und willkommen hier.
Ich hoffe dich stört meine Kraftreserve nicht all zu sehr, ausser du bist ein Pokemon mit einer Schwäche für Käfer-Attacken 😬
Und endlich mal nicht mehr der einzige Österreicher hier
Ich arbeite derzeit an der Musikauswahl bei meinem Spiel. Sobald diese fertig ist, gehe ich die letzten paar Schritte an um endlich das spielbare Material fertig zu bringen. Also es wird schon.
Ansonsten arbeite ich an einem Plugin, welches den Timer im Maker mit einigen Funktionen erweitert. Zurzeit habe ichs hin bekommen, dass man dem Timer Zeit dazu bzw. entfernen kann, den Timer zu pausieren, den Timer ab einer bestimmten verbleibenden Zeit einzufärben und natürlich die Position verändern. Geplant ist noch die Schriftart änderbar machen, so dass man diese immer wieder auswechseln kann. Ebenso soll auch die Schriftgröße angepasst werden.
Kein Problem, war mir nicht sicher, ob das bekannt ist oder nicht. Stört im Grunde nicht, wenn mans mal behirnt hat
Hallo,
ich sehe es jetzt zwar nicht direkt als Bug, aber der Vergleich von einem Bearbeiteten Beitrag sieht dezent komisch aus, da die html-tags nicht interpretiert werden.
Ist mir gerade am Handy aufgefallen. Ist jedoch der Desktopmodus, selbiges gibts aber auch im mobilen Modus.
So ich habs mir mal angesehen und getestet und funktioniert auch im MV. Da haben die wie es aussieht den Timer gar nicht angerührt. Mit dem Download oben kannst du dir das Plugin runter laden.
lg
Im Grunde nicht, ich schau es mir dann nachher gleichmal an.
lg Flip
Hallo,
aufgrund von dem Wunsch von Rinober habe ich ein kleines Plugin erstellt, in welchem man die Position vom Timer über Variablen handhaben kann.
Ihr könnt die Variablen im Plugin selbst definieren, wie Ihr wollt. Ich sehe hier auch eher von einem Screenshot ab, da man halt nur die Position
davon verändern kann. Falls jedoch jemand sich dringend einen Screenshot wünscht, gerne Melden und ich reiche einen neuen nach.
Ihr könnt das Plugin für Kommerzielle und Nicht-Kommerzielle Projekte verwenden. Credits gehen an FlipelyFlip.
Hier auch noch der Download: TimerPosition.zip
Liebe Grüße,
Flip
Kojote ich habs sogar inzwischen um ein paar Funktionen erweitert und würde das gesamte dann zusätzlich noch zur Basisversion vorstellen.
Bitte gern, will langsam wieder vermehrt Plugins schreiben, wenn es die Zeit zulässt und da war das grade wieder eine gute Übung, die ganzen Grundlagen ins Gedächtnis zu rufen.
War auch eine relativ spannende Suche nach der Anzeige vom Timer.
Hallo,
ich hab da mal kurz was zusammen gebastelt, nachdem ich endlich gefunden habe, wo es eingestellt wird. Es ist relativ einfach zu Verwenden. Du musst lediglich 2 Variablen festlegen, welche für die X bzw. Y Koordinate stehen und dann kannst du diese Ingame verändern, wie du es gerade brauchst.
lg Flip
Habs jetzt nicht getestet, aber sollte mit folgendem funktionieren:
$gamePlayer._dashing = true;
$gamePlayer._dashing = false;
Wenn du noch wissen willst, ob der Spieler gerade am Rennen ist, hast du auch die Möglichkeit das mit dem Schnipsel abzufragen:
$gamePlayer.isDashing()
lg Flip
Edit:
Grad gemerkt, dass dieser Befehl nix bringt. Es gibt von Haus aus keine Funktion, die einem das ermöglicht. Wenn du es während dem Spielen auf einer Map immer wieder an unf aus schalten willst, müsste man eine Funktion in JavaScript bearbeiten.
lg
Fällt mir gerade auf, FlipelyFlip kann sich bald einen individuellen Benutzertitel kaufen.
Gut erkannt, nicht mehr lange und ich habs
noch dazu ohne einen Bilderdump 😬
Ohje, da hab ich schlechte Nachrichten für dich.
Um den nächsten Rang zu erreichen musst du in Pokemon Rot neu beginnen, Glumanda als Starter wählen und dann in der ersten Möglichen Wiese auf Level 98 trainieren, ohne es zu entwickeln. Sobald du das geschaft hast, startest du das Spiel erneut neu und machst das selbe mit Schiggy, nur diesmal bis 99. Sobald Shiggy Level 99 erreicht hat, musst du ein letztes Mal neu starten und nimmst Bisasam als dein Starterpokemon. Jetzt trainierst du Bisasam bis Level 100 (egal wo) ohne es zu Entwickeln. Sobald es auf Level 100 ist, mussr du Kojote 800€ überweisen und du erreichst den nächsten Rang.
Spaß bei seite, es hängt ganz von deiner Anzahl an Beiträgen ab. Du kannst mal schauen wer einen anderen Rang hat und wieviele Beiträge diese Person geschrieben hat. Dann kannst du ungefähr erahnen, wie lange du noch für die nächste Stufe hast.
Habs gestern fixen können, aber das Problem an sich scheint noch nicht behoben zu sein, nen bisschen was macht mich gerade skeptisch an dem Bug. Ich bin noch am forschen wo das Problem ist.
wenn du mir die Fehlermeldung verrätst, dann kann ich dir eventuell weiter helfen, gern auch per PN.
Das meiste Wissen bei den Damage Formulas kommt vom Ace damals, wie ich ein Script von Yanfly genutzt hatte, welches mir mehr Kontrolle über die Damage Formula gab, wo ich dann mit der Zeit genauer hin schaute und merkte, dass es eigentlich nur statt dem Wert aus der Datenbank, den aus dem Script weiter gegeben hat. Von da an begann ich dann halt vieles auszutesten, was geht und was nicht.
Ich habe dann halt nur überlegt, wie man da einen Stehlen-Skill bauen könnte und wie man das mit den Bomben umsetzt. Es hilft einem zwar, dass man weiß wie man Code schreibt, aber man schafft das im Grunde auch ohne.
Hallo,
ich arbeite derzeit an ein paar Szenen in Lumos und auch an dem ersten Mini-Bosskampf. Vorzeigbares hab ich leider nicht wirklich, da nicht all zu viel neues Grafisch dazu gekommen ist.
Ich würde aber schon mal 1-2 Leutchen suchen, die mir den ersten Abschnitt testen würden.
Diese Punkte werden uns einige mächtige Möglichkeiten eröffnen, bei der wir schon sehr Tief in der Materie drin hängen werden. Es wird teilweise sehr kompliziert werden, aber ich gebe mir Mühe, euch das ganze so einfach wie Möglich zu erklären! Falls trotzdem Fragen aufkommen, meldet euch gern in den Kommentaren und wir fangen jetzt ohne große Umschweife mit dem Tutorial an. Haltet euch fest, jetzt geht es los!
Wie schon eingangs erwähnt, richtet sich dieses Tutorial auf fortgeschrittene Anwender. Wir werden uns teilweise auch etwas tiefer in der Materie bewegen, da ich meinen Fokus auch etwas erweitere und nicht nur in der Schadensformel hängen werde, sondern auch etwas allgemeiner mit den Skills arbeiten werde. Die .js welche ich für dieses Tutorial erstellt habe, wurde selbstverständlich an diesem Tutorial angehängt und kann dann von euch selbst auch nochmal in Ruhe begutachtet werden. Wer will, kann diese auch in sein eigenes Projekt einbinden.
Diese Formeln können im Grunde ebenfalls bei RPG Maker VX Ace bzw. RPG Maker MV verwendet werden, benötigen jedoch etwaige Anpassungen.
Dieser Punkt ist ein interessantes Konzept für Schadensberechnung, da man so immer mindestens 1 Schaden anrichtet, wenn der Skill schaden austeilt, man aber eindeutig zu Schwach ist, um dem Gegner wirklich Schaden auszurichten. Wenn wir den Standardangriff als Grundlage her nehmen, würde das wie folgt aussehen:
dmg = a.atk*4 - b.def*2; if (dmg < 1) { dmg = 1; }; dmg;
dmg = a.atk*4 - b.def*2; ist unsere übliche Schadensformel, welche an die Variable dmg übergeben wird.
if (dmg < 1) { dmg = 1; }; dmg; hier wird mit einem if überprüft, ob die Variable dmg weniger Schaden als 1 machen würde und falls ja, wird der Schaden auf 1 gesetzt. Das dmg; dient dazu, dass der Schaden ausgegeben wird.
Im Grunde war dies eine einfache Wiederholung aus dem vorherigen Kurs und konnte auch mit diesem Wissen von dort umgesetzt werden. Dieser Punkt wird jedoch gelegentlich im Tutorial erwähnt, weswegen es eine gute Idee ist, diesen auch hier noch vorzuzeigen.
Hier sind wir schon beim ersten Punkt, der uns in diesem Tutorial sehr nützlich ist. Es gibt einige Standard-Möglichkeiten, die einem beim BattleLog einen vordefinierten Text anzeigen, aber wenn wir selbst einen aufbauen wollen, dann wird das für viele ohne ein Plugin nicht funktionieren. Doch da liegt Ihr falsch. Ich zeige euch wie es geht!
BattleManager._logWindow.addText("Ich bin ein Text, der nun angezeigt werden kann"); Damage-Formula;
Eine kurze Erklärung was dieser Befehl macht und wie mächtig dieser wirklich wird.
BattleManager._logWindow.addText( dies fügt eine Nachricht zum Kampf-Log mit hinzu, sobald der Skill genutzt wird. Hier kann man spezielle Nachrichten reinschreiben, die auch den Gegner betreffen. Beim Text kann man zum Beispiel auch ausgeben, dass der Anwender mit dem Namen XY das Ziel YZ ganz bezaubernd findet. Dies würde dann so aussehen:
BattleManager._logWindow.addText(a.name() + " findet " + b.name() + " ganz bezaubernd.");
Dies würde also aussagen, dass sobald der Skill verwendet wird, steht dann im Kampflog (als Beispiel verwendet Reid den Skill gegen einen Gnom) "Reid findet Gnom A ganz bezaubernd.".
Ihr werdet in diesem Tutorial diese Funktion ein paar mal sehen!
Als erstes würde ich sagen, wir öffnen uns den Editor. Empfehlen würde ich persönlich Notepad++, da es doch sehr viele und auch gute Vorteile bietet, wenn man da etwas macht.
Grundsätzlich sieht es wie folgt aus, wenn man einen Skill in der .js erstellt:
function name(a, b) { return damageFormula };
function name(a, b) gibt an, dass man diese Methode mit dem Namen der Funktion aufrufbar wird. Die beiden Parameter (a, b) müssen dann beim Aufrufen gesetzt werden, ansonsten erhält man eine Fehlermeldung, also achtet darauf! Bei diesem Beispiel, müsste man dann beim Skill in der Schadensformel folgendes angeben: dmg = name(a, b); dmg;
Ebenso muss man diese .js bei den Plugins hinzufügen, so dass es auch genutzt werden kann.
Wir wollen einen Skill machen, der dem Gegner Schaden anrichtet, welcher sich durch Angriff des Anwenders - Verteidigung berechnen lässt. Der Anwender soll dabei aber den Status 11 erhalten.
a.addState(11); a.atk - b.def
Der Befehl a.addState(11) fügt dem Anwender den Status 11 hinzu. Danach wird mit a.atk - b.def berechnet, wie hoch der Schaden ausfällt. Wenn man einen anderen Status erteilen will, muss man lediglich die 11 mit der entsprechenden ID des gewünschten Status ersetzten.
Es gibt hier viele verschiedene Situationen, in denen man dies nutzen kann. Man kann so zum Beispiel einen Status erstellen, welcher erst nach 2 Zügen weg geht, so dass man von Pokemon den Hyperstrahl nachbauen könnte. Ebenso kann man so auch für schwache, aber flinke Charaktere einen Skill basteln, der etwas Schaden austeilt und dem Anwender dann den Status 2 (Verteidigung) erteilt. So würde der Anwender in folge dessen, weniger Schaden erhalten.
Mann kann aber auch einen Status entfernen, mit a.removeState(11). Hier würde man dem Anwender den Status mit der ID 11 wieder entfernen. Probiert euch hier ruhig etwas aus.
Was benötigen wir hier? Wir wollen einen Skill erstellen, der dem Gegner anhand der eigenen Flinkheit (agi) etwas Geld, oder gar ein Item klaut. Man könnte zwar alles in der Damage Formula selbst bearbeiten, jedoch würde ich dies nicht empfehlen. Wir werden nun auch erste Änderungen in an bestehenden Klassen des Makers durchführen um uns das ganze zu erleichtern.
Wir wollen nun den Skill so erstellen, dass man einmal bei einem Gegner etwas klauen kann. Sobald etwas geklaut wurde, kann bei diesem Gegner nichts mehr geklaut werden in diesem Kampf. Ebenso könnte man ja sagen, dass man bei dem Gegner entweder eine zufällig bestimmte Menge Gold oder ein Item klauen kann.
Als Erfolgschance würde ich sagen, nehmen wir die doppelte agi des Anwenders und rechnen diese * 100 und dividieren dann durch die vierfache agi des Ziels. Wir runden diesen Wert dann auf eine ganze Zahl. Dann lassen wir eine zufällige Zahl zwischen 0 und <100 zufällig bestimmen. Ist die zufällig generierte Zahl kleiner als unsere errechnete Zahl, so ist der Versuch es zu klauen erfolgreich und es wird nun ermittelt, ob es ein Item wird, oder doch eher etwas Geld. Das Item das geklaut werden kann, soll speziell hinterlegt sein. Die Chance zwischen Geld und Item soll bei 50:50 liegen. Es wird hier nochmals eine zufällige Zahl zwischen 1 und 10 generiert, wobei die geraden Zahlen für Item stehen und die ungeraden Zahlen für Geld. Es soll eine Zufällige Zahl zwischen 1 und 50 gerollt werden und dies ist dann das Gold das geklaut wird. Es soll dann im Battlelog eine Nachricht ausgegeben werden, was geklaut wurde, oder ob es überhaupt etwas zu klauen gibt. Zusätzlich soll der Angriff etwas Schaden anrichten.
Zusammengefasst, soll der Skill folgendes beinhalten:
Wenn wir nun das alles von oben zusammen fassen, haben wir eine recht interessante Aufgabe vor uns. Starten wir mit dem ersten Punkt, so dass wir hier auch wirklich sauber arbeiten können. Erstellen wir als erstes eine .js welche wir Schadensformeln nennen und als Schadensformeln.js im plugin-Ordner abspeichern. Nun gehen wir in die Datenbank zum Skill und schreiben in die Schadensformel folgendes: dmg = stehlen(a, b); dmg;.
Als nächstes gehen wir nun zurück in unser frisch erstelltes Plugin und schreiben einmal folgendes:
function steal(a, b) {
};
Damit haben wir zumindest unsere Funktion bereits erstellt. Als nächstes werden wir dem Game_Battler eine Möglichkeit geben, zu erkennen, ob dieser erfolgreich bestohlen wurde. Dies machen wir wie folgt:
var addNewFunctions = Game_Battler.prototype.initMembers;
Game_Battler.prototype.initMembers = function() {
addNewFunctions.call(this);
this._steal = false;
};
Was haben wir hier gemacht? Wir haben eine bereits bestehende Methode um einen Wert erweitert, den wir dann in weiterer Folge brauchen werden. Der Übersicht halber werden wir noch 2 Methoden hinzu fügen um die Variable _steal abfragen zu können, bzw. um diese Variable auf true zu setzten. Dies sieht dann wie folgt aus:
Game_Battler.prototype.stealSuccess = function() {
this._steal = true;
};
Game_Battler.prototype.stealable = function() {
return this._steal;
};
Wir haben nun die Methoden stealSuccess() und stealable() zum Game_Battler hinzu gefügt, was nun bedeutet, dass bei Gegnern und auch bei Helden etwas geklaut werden kann.
Mit diesen Erweiterungen der Basis haben wir uns schon viele Möglichkeiten geschaffen. Starten wir nun durch mit unseren Überprüfungen. Dafür gehen wir in die anfangs erstellte Methode steal.
Wir werden uns nun erstmal der Tatsache widmen, dass wir schauen wollen, ob man bei diesem Gegner etwas klauen kann, oder nicht. Dies sieht wie folgt aus:
if (!b.stealable()) {
} else {
};
In unserer Abfrage, fragen wir nun ab, ob bei unserem Ziel die Variable stealable true ist. Da wir diese aber Grundsätzlich auf false haben, wird diese mit einem ! davor automatisch auf das Gegenteil gesetzt. Damit wird aus einem false ein true bzw. aus einem true ein false. Als nächstes würde ich vorschlagen, dass wir den Else-Zweig abschließen. Ich würde dort folgendes eingeben:
if (b.enemyId() == 2) {
BattleManager._logWindow.addText(b.name() + " hat nichts, das man stehlen könnte.");
} else {
BattleManager._logWindow.addText(b.name() + " hat nichts mehr, das man stehlen könnte.");
};
Ich habe hier nochmal eine if-Abfrage gemacht, da wir ja auch eventuell Gegner haben wollen, bei denen wir nichts klauen können. Dann würden wir einen Text ausgeben, bei dem eben drin steht, dass es nichts zum Stehlen gibt. Andernfalls soll einfach nur ein Text ausgegeben werden, dass es nichts mehr zu stehlen gibt bei besagtem Gegner.
Konzentrieren wir uns nun auf den ersten Teil der übergeordneten if-Abfrage.
if ((a.agi * 2 * 100 / (b.agi * 4)) > Math.floor(Math.random()*100)) {
} else {
};
So sieht es nun richtig aus. Den else-Zweig werden wir zum Schluss bearbeiten. Wenn diese Abfrage nun aber positiv ausfällt, soll folgendes passieren:
if ((Math.floor(Math.random()*10 + 1)) % 2 == 0) {
} else {
}
Kurze Erklärung was hier gemacht wird. Der erste Teil der Abfrage mit dem Math.floor und Math.random sollte jedem noch bekannt sein aus dem vorhergehenden Tutorial. Jedoch haben wir jetzt ein % 2 == 0 mit dazu bekommen. Dieses macht folgendes: Dividiere das Ergebnis durch 2. Gibt es keinen Rest, dann ist die Zahl gerade, ansonsten Ungerade.
Sollte die Zahl ungerade sein, geben wir folgendes ein:
money = Math.floor(Math.random()*50 + 1);
$gameParty.gainGold(money);
BattleManager._logWindow.addText(a.name() + " konnte " + money + "\G von " + b.name() + " stehlen.");
b.stealSuccess();
Wir haben hier also erfolgreich Gold geklaut!
Nun kümmern wir uns um das Item. Für dieses Tutorial würde ich sagen, soll man immer das Item mit der ID 1 erhalten. Ihr könnt das dann aber später mit etwas JavaScript-Wissen selbst erweitern und so für jeden Gegner ein eigenes Item zum stehlen definieren.
Das stehlen würde dann wie folgt aussehen:
item = $dataItems[1]
$gameParty.gainItem(item, 1)
BattleManager._logWindow.addText(a.name() + " konnte " + item.name() + " von " + b.name() + " stehlen.");
b.stealSuccess();
Was haben wir hier nun gemacht? Einfach gesagt, wir haben der Variable item das erste Item aus dem Datensatz $dataItems gegeben. Danach erhält der Spieler genau 1x das Item. Es wird ein Text ausgegeben und der Diebstahl wird als Erfolg verbucht.
Kommen wir nun zu dem Fall, dass die Abfrage zum Stehlen fehl schlägt. Dann werden wir folgenden Text anzeigen:
BattleManager._logWindow.addText(a.name() + " konnte leider nichts von " + b.name() + " stehlen.");
Wir haben nun aber noch 2 Punkte offen. Wir haben ja zu Beginn gesehen, dass wir einmal bei Gegner 2 sagen, der hat Grundsätzlich nichts. Das müssen wir nun in unserer Abfrage berücksichtigen. Daher würde ich die Abfrage etwas umbauen und dann so aussehen lassen:
function steal(a, b) {
if (b.enemyId() == 2) {
BattleManager._logWindow.addText(b.name() + " hat nichts, das man stehlen könnte.");
} else if (!b.stealable()) {
if ((a.agi * 2 * 100 / (b.agi * 4)) > Math.floor(Math.random()*100)) {
if ((Math.floor(Math.random()*10 + 1)) % 2 == 0) {
item = $dataItems[1]
$gameParty.gainItem(item, 1)
BattleManager._logWindow.addText(a.name() + " konnte " + $dataItems[1].name() + " von " + b.name() + " stehlen.");
b.stealSuccess();
} else {
money = Math.floor(Math.random()*50 + 1);
$gameParty.gainGold(money);
BattleManager._logWindow.addText(a.name() + " konnte " + money + "\G von " + b.name() + " stehlen.");
b.stealSuccess();
};
} else {
BattleManager._logWindow.addText(a.name() + " konnte leider nichts von " + b.name() + " stehlen.");
};
} else {
BattleManager._logWindow.addText(b.name() + " hat nichts mehr, das man stehlen könnte.");
};
};
Was hat sich nun geändert? Naja sagen wir es so, wir haben die Abfrage ob die Gegnerische ID == 2 ist, an den Anfang gesetzt, da dies weitaus Sinnvoller ist, da wenn dies zutrifft, der Rest nicht berücksichtigt werden muss und wir diesen Punkt nur einmal vorhanden haben und nicht 2 mal schreiben müssen. Jetzt müssen wir nur mehr die Formel für den Schaden hinzufügen. Dies schreiben wir dann zum Schluss vor dem letzten }; rein:
return a.atk*2 - b.def
Dadurch haben wir nun auch eine kleine Formel für den Schaden dabei.
Das wars dann auch schon mit dem Stehlen Skill.
Wir wollen nun einen Skill erstellen, den wir nutzen und dann eine Bombe bei dem Ziel platzieren. Wir können den Skill beliebig oft verwenden und so mehrere Bomben bei einem Gegner platzieren. Es soll beim Platzieren ein Text angezeigt werden, welcher uns zum einen sagt, dass wir Bomben platziert haben und wie viele Bomben bei dem besagten Gegner platziert sind.
Wir werden nun wieder unser Plugin Schadensberechnung.js öffnen, da wir hier ein paar Dinge ergänzen werden. Die erste Änderung wird hier gemacht:
var addNewStuff = Game_Battler.prototype.initMembers;
Game_Battler.prototype.initMembers = function() {
addNewStuff.call(this);
this._steal = false;
this._bombs = 0;
};
Verändert hat sich das nun soweit, dass wir eine weitere Variable hinzugefügt haben, welche sich this._bombs nennt. Dies werden wir dann dafür her nehmen, damit wir verfolgen können, wieviele Bomben platziert wurden. Da wir das nun haben, benötigen wir noch 3 Methoden.
Legen wir diese 3 mal schnell an:
Game_Battler.prototype.bombs = function() {
return this._bombs;
};
Game_Battler.prototype.addBombs = function(value) {
this._bombs += value;
};
Game_Battler.prototype.resetBombs = function() {
this._bombs = 0;
};
Nun haben wir unsere 3 Methoden angelegt, welche uns helfen, dass wir nun diesen Skill umsetzten können. Deswegen würde ich sagen: Legen wir los!
Beginnen wir einmal mit dem Grundgerüst für diesen Skill. Wir erstellen einen Skill, den wir zum Beispiel Bomben legen Einzeln nennen, welcher nur auf einen Gegner anwendbar ist. Bei der Schadensformel geben wir dann folgendes an:
bombenLegen(a, b)
In unserem "Plugin" werden wir uns nun diese Funktion ebenfalls anlegen.
function bombenLegen(a, b) {
};
Mit dieser einfachen Zeile beginnen wir nun zu arbeiten. Wir wollen nun den Zähler um 1 erhöhen und dann eine Nachricht ausgeben, dass eine Bombe platziert wurde. Ebenso wollen wir eine Nachricht ausgeben, die besagt, wieviele Bomben bereits platziert sind. Beginnen wir also:
b.addBombs(1);
BattleManager._logWindow.addText(a.name() + " platziert eine Bombe in der Nähe von " + b.name());
Hier haben wir nun den Zähler vom Ziel um 1 erhöht. Ebenfalls haben wir zuerst einmal eine Nachricht ausgegeben, dass der Anwender beim Ziel eine Bombe platziert hat. Jetzt fehlt nur noch eine Nachricht, die besagt wieiviele Bomben nun beim Ziel sind. Da es im deutschen einen kleinen Unterschied gibt zwischen "Beim Ziel liegt eine Bombe" und "Beim Ziel liegen 2 Bomben", brauchen wir noch eine kleine Abfrage, der Schönheit wegen.
if (b.bombs() == 1) {
BattleManager._logWindow.addText("Derzeit wurde eine Bombe bei " + b.name() + " platziert.");
} else {
BattleManager._logWindow.addText("Derzeit sind " + b.bombs() + " Bomben bei " + b.name() + " platziert.");
};
Hier prüfen wir nun, ob das Ziel genau eine Bombe hat. Sofern dies zutrifft, wird explizit der Text für die Einzahl verwendet, ansonsten der für die Mehrzahl.
Im gesamten sieht diese Funktion dann so aus:
function bombenLegen(a, b) {
b.addBombs(1);
BattleManager._logWindow.addText(a.name() + " platziert eine Bombe in der Nähe von " + b.name());
if (b.bombs() == 1) {
BattleManager._logWindow.addText("Derzeit wurde eine Bombe bei " + b.name() + " platziert.");
} else {
BattleManager._logWindow.addText("Derzeit sind " + b.bombs() + " Bomben bei " + b.name() + " platziert.");
};
};
Wenn man diesen Skill anwendbar auf alle Gegner macht, so wird der Text so oft angezeigt, wie Gegner am Bildschirm sind, man muss also im Grunde nichts ändern. Man sollte das nur dabei beachten.
Bitte nicht wundern, wenn der Skill eingesetzt wird, erhaltet man immer wieder die Meldung, dass der Gegner keinen Schaden erhalten hat. Dies liegt daran, dass durch die Schadensformel ein Schaden erwartet wird. Wenn wir bei dem Skill nur platzieren und nicht Schaden machen, dann ist das leider nicht anders lösbar mit der Schadensformel. Dieser Skill kann theoretisch auch per Common Event umgesetzt werden, ist jedoch weitaus schwieriger das gezielt auf einzelne Ziele zu machen. Daher empfehle ich hier minimal Schaden mitzugeben, weil man dem Gegner die Bomben entgegenwirft, da könnt Ihr kreativ sein.
Wir haben nun einen Skill, mit dem wir Bomben legen können, nun brauchen wir noch einen Skill, mit dem wir diese auch zum Explodieren bringen können sollten. Deswegen werden wir nun einen Skill erstellen, welcher beim Verwenden alle Bomben beim Ziel zum explodieren bringt. Der Schaden soll dabei pro Bombe erhöht werden (zB. 1 Bombe macht 50 Schaden und so würden dann 2 Bomben 100 machen). Es soll auch gesagt werden, wieviele Bomben gezündet werden.
Beginnen wir beim Skill in der Datenbank selbst. Wir erstellen einen Skill und schreiben bei der Schadensformel dann folgendes rein:
dmg = bombenExplodieren(a, b, 50); dmg;
Dies sieht nun etwas anders aus als sonst. Wir haben hier noch zusätzlich den Wert 50 dabei stehen. Damit kann man verschiedene Skills machen, mit denen man die Bomben zünden kann, die dann eventuell einfach besser Funktionieren und daher mehr Schaden verursachen. Da ist eurer Fantasie freien Lauf gelassen. Zurück aber zum Tutorial. Wir wollen nun diese Funktion auch in unserer Schadensformel.js hinzufügen.
function bombenExplodieren(a, b, base) {
};
Wir haben nun den Grundstein gelegt, welchen wir im nächsten Schritt ausfüllen werden und damit das ganze funktionsfähig wird. Lasst uns den Schaden berechnen und den Text ausgeben, so wie die Bomben wieder auf 0 zurück setzten.
dmg = base * b.bombs();
BattleManager._logWindow.addText(a.name() + " zündet alle " + b.bombs() + " Bomben bei " + b.name());
b.resetBombs();
return dmg;
Zuerst wird einmal der Schaden an sich berechnet, indem wir die übergebene Variable base mit der Anzahl der platzierten Bomben multiplizieren. Danach geben wir den Text aus, wieviele Bomben explodiert sind. Jetzt müssen wir nur noch die Bomben zurück setzten und den Schaden übergeben, was mit return dmg; passiert.
Das war die große Hexerei dahinter. Hier noch einmal die gesamte Funktion auf einen Blick:
function bombenExplodieren(a, b, base) {
dmg = base * b.bombs();
BattleManager._logWindow.addText(a.name() + " zündet alle " + b.bombs() + " Bomben bei " + b.name());
b.resetBombs();
return dmg;
};
Wenn der Skill nicht nur auf ein Ziel angewendet wird, sondern auf alle, wird der Schaden für jedes Ziel einzeln gerechnet und die Nachricht wird dann ebenfalls mehrmals angezeigt.
Ich bin nun zum Schluss des Tutorials gekommen. Ich hoffe es ist noch immer recht verständlich für euch, da ich mir recht viele Gedanken dazu gemacht habe. Es gibt bei den ganzen Skills die hier heute vorgestellt wurden, noch immer Luft nach oben. Vor allem beim Stehlen Skill kann man noch so viel mehr machen, als das was gezeigt wurde von mir. Da kann man noch viel komplexer werden und auch verschiedene Items geben, bzw. auch Waffen & Rüstung ausgeben. Jedoch würde das mehr am Tutorial selbst vorbei gehen.
Ich habe auch etwas JavaScript mit rein gepackt, da wir ohne diese kleinen Zusätze, die Skills erst gar nicht realisieren konnten. Ich habe ein paar Befehle nicht genauer erklärt, stehe da aber gern Rede und Antwort bei Fragen. Falls Ihr noch weitere Ideen für Skills habt, gebt bescheid und wir können das dann in eines der beiden Tutorials einarbeiten.
Ich hoffe es hat euch im Großen und Ganzen gefallen. Das Plugin für die Damage Formeln befinden sich im Anhang in der .zip-Datei. Auf dieser könnt Ihr auch gern aufbauen und in eurem Projekt verwenden.
Lyon Seit dem RPG Maker MV ist es auch von Haus aus im Maker eingebaut. Dieser wird meist dann angezeigt, wenn der Rechner auf dem Gespielt wird, nicht ganz so stark ist.
Ist recht praktisch, da man früher immer mit einem schwarzen Screen konfrontiert war und nicht wusste, wird nun geladen, oder nicht.
Werd ich dir im nächsten Tutorial einbauen. Ist je nach dem, wie man es haben will, recht simpel oder sehr komplex. Werde da dann beide Versionen thematisieren.
Sonst noch Wünsche? Du oder jemand anderer?
Kojote ja, irgendwie quälen sich da gerade viele durch
Kommt also recht passend irgendwie
Lyon ja das ist durchaus Möglich, man benötigt aber ein paar kleine Tricks und Kniffe dafür. Soll es immer die selbe Anzahl sein? also zB. 3 Bomben legen und beim 4ten Mal sprengt es den Gegner mit massivem Schaden? Oder willst du vielleicht 2 Skills/ein Skill und ein Item machen, bei dem du das Item x-mal platzierst und dann beim Verwenden des Skills jagst du entsprechend den gelegten Bomben alle Gegner/einen Gegner hoch? Beides möglich. 😬