1: Ändern des Aussehens eures bosses!
Das geht ganz einfach! fügt in euer script einfach an der beliebigen stelle ein:
Code:
Unit:SetModel(X)
Für X setzt ihr die DisplayID ein, die euer Boss annehmen soll!
ACHTUNG: Wenn ihr im Kampf die Display ID ändert, wird der Boss sein neues Aussehen beibehalten, wenn er den kampf verlässt! Fügt deshalb in die _onLeaveCombat und in die _onDied funktion folgendes ein:
Code:
Unit:SetModel(Z)
Z ersetzt ihr hier durch die originale display ID eures Bosses!
2: Ändern der Größe des Bosses!
Mit dem ändern der Display ID könnte euer Boss sehr groß oder klein werden.. um das zu verhindern können
wir ganz einfach die größe des Bosses ändern!
Code:
Unit:SetScale(Y)
Y ersetzt ihr durch eine Zahl (zB. 2.5) ! Auch hier solltet ihr das selbe wie bei Punkt 1 beachten!
Die standardgröße eures bosses sollte normal immer bei 1.0 liegen!
3: Eine Flug bzw. Nahkampfschaden freie Phase!
Wenn euer Boss z.B. Eine Art Flugphase haben soll, oder ihr z.B. an einem Boss wie M'uru arbeitet, ist es sinnvoll
dem Boss wie auf den Blizzard Servern auch, die möglichkeit zu nehmen euch direkt mit Nahkampfschaden zu treffen!
Geht dazu in die Phase eures Bosses und fügt folgende zeile ein:
Code:
Unit:SetCombatCapable(1)
Nun müsst ihr nur in der nächsten Phase das ganze wieder rückgängig machen:
Code:
Unit:SetCombatCapable(0)
Während dieser Phase ohne Nahkampfschaden wird euer Boss sich nicht bewegen und er wird nicht zuschlagen,
dass gibt euch die Möglichkeit hier besonders starke Spells einzubauen, ohne den Boss unbesiegbar zu machen!
4: Ein NPC soll sich bewegen?
Das geht ganz einfach! Nämlich über ein MoveTo event!
Code:
Unit:MoveTo(x , y, z)
Für x y und z müsst ihr nun die gewünschten X Y und Z koordinaten eingeben!
Diese erhaltet ihr (bei ArcEmu) zB, indem ihr ein Mob an der gewissen stelle spawnt. Dann werden euch
die genannten Koordinaten in der gesagten reihenfolge ausgegeben!
5: Der Boss braucht unterstützung? Kein Problem!
Sollte euer Boss es nötig haben, Freunde mit in den kampf zu holen ist das natürlich kein Problem!
Im Code sieht das ganze so aus:
Code:
Unit:SpawnCreature(ID, x , y, z, o, faction, zeit)
Ihr ersetzt:
ID = ID des gespawnten Mobs
X = X-Koordinate
Y = Y-Koordinate
Z = Z-Koordinate
o = Map-ID (Wird auch zB beim spawnen eines mobs ausgegeben)
faction = FraktionsID, der das Gespawnte Mob angehören soll. (Sollte der des Bosses entsprechen, damit das Mob nich den boss angreift!)
zeit = Zeit in Millisekunden, die das Mob gespawnt bleibt (egal ob es gekillt wird oder nicht!)
Ihr könnt euch aber viel Zeit sparen, Wenn ihr dem Boss angebt er soll die NPC's in seiner unmittelbaren nähe spawnen!
Das könnt ihr so machen:
Code:
Unit:SpawnCreature(ID, Unit:GetX()+math.random(1,5), Unit:GetY(), Unit:GetZ(), Unit:GetO(), faction, zeit)
Über Unit:GetX() usw. werden die Exakten Koordinaten des Bosses ausgelesen, und dort wird der NPC gespawnt!
das "+math.random(1,5)" hinter der X-Koordinate verhindert, dass euer mob direkt im Boss gespawnt wird, ihr könnt
es auch weglassen! (es erhöht die X koordinate um eine Zufallszahl zwischen 1 und 5!)
6: Ein Gameobject spawnen
Wenn euer Boss das Schlachtfeld beispielsweise in ein brennendes Plateau verwandeln soll, könnt ihr hierzu GameObjecte spawnen! Das geht sogar noch einfacher als bei Mobs!
Code:
Unit:SpawnGameObject(x, y, z, zeit)
Die einzelnen Werte ersetzt ihr wie oben!
7: Ein erweitertes Cast-Event
Im Einsteigertutorial habt ihr gelernt, wie der Boss Spieler mit seinen Zaubern trifft. Hier werde ich euch eine Methode zeigen, mit der ihr sozusagen fortgeschrittene Cast-Events schreiben könnt. Ihr wollt zum beispiel, dass euer Boss alle 20 sekunden 5 Feuerbälle direkt nacheinander in die gruppe schießt?
Mit dieser Methode kein Problem!
In die Phase:
Code:
Unit:RegisterEvent("Feuerballsalve", 20000, 0)
und dann später:
Code:
function Feuerballsalve(Unit, Event)
Unit:RegisterEvent("Feuerball", 500, 5)
end
function Feuerball(Unit, Event)
local feuerballziel = Unit:GetRandomPlayer(0)
if (feuerballziel~=nil) then
Unit:FullCastSpellOnTarget(ID , feuerballziel)
end
end
ID ersetzt ihr hier beispielsweise durch die Spell ID eines Feuerballs!
Das ganze wird nun alle 20 sekunden ein kleines Event starten, welches innerhalb von 2,5 sekunden 5 Feuerbälle in die Gruppe schießt!
Ihr wollt, dass ein spell zB alle 20 sekunden 5x auf das selbe ziel gewirkt wird?
Wir nehmen wieder unser Feuerballevent, ändern aber diesmal den Ort, an der das Ziel festgelegt wird:
Code:
Unit:RegisterEvent("Feuerballsalve", 20000, 0)
und dann später:
Code:
function Feuerballsalve(Unit, Event)
feuerballziel = Unit:GetRandomPlayer(0)
Unit:RegisterEvent("Feuerball", 500, 5)
end
function Feuerball(Unit, Event)
if (feuerballziel~=nil) then
Unit:FullCastSpellOnTarget(ID , feuerballziel)
end
end
jetzt müssen wir das "local" vor der Zuweisung weglassen, damit die Variable über das ganze Script gilt.
Nun Wird das ziel "feuerballziel" nur ein mal alle 20 sekunden festgelegt, und kriegt dann sofort 5 feuerbälle ab!
So, ihr habt alle wieder was gelernt und seid jetzt bereit, noch schönere Boss-fights in LUA zu erstellen!
Ich hoffe euch hat das Tutorial gefallen
MFG
CroWn