Standardisierte Effekte
Hier finden sich drei Kategorien:
- Spezielle Effekte: Zauber nutzen immerwieder bestimmte Effekte, die hier aufgelistet werden
- Zauberfunktionen: Zauber rufen immerwieder bestimmte Werte und Berechnungen ab, die hier aufgelistet werden.
- Statuseffekte: Buff/Debuff-Liste, die von möglichst vielen Zauber genutzt wird.
1. Spezielle Effekte
Diese Effekte werden von mehreren Zaubern benutzt und sollen für alle gleich funktionieren. Demnach wäre es lohnenswert wenn sie durch ein Skript oder ähnliches ausgelöst werden.
Feuerfeld
Jedesmal wenn in einem Zauber das Erstellen eines Feuerfeldes erwähnt wird, ist damit 1 Teil einer Feuerwand gemeint. Die Dauer hängt jeweils von den Zaubern ab, jedoch ist der Schaden identisch: Beim Betreten des Feuerfeldes und jede Sekunde darin erhält man 7 Schaden und wenn man „Brennen“ (siehe weiter unten) hat wird dessen Dauer um +3 Sekunden hochgesetzt. Der Schaden wird linear von Magieresistenz gesenkt, also *((100-Magieresistenz)/100). Feuerfelder werden nicht auf existierenden Feuerfeldern erzeugt. Also zwei Feuerfelder auf einem Tile soll es nicht geben, es wird dabei jedoch die höhere Dauer für das alte Feuerfeld verwendet. Hätte das alte noch 5 Sekunden bevor es verschwindet und das neue 40 Sekunden, so soll das Feuerfeld für 40 Sekunden dort sein (entweder altes löschen und neues erstellen, oder Dauer hochsetzen). Ein Feuerfeld kann gelöscht werden. Entweder indem man Wasser darauf benutzt (gefüllter Eimer, Schale, Krug) oder mit Zaubern, in denen der Effekt des Löschens von Feuern erwähnt wird. Insofern keine Richtung (Feuerwand hat 2 Richtungen als Option) angegeben ist, soll zufällig eine gewählt werden.
Niederwurf
Erleidet ein Ziel einen „Niederwurf“, so spielt es die Sleep/Umfallen-Animation und kann 2 Sekunden lang nichts tun. Nicht bewegen, nicht angreifen, nicht zaubern, nicht auf das Inventar zugreifen, etc. Nach den 2 Sekunden steht die Spielfigur wieder und ist direkt einsatzbereit. Ausserdem können niedergeworfe Ziele weder ausweichen noch blocken! Weitere Niederwurf-Effekte auf ein Ziel das bereits niedergeworfen ist, haben garkeinen Effekt und werden ignoriert (Dauer wird NICHT hochgesetzt).
- Berittene Ziele, die Niederwurf erleiden, werden automatisch entsattelt.
- Monster spielen die Sleepanimation nur, wenn sie „Menschen“ sind bzw NPCs - sind aber trotzdem 2 Sekunden lang ausser Gefecht.
Positionsverschiebungen
Diverse Zauber verschieben die Position des Ziels in eine Richtung. Hierbei muss die Position in schneller Abfolge verschoben werden und auf Hindernisse geprüft. Dies kommt oft genug vor, dass es nicht in jedem Zauber getrennt geskriptet werden sollte. Positionsverschiebungen wirken auf Ziele die von Niederwurf betroffen sind.
Ganzfärbung
Diverse Zauber färben das Ziel und seine Ausrüstung in einer Farbe für bestimmte Zeit, jedoch nur in der grafischen Ausgabe. Auch hier sollte es eine eine Skriptlösung geben und nicht jedesmal einzeln geskriptet werden.
Nachtsicht
Auch wenn irgendwo Nachtsicht steht, es gibt keine klassische UO-Nachtsicht auf AO. Damit ist immer ein Lichtschein um den Charakter gemeint als würde er eine Laterne mit sich tragen - den jedoch nur er sehen kann. Falls keine Werte von mir in den Zaubern angegeben wurden (Fehler meinerseits dann), bitte einfach passende Werte schätzen. Als Richtlinie würde ich vorerst „Allgemeine Nachtsicht“ = 6 Felder, „geringere Lichtquelle“ = 3 Felder nehmen.
Wir brauchen ein Item, das leuchten kann. Die Fackel würde gehen, aber auf welchen Layer kommt das, damit es unsichtbar ist und dennoch funktioniert. Bitte IG testen. Kann dann einfach implementiert werden.
2. Zauberfunktion
Es gibt einige Standardabfragen in Zaubern. Werden diese einmal modular oder als Skript eingebaut, so das die Zauber diese nurnoch aufrufen müssen, so können grosse Mengen an Zaubern schnell und fehlerfrei implementiert werden. So wie jeder Zauber automatisch z.B. auf Mana oder Sichtlinie prüft, sollte ein einfacher Befehl automatisch auch Ausweichenwürfe für Projektilzauber oder Schadensberechnung gegen Körperteile durchführen können.
Ausweichen
DodgeRange aus dem Kampfsystem. Wert am besten aus dem Kampfsystemscript rausziehen (lassen)
Falls Random100 kleiner als DodgeRange: Return Dodge = True
Anmerkung für die Technik: Befindet sich alles in FightSystemHelper
Blocken
Wenn das Ziel ein Schild hat, wird geprüft…
„BlockChance+Blockglance“, beides direkt in der Liste des Items angegeben
Falls Random100 kleiner als „BlockChance+Blockglance“: Return Block = True
Physikalischer Zauber
Inputs notwendig:
- Körperteil (Kopf, Hals, Brust, Arms, Hand, Beine, Zufall)
- Schadensart (Stich, Schnitt, Wucht)
- Bonuseffekte? (Ob Bonuseffekte den Schaden erhöht oder nicht, logischerweise keine Magieresistenz hier)
Return Damage Dealt
Konditionsprüfung
Hat das Ziel einen bestimmten Statuseffekt?
Return True/False
Aufgeladenprüfung
Wenn er Zauber gewirkt wird während man den Buff „Aufgeladen“ hat, wird er stärker und „Aufgeladen“ verschwindet. Neben der reduzierten Castzeit, etc, haben einige Zauber weitere Vorteile, wodurch geprüft werden muss ob der Zauber mit dem Buff „Aufgeladen“ gewirkt wurde. Return True/False
Bei Schaden
Ein Statuseffekt auf einem Mobile löst einen Effekt aus, wenn es Lebenspunkte verliert / Schaden bekommt.
Bei Bewegung
Ein Statuseffekt auf einem Mobile löst einen Effekt aus, wenn es sich bewegt. Beispiel siehe umgesetzter Doppelschritt-Zauber
3. Statuseffekte
Statuseffekte sind Buffs und Debuffs, welche von vielen Zauber verwendet werden. Der Statuseffekt wird also einmal programmiert und dann in anderen Zauber wieder verwendet, wodurch wir uns langfristig viel Zeit sparen. Einige sind allgemein, andere extra doppelt für Hermetik – Copypaste ist immerhin wenig Arbeit. Sie alle halten für die im Zauber angegebene Dauer, Ausnahmen wie „Niederwurf“ im Text.
Sinn: Zauber haben einfache, grundlegende Effekte („Schaden“), prüfen aber auf Konditionen um stärker oder schwächer zu werden.
