Wie erstelle ich Ausrüstungssets?
von waynee95
Irgendwer schrieb:
Wie mache ich das, dass wenn man bestimmte Ausrüstungsgegenstände hat, man Boni bekommt?
Schwierigkeit: Fortgeschritten
Für dieses Tutorial sollte man mit dem Umgang von Plugins und Lunatic Code (JavaScript Code in Notetags) ein wenig Übung haben.
Die Frage kam letztens mal wieder auf und dann dachte ich mir, ich kann ja mal meine Idee zeigen, wie man sowas machen kann.
Natürlich gibt es auch hier wieder mehrere Möglichkeiten, sowas zu machen, das hier ist nur eine davon.
Man brauch dafür wieder mein WAY_CustomOnEquipEval Plugin. Das Plugin ermöglicht es, bestimmten JavaScript Code auszuführen, wenn man verschiedene Items an- bzw- auszieht.
Die Idee ist, dass wir uns verschiedene Ausrüstungsgegenstände erstellen, die dann zu dem gleichen Ausrüstungsset gehören. Jenachdem, wie viele Teile man davon an hat, bekommt man verschiedene Boni.
Als Beispiel habe ich ein "Paladin-Set" erstellt. Es besteht aus Paladin-Schwert, Paladin-Schild, Paladin-Helm, Paladin-Brustpanzer und Paladin-Schuhen. Das Set soll die maximalen HP und Verteidigung des Trägers erhöhen, aber im Gegenzug auch seine Agilität senken.
Paladin-Set 3 Teile Effekt: Max HP+120% , Defense+120% , Agility-20%
Paladin-Set 5 Teile Effekt: Max HP+150% , Defense+150% , Agility-40%
Die Effekte können wir über States (Zustände) machen. Dafür erstellen wir einfach 2 States, "Paladin 1" und "Paladin 2" und stellen über die Effekte die Parameter ein. -20% Agility bedeutet dann im Editor * 80%.
Nachdem wir nun die States erstellen haben, brauchen wir mein Plugin. Die Idee ist, dass wir mit dem Plugin Code ausführen beim an- bzw. ausziehen eines Ausrüstungsteils. In dem Code können wir dann überprüfen wie viele Teile der Träger bereits vom Set an hat und dann je nach Anzahl den jeweiligen Bonus Effekt, also den State dem Träger geben.
Zuerst müssen wir jeden Gegenstand des Sets makieren, dafür gebt ihr jedem Item vom Set ein Notetag mit dem Namen des Sets. In unserem Fall habe ich es <Paladinset> genannt. Hierbei muss man genau drauf achten, dass es immer gleich geschrieben wird.
Dann fügen wir noch folgende Notetags den Items hinzu:
- <Custom On Equip Eval>
- // Speichere das Equipment
- var equipment = user.equips();
- // Hole dir die aktuelle Anzahl der Set Items
- // Hier ist es ganz wichtig, dass der Name des vorher hinzugefügten Notetags
- // mit dem übereinstimmen.
- var currentSetCount = equipment.filter(function(equip) { return equip && equip.meta['Paladinset']; }).length;
- // Hat der Träger 5 oder mehr Teile an?
- if (currentSetCount >= 5) {
- user.addState(13); // Füge Paladin 2 hinzu
- user.removeState(12); // Entferne Paladin 1 Effekt
- }
- // Hat der Träger 3 Teile oder mehr an?
- else if (currentSetCount >= 3) {
- user.addState(12);
- user.removeState(13);
- }
- user.refresh();
- user.clearResult();
- </Custom On Equip Eval>
Dieser Code wird ausgeführt, wenn der Träger das jeweilge Item ausrüstet. Die Zahlen 12 und 13 sind die ID's von den States, die ich erstellt habe. Die sind bei euch eventuell anders, ihr müsstet das dann anpassen.
Jetzt brauchen wir noch Code, der die Effekte entfernt, wenn man Set Teile wieder auszieht.
- <Custom On Remove Equip Eval>
- var equipment = user.equips();
- var currentSetCount = equipment.filter(function(equip) { return equip && equip.meta['Paladinset']; }).length;
- // Hat der Träger nun weniger als 3 Teile an
- if (currentSetCount < 3) {
- user.removeState(12); // Entferne Paladin 1 Effekt
- }
- // Hat der Träger weniger als 5 Teile an
- else if (currentSetCount < 5) {
- user.removeState(13); // Entferne Paladin 2 Effekt
- }
- user.refresh();
- user.clearResult();
- </Custom On Remove Equip Eval>
Hier nochmal alle Notetags ohne Kommentare zum einfachen copy-pasten.
- <Paladinset>
- <Custom On Equip Eval>
- var equipment = user.equips();
- var currentSetCount = equipment.filter(function(equip) { return equip && equip.meta['Paladinset']; }).length;
- if (currentSetCount >= 5) {
- user.addState(13);
- user.removeState(12);
- } else if (currentSetCount >= 3) {
- user.addState(12);
- user.removeState(13);
- }
- user.refresh();
- user.clearResult();
- </Custom On Equip Eval>
- <Custom On Remove Equip Eval>
- var equipment = user.equips();
- var currentSetCount = equipment.filter(function(equip) { return equip && equip.meta['Paladinset']; }).length;
- if (currentSetCount < 3) {
- user.removeState(12);
- } else if (currentSetCount < 5) {
- user.removeState(13);
- }
- user.refresh();
- user.clearResult();
- </Custom On Remove Equip Eval>
Bei Fragen oder Problemen macht gerne einen Post!
Ich erstelle diese Tutorials immer recht spontan und schnell, also falls noch was unklar ist oder nicht funktioniert, sagt mir Bescheid!