Tut Für Lua Boss
Ich werde euch hier zeigen, wie man in wenigen Schritten einen Boss mit 3 Phasen und 4 spells schreibt!
Unter den ScriptBoxen werde ich jeweils erklären, was die einzelnen neuen Zeilen bewirken!
Also fangen wir mal an:
SCHRITT 1: Was brauche ich?
Man Braucht für LUA Scripte im prinzip nicht mehr als ein Textprogramm. Für windows nutzer reicht schon der Editor aus!
Ich empfehle allerdings, programme wie Weaverslave und Notepad++ zu nutzen, beide findet man ganz einfach über google!
SCHRITT 2: Wie beginne ich?
Erstellt euch einfach eine neue Textdatei, diese sollte komplett leer sein
SCHRITT 3: Wie gebe ich an, welcher NPC Das Script hat?
Damit auf eurem Server nicht Irgendwelche wölfe mit CastScripten von Illidan rumlaufen ist es sinnvoll, Zuerst mal festzulegen, wem euer Cast Script denn gehört!
Das ganze geht ganz einfach so:
Code:
Das ganze gehört erstmal in eure Textdatei rein!
Nun müsst ihr noch folgendes verändern:
für ID fügt ihr immer die ID eures Bosses ein, der casten soll!
für Name fügt ihr einfach den Namen des Bosses ein! (Ohne leerzeichen!)
Dies Sorgt nun dafür, dass euer folgendes Castscript dem NPC mit der ID zugewiesen wird!
SCHRITT 4: Beginnen des Kampfes!
Und schon geht's los!
Der wilde kampf mit eurem Boss geht (zumindest in euren gedanken) hier los! Wir basteln das mal ganz einfach: Wenn euer Boss in eien Kampf gerät, soll er erstmal nur etwas schreien, sobald er dann unter 95% HP gerät, beginnt der eigentliche Kampf!
Code:
Für Modus setzt ihr eine Zahl ein. Sie gibt an, wie die Chatnachricht ausgegeben wird. 12 = sagen , 14 = schreien!
Für sprachesetzt ihr ebenfalls eine Zahl ein, diese sollte aber 0 sein!
0 Bedeutet dass die nachricht für jeden zu lesen ist, andere Zahlen bedueten andere Sprachen!
für Nachricht tragt ihr einfach die Nachricht ein, die der Boss verkünden soll!
mit Unit:RegisterEvent(...) wird festgelegt, dass der NPC nun ein gewisses Event in einer bestimmten zeit immer wieder wiederholt!
"Name_Phase1" gibt an, welches Event denn wiederholt werden soll!
Zeit gibt die Zeit in millisekunden an (1000 = 1 sek) , die zwischen dem 1. mal abspielen von Name_Phase1 und dem 2. mal abspielen liegt. Über die 0 lässt sich begrenzen, wie oft das ganze maximal passiert, 1= max. 1x ; 5 = max. 5x , 0 = Unendlich mal. Hier wird das Event aber im Prinzip nur ein überprüfen der % HP des Bosses sein, daher solltet ihr für zeit einfach 1000 schreiben!
Schritt 5: Was Passiert in Phase 1?
Nun sollten wir angeben, was genau der Boss in der Phase1 machen soll!
Das geht so:
Code:
if Unit:GetHealthPct < 95 :
Hier wird überprüft, ob der Boss unter 95% hp ist! Wenn das zutrifft passiert:
Unit:RemoveEvents() ; Heißt: Alles was vorher passiert ist passiert nun nichtmehr, auch die vorher angegeben events (Unit:RegisterEvent("Name_Phase1",zeit, 0) ) werden nun nichtmehr abgespielt!
Unit:RegisterEvent("Phase1_spell1", zeit, 0) heißt: Nun kommt der boss zu seinen Spells! zeit und 0 haben die selbe bedeutung wie oben!
Jetzt wird also in regelmäßigen abständen das Event "Phase1_spell1" abgespielt!
Unit:RegisterEvent("Name_Phase2", 1000, 0) lässt den boss nun erneut alle 1000 millisekunden überprüfen, ob Phase1 überwunden ist und man so zu Phase2 übergehen kann!
Außerdem schickt der boss ebenso wie oben eine neue Nachricht ab!
das 1. end bedeutet: ende , heißt: wenn der Boss unter 95% leben gerät, passiert alles was bis hierhin eingegeben wurde.
das 2. end bedeutet: falls der Boss NICHT unter 95% leben gerät, passiert alles was zwischen dem 1. und dem 2. end steht, also hier garnichts
Schritt 6: Was passiert beim 1. Spell?
Ebenso wie bei Phase1, müssen wir nun festlegen, was denn beim event "Phase1_spell1" passiert!
Code:
HTML Code:
über local spell1ziel = ZIEL
wird zuerst mal festgelegt, Wen denn der Zauber trifft.
ZIEL müsst ihr hierzu ersetzen, die wichtigsten möglichkeiten zähle ich euch heir mal auf:
if (spell1ziel~=nil) then Ist eine einfache if- Abfrage, die existieren muss, damit das script zu 100% auf jeder Ascent emu läuft!
Unit:Methode(ID, spell1ziel) Ist nun der tatsächliche spell!
Methode ist hierbei die Art, wie der Zauber gewirkt werden soll!
Ersetzt es durch:
FullCastSpellOnTarget= Zauber voll auf das Ziel wirken
CastSpellOnTarget= Zauberzeit wird nicht berücksichtigt, der Zauber wird sofort auf das Ziel gewirkt! (Klappt nicht bei allen Spells!)
fürID müsst ihr einfach nur die ID eures Zaubers einfügen!
spell1ziel gibt hier nun an, dass der Zauber auch auf das vorher festgelegte ziel (welches wir in der variable spell1ziel abgespeichert haben) gewirkt wird!
die beiden 'end' haben die selbe bedeutung wie oben!
Schritt 7: Die Phase 2!
In eurer Vorstellung habt ihr Phase1 nun überwunden! Jetzt kommt die Phase 2 dran! Im prinzip passiert hier das selbe wie in Phase1, lediglich mit einem anderen Spell und einer anderen nachricht! Außerdem wird nun überprüft, ob die spieler bereit für Phase3 sind, nicht mehr wie oben für Phase2 !
Code:
HTML Code:
Die Textzeilen haben die selbe bedeutung wie oben, aber nun haben wir ein neues Event, nämlich: Phase2_spell1 , welches wir definieren müssen!
Schritt 8: Der 2. Spell eures Bosses!
Da euer boss wegen des Unit:RemoveEvents() den spell aus phase1 nicht mehr beherrscht, sollten wir ihm nun einen neuen beibringen!
Auch hier läuft es ähnlich ab wie bei Spell1, nur müssen wir diesmal die variable umbenennen!
Code:
Code:
Code:
HTML Code:
Beachtet hier, dass wir oben genau 3x "spell1ziel" hatten, solltet ihr Kopieren und Einfügen um schreibarbeit zu sparen, müsst ihr auch aus allen 3x "spell1ziel" ein "spell2ziel" machen, sonst bekommt ihr eine fehlermeldung!!
Schritt 9: Die 3. und letzte Phase des Kampfes!
In dieser letzten Phase soll euer Boss es in sich haben! Deswegen Bekommt er in dieser Phase nicht nur eine, sondern gleich 2 Fähigkeiten verpasst!
Das läuft auch wieder über
Unit:RegisterEvent(...) , nur dass er diesmal 2 events bekommt!
Außerdem müssen wir nun keinen erneuten Check durchführen, wieviel %HP euer boss hat, da die Phase3 hier die letzte sein wird!
Code:
Nun Hat euer boss 2 Fähigkeiten zur verfügung, die wir ihm festlegen müssen!
Phase3_spell1 wird ebenso ablaufen wie bereits Phase1spell1 und Phase2spell1 , das solltet ihr mittlerweile selbst beherrschen!
Code:
HTML Code:
Schritt 10: Ein AoE Spell, BZW ein Stärkungszauber für den Boss!
Phase3spell2 wird etwas besonderes!
Hier soll der boss sich nun nicht einen einzelnen spieler rauspicken und ihm schaden zufügen, sondern Hier kann er sich
a) Selbst Verstärken (Berserker Buff etc.)
b) Einen AOE Spell (mit flächenschaden) wirken!
aber wie legen wir das fest? - Ganz einfach!
Code:
HTML Code:
Methode wird hier in beiden fällen durch: CastSpell ersetzt!
für ID gebt ihr wieder die ID eures spells ein!
Das Praktische: Je Nach spell wirkt der Boss entweder einen Stärkungszauber auf sich selbst, oder Macht eine Attacke mit flächenschaden!! Für euch zum scripten macht das keinerlei unterschied!
Hier entfällt das 2. end, weil keine if abfrage eingebaut ist!
Schritt 11: Was, wenn der Boss einen Spieler tötet, stirbt oder die Gruppe Scheitert?
Natürlich werden die Leute die euren Boss Killen nicht immer Erfolg haben! Daher müssenw ir nun festlegen, was passiert wenn:
Der Boss ein ziel tötet:
Code:
HTML Code:
Im Prinzip muss nichts passieren, nach belieben könnt ihr hier aber wie oben auch, eine Chatnachricht einfügen!
Der Boss aus dem Kampf gerät:
Code:
HTML Code:
Damit euer Boss wieder auf seinen Normalen stand zurückkommt, nachdem der Kampf endet sollte hier ein
Unit:RemoveEvents() stehen! So geht alles von vorne los, wenn er wieder angegriffen wird!
Der Boss stirbt:
Code:
HTML Code:
Auch hier ist das Unit:RemoveEvents pflicht, wenn ihr wollt könnt ihr aber auch hier wieder eine Chatnachricht einbauen!!
Damit ist euer Boss Script nun fertig!
Ihr habt es geschafft! Euer erstes Boss Script ist nun Fertig!
Speichert das ganze nun als .lua Datei ab und legt es in den "scripts" ordner eurer Emu!
Zur Kontrolle Hier nochmal das ganze script:
Code:
HTML Code:
Alles anzeigen
Natürlich habt ihr bei eurem script nichtmehr
Modus ,Sprache oder ähnliches stehen, weil ihr das alles wie bereits oben angegeben ersetzt habt!!
Ihr könnt eurem Boss natürlich nach belieben mehr Phasen und Spells einbauen, wie das funktioniert solltet ihr nach dem Tutorial so einigermaßen verstanden haben! Ich hab das Tutorial halt relativ kurz gehalten, is ja für einsteiger!
Ihr solltet außerdem darauf achten, dass eure Nachrichten nicht zu lang sind, da sie sonst von einigen Emu's einfach ignoriert werden !
Bin mir nicht sicher wohin dann habe ich es mal dahin gemacht wenn es falsch ist kann man ja es verschieben.
Ich werde euch hier zeigen, wie man in wenigen Schritten einen Boss mit 3 Phasen und 4 spells schreibt!
Unter den ScriptBoxen werde ich jeweils erklären, was die einzelnen neuen Zeilen bewirken!
Also fangen wir mal an:
SCHRITT 1: Was brauche ich?
Man Braucht für LUA Scripte im prinzip nicht mehr als ein Textprogramm. Für windows nutzer reicht schon der Editor aus!
Ich empfehle allerdings, programme wie Weaverslave und Notepad++ zu nutzen, beide findet man ganz einfach über google!
SCHRITT 2: Wie beginne ich?
Erstellt euch einfach eine neue Textdatei, diese sollte komplett leer sein
SCHRITT 3: Wie gebe ich an, welcher NPC Das Script hat?
Damit auf eurem Server nicht Irgendwelche wölfe mit CastScripten von Illidan rumlaufen ist es sinnvoll, Zuerst mal festzulegen, wem euer Cast Script denn gehört!
Das ganze geht ganz einfach so:
Code:
Nun müsst ihr noch folgendes verändern:
für ID fügt ihr immer die ID eures Bosses ein, der casten soll!
für Name fügt ihr einfach den Namen des Bosses ein! (Ohne leerzeichen!)
Dies Sorgt nun dafür, dass euer folgendes Castscript dem NPC mit der ID zugewiesen wird!
SCHRITT 4: Beginnen des Kampfes!
Und schon geht's los!
Der wilde kampf mit eurem Boss geht (zumindest in euren gedanken) hier los! Wir basteln das mal ganz einfach: Wenn euer Boss in eien Kampf gerät, soll er erstmal nur etwas schreien, sobald er dann unter 95% HP gerät, beginnt der eigentliche Kampf!
Code:
Für sprachesetzt ihr ebenfalls eine Zahl ein, diese sollte aber 0 sein!
0 Bedeutet dass die nachricht für jeden zu lesen ist, andere Zahlen bedueten andere Sprachen!
für Nachricht tragt ihr einfach die Nachricht ein, die der Boss verkünden soll!
mit Unit:RegisterEvent(...) wird festgelegt, dass der NPC nun ein gewisses Event in einer bestimmten zeit immer wieder wiederholt!
"Name_Phase1" gibt an, welches Event denn wiederholt werden soll!
Zeit gibt die Zeit in millisekunden an (1000 = 1 sek) , die zwischen dem 1. mal abspielen von Name_Phase1 und dem 2. mal abspielen liegt. Über die 0 lässt sich begrenzen, wie oft das ganze maximal passiert, 1= max. 1x ; 5 = max. 5x , 0 = Unendlich mal. Hier wird das Event aber im Prinzip nur ein überprüfen der % HP des Bosses sein, daher solltet ihr für zeit einfach 1000 schreiben!
Schritt 5: Was Passiert in Phase 1?
Nun sollten wir angeben, was genau der Boss in der Phase1 machen soll!
Das geht so:
Code:
Hier wird überprüft, ob der Boss unter 95% hp ist! Wenn das zutrifft passiert:
Unit:RemoveEvents() ; Heißt: Alles was vorher passiert ist passiert nun nichtmehr, auch die vorher angegeben events (Unit:RegisterEvent("Name_Phase1",zeit, 0) ) werden nun nichtmehr abgespielt!
Unit:RegisterEvent("Phase1_spell1", zeit, 0) heißt: Nun kommt der boss zu seinen Spells! zeit und 0 haben die selbe bedeutung wie oben!
Jetzt wird also in regelmäßigen abständen das Event "Phase1_spell1" abgespielt!
Unit:RegisterEvent("Name_Phase2", 1000, 0) lässt den boss nun erneut alle 1000 millisekunden überprüfen, ob Phase1 überwunden ist und man so zu Phase2 übergehen kann!
Außerdem schickt der boss ebenso wie oben eine neue Nachricht ab!
das 1. end bedeutet: ende , heißt: wenn der Boss unter 95% leben gerät, passiert alles was bis hierhin eingegeben wurde.
das 2. end bedeutet: falls der Boss NICHT unter 95% leben gerät, passiert alles was zwischen dem 1. und dem 2. end steht, also hier garnichts
Schritt 6: Was passiert beim 1. Spell?
Ebenso wie bei Phase1, müssen wir nun festlegen, was denn beim event "Phase1_spell1" passiert!
Code:
HTML Code:
wird zuerst mal festgelegt, Wen denn der Zauber trifft.
ZIEL müsst ihr hierzu ersetzen, die wichtigsten möglichkeiten zähle ich euch heir mal auf:
Quellcode
Unit:Methode(ID, spell1ziel) Ist nun der tatsächliche spell!
Methode ist hierbei die Art, wie der Zauber gewirkt werden soll!
Ersetzt es durch:
FullCastSpellOnTarget= Zauber voll auf das Ziel wirken
CastSpellOnTarget= Zauberzeit wird nicht berücksichtigt, der Zauber wird sofort auf das Ziel gewirkt! (Klappt nicht bei allen Spells!)
fürID müsst ihr einfach nur die ID eures Zaubers einfügen!
spell1ziel gibt hier nun an, dass der Zauber auch auf das vorher festgelegte ziel (welches wir in der variable spell1ziel abgespeichert haben) gewirkt wird!
die beiden 'end' haben die selbe bedeutung wie oben!
Schritt 7: Die Phase 2!
In eurer Vorstellung habt ihr Phase1 nun überwunden! Jetzt kommt die Phase 2 dran! Im prinzip passiert hier das selbe wie in Phase1, lediglich mit einem anderen Spell und einer anderen nachricht! Außerdem wird nun überprüft, ob die spieler bereit für Phase3 sind, nicht mehr wie oben für Phase2 !
Code:
HTML Code:
Schritt 8: Der 2. Spell eures Bosses!
Da euer boss wegen des Unit:RemoveEvents() den spell aus phase1 nicht mehr beherrscht, sollten wir ihm nun einen neuen beibringen!
Auch hier läuft es ähnlich ab wie bei Spell1, nur müssen wir diesmal die variable umbenennen!
Code:
Code:
Code:
HTML Code:
Beachtet hier, dass wir oben genau 3x "spell1ziel" hatten, solltet ihr Kopieren und Einfügen um schreibarbeit zu sparen, müsst ihr auch aus allen 3x "spell1ziel" ein "spell2ziel" machen, sonst bekommt ihr eine fehlermeldung!!
Schritt 9: Die 3. und letzte Phase des Kampfes!
In dieser letzten Phase soll euer Boss es in sich haben! Deswegen Bekommt er in dieser Phase nicht nur eine, sondern gleich 2 Fähigkeiten verpasst!
Das läuft auch wieder über
Unit:RegisterEvent(...) , nur dass er diesmal 2 events bekommt!
Außerdem müssen wir nun keinen erneuten Check durchführen, wieviel %HP euer boss hat, da die Phase3 hier die letzte sein wird!
Code:
Phase3_spell1 wird ebenso ablaufen wie bereits Phase1spell1 und Phase2spell1 , das solltet ihr mittlerweile selbst beherrschen!
Code:
HTML Code:
Phase3spell2 wird etwas besonderes!
Hier soll der boss sich nun nicht einen einzelnen spieler rauspicken und ihm schaden zufügen, sondern Hier kann er sich
a) Selbst Verstärken (Berserker Buff etc.)
b) Einen AOE Spell (mit flächenschaden) wirken!
aber wie legen wir das fest? - Ganz einfach!
Code:
HTML Code:
Methode wird hier in beiden fällen durch: CastSpell ersetzt!
für ID gebt ihr wieder die ID eures spells ein!
Das Praktische: Je Nach spell wirkt der Boss entweder einen Stärkungszauber auf sich selbst, oder Macht eine Attacke mit flächenschaden!! Für euch zum scripten macht das keinerlei unterschied!
Hier entfällt das 2. end, weil keine if abfrage eingebaut ist!
Schritt 11: Was, wenn der Boss einen Spieler tötet, stirbt oder die Gruppe Scheitert?
Natürlich werden die Leute die euren Boss Killen nicht immer Erfolg haben! Daher müssenw ir nun festlegen, was passiert wenn:
Der Boss ein ziel tötet:
Code:
HTML Code:
Im Prinzip muss nichts passieren, nach belieben könnt ihr hier aber wie oben auch, eine Chatnachricht einfügen!
Der Boss aus dem Kampf gerät:
Code:
HTML Code:
Damit euer Boss wieder auf seinen Normalen stand zurückkommt, nachdem der Kampf endet sollte hier ein
Unit:RemoveEvents() stehen! So geht alles von vorne los, wenn er wieder angegriffen wird!
Der Boss stirbt:
Code:
HTML Code:
Auch hier ist das Unit:RemoveEvents pflicht, wenn ihr wollt könnt ihr aber auch hier wieder eine Chatnachricht einbauen!!
Damit ist euer Boss Script nun fertig!
Ihr habt es geschafft! Euer erstes Boss Script ist nun Fertig!
Speichert das ganze nun als .lua Datei ab und legt es in den "scripts" ordner eurer Emu!
Zur Kontrolle Hier nochmal das ganze script:
Code:
HTML Code:
Quellcode
- RegisterUnitEvent(ID, 1, "Name_onCombat")
- RegisterUnitEvent(ID, 2, "Name_onLeaveCombat")
- RegisterUnitEvent(ID, 3, "Name_onKilledTarget")
- RegisterUnitEvent(ID, 4, "Name_onDied")
- function Name_onCombat(Unit, Event)
- Unit:SendChatMessage(modus, sprache, "Nachricht" )
- Unit:RegisterEvent("Name_Phase1", zeit, 0)
- end
- function Name_Phase1(Unit, Event)
- if Unit:GetHealthPct() < 95 then
- Unit:RemoveEvents()
- Unit:RegisterEvent("Phase1_spell1", zeit, 0)
- Unit:SendChatMessage(modus, sprache, "Nachricht")
- Unit:RegisterEvent("Name_Phase2", 1000, 0)
- end
- end
- function Phase1_spell1(Unit, Event)
- local spell1ziel = ZIEL
- if (spell1ziel~=nil) then
- Unit:Methode(ID, spell1ziel)
- end
- end
- function Name_Phase2(Unit, Event)
- if Unit:GetHealthPct() < 50 then
- Unit:RemoveEvents()
- Unit:RegisterEvent("Phase2_spell1", zeit, 0)
- Unit:SendChatMessage(modus, sprache, "Nachricht")
- Unit:RegisterEvent("Name_Phase3", 1000, 0)
- end
- end
- function Phase2_spell1(Unit, Event)
- local spell2ziel = ZIEL
- if (spell2ziel~=nil) then
- Unit:Methode(ID, spell2ziel)
- end
- end
- function Name_Phase3(Unit, Event)
- if Unit:GetHealthPct() < 20 then
- Unit:RemoveEvents()
- Unit:RegisterEvent("Phase3_spell1", zeit, 0)
- Unit:RegisterEvent("Phase3_spell2", zeit, 0)
- Unit:SendChatMessage(modus, sprache, "Nachricht")
- end
- end
- function Phase3_spell1(Unit, Event)
- local spell3ziel = ZIEL
- if (spell3ziel~=nil) then
- Unit:Methode(ID, spell3ziel)
- end
- end
- function Phase3_spell2(Unit, Event)
- Unit:Methode(ID)
- end
- function Name_onKilledTarget(Unit, Event)
- Unit:SendChatMessage(modus, sprache, "Nachricht")
- end
- function Name_onLeaveCombat(Unit, Event)
- Unit:RemoveEvents()
- end
- function Name_onDied(Unit, Event)
- Unit:RemoveEvents()
- Unit:SendChatMessage(modus, sprache, "Nachricht")
- end
Modus ,Sprache oder ähnliches stehen, weil ihr das alles wie bereits oben angegeben ersetzt habt!!
Ihr könnt eurem Boss natürlich nach belieben mehr Phasen und Spells einbauen, wie das funktioniert solltet ihr nach dem Tutorial so einigermaßen verstanden haben! Ich hab das Tutorial halt relativ kurz gehalten, is ja für einsteiger!
Ihr solltet außerdem darauf achten, dass eure Nachrichten nicht zu lang sind, da sie sonst von einigen Emu's einfach ignoriert werden !