Lbniese
18-09-09, 10:48 AM
Making an NPC unattackable in Lua.
This tutorial requires the ArcEmu rev: 2700+
Making an NPC unattackable is the perfect thing for your cutscenes for your boss. You don't want your boss in the middle of a cut-scene to be killed by an inpatient Warlock shadow bolting it, do you? Well, there is only one way at this time of writing to do this.
function NegEtheriumBossOnOnePercent(Unit, Event)
if Etherium:GetHealthPct() == 1 then
Etherium:RemoveEvents()
Etherium:SetUInt32Value(58, 2) -- Set the NPC to be unattackable,
Etherium:RemoveAllAuras()
Etherium:SetCombatCapable(1)
print("Etherium has been defeated. Spawning cache...")
Etherium:RegisterEvent("NegEtheriumCINESix", 1, 1)
Etherium:RegisterEvent("NegEtheriumCINESeven", 5000, 1)
Etherium:RegisterEvent("NegEtheriumCINEEight", 15000, 1)
Etherium:RegisterEvent("NegEtheriumCINENine", 22000, 1)
Etherium:RegisterEvent("NegEtheriumCINETen", 27000, 1)
Etherium:RegisterEvent("NegEtheriumCINEEleven", 29000, 1)
Etherium:RegisterEvent("NegEtheriumKill", 30000, 1)
--[[
Spawn Cache Event here..
]]--
else
end
end
This is an excerpt from my own, unfinished, script. The bit we are interested in is this bit:
Etherium:SetUInt32Value(58, 2) -- Set the NPC to be unattackable,
Etherium:RemoveAllAuras()
Etherium:SetCombatCapable(1)
What this code does is that it sets the NPC to be unattackable (but still displays it as hostile), removes all debuffs/buffs from him, and then makes him unable to attack.
Unit:SetUInt32Value(58, 2)
This bit sets the NPC as unattackable. If you click him, he is displayed as hostile, but you won't see the sword when you mouse-over. You won't be able to attack him, at all.
Unit:SetUInt32Value(58, 26)
The above code will make the NPC unselectable from the client.
To make him attackable again, you use this code:
Unit:SetUInt32Value(58, 0)
Quite simple eh? It's certainly not the most ideal solution, but it is the only way to do this in Lua as of this writing.
So, to recap. SetUInt32Value(58, 2) will set the NPC as unattackable, SetUInt32Value(52, 0) will set the NPC as attackable.
Furthermore, here are all of the Unit flags (That are known as of r2850)
2 -- Client won't let you attack the mob
4 -- Makes players & NPCs attackable/unattackable
256 -- Changes attackable status
13 -- Sets PVP Flag
14 -- Silenced
15 -- Dead
17 -- Alive
18 -- Pacified
19 -- Stunned
20 -- Sets Combat Flag
21 -- Sets the same flag as mounted on a taxi (Can't cast spells)
22 -- Disarmed
23 -- Confused
24 -- Fleeing/Fear
25 -- Makes players & NPCs attackable/unattackable
26 -- Unselectable
27 -- Skinnable
30 -- Feign Death
NOTE THAT THE UNIT FLAGS CHANGE EVERY CLIENT UPDATE.
Hope this helps you,
lbniese
This tutorial requires the ArcEmu rev: 2700+
Making an NPC unattackable is the perfect thing for your cutscenes for your boss. You don't want your boss in the middle of a cut-scene to be killed by an inpatient Warlock shadow bolting it, do you? Well, there is only one way at this time of writing to do this.
function NegEtheriumBossOnOnePercent(Unit, Event)
if Etherium:GetHealthPct() == 1 then
Etherium:RemoveEvents()
Etherium:SetUInt32Value(58, 2) -- Set the NPC to be unattackable,
Etherium:RemoveAllAuras()
Etherium:SetCombatCapable(1)
print("Etherium has been defeated. Spawning cache...")
Etherium:RegisterEvent("NegEtheriumCINESix", 1, 1)
Etherium:RegisterEvent("NegEtheriumCINESeven", 5000, 1)
Etherium:RegisterEvent("NegEtheriumCINEEight", 15000, 1)
Etherium:RegisterEvent("NegEtheriumCINENine", 22000, 1)
Etherium:RegisterEvent("NegEtheriumCINETen", 27000, 1)
Etherium:RegisterEvent("NegEtheriumCINEEleven", 29000, 1)
Etherium:RegisterEvent("NegEtheriumKill", 30000, 1)
--[[
Spawn Cache Event here..
]]--
else
end
end
This is an excerpt from my own, unfinished, script. The bit we are interested in is this bit:
Etherium:SetUInt32Value(58, 2) -- Set the NPC to be unattackable,
Etherium:RemoveAllAuras()
Etherium:SetCombatCapable(1)
What this code does is that it sets the NPC to be unattackable (but still displays it as hostile), removes all debuffs/buffs from him, and then makes him unable to attack.
Unit:SetUInt32Value(58, 2)
This bit sets the NPC as unattackable. If you click him, he is displayed as hostile, but you won't see the sword when you mouse-over. You won't be able to attack him, at all.
Unit:SetUInt32Value(58, 26)
The above code will make the NPC unselectable from the client.
To make him attackable again, you use this code:
Unit:SetUInt32Value(58, 0)
Quite simple eh? It's certainly not the most ideal solution, but it is the only way to do this in Lua as of this writing.
So, to recap. SetUInt32Value(58, 2) will set the NPC as unattackable, SetUInt32Value(52, 0) will set the NPC as attackable.
Furthermore, here are all of the Unit flags (That are known as of r2850)
2 -- Client won't let you attack the mob
4 -- Makes players & NPCs attackable/unattackable
256 -- Changes attackable status
13 -- Sets PVP Flag
14 -- Silenced
15 -- Dead
17 -- Alive
18 -- Pacified
19 -- Stunned
20 -- Sets Combat Flag
21 -- Sets the same flag as mounted on a taxi (Can't cast spells)
22 -- Disarmed
23 -- Confused
24 -- Fleeing/Fear
25 -- Makes players & NPCs attackable/unattackable
26 -- Unselectable
27 -- Skinnable
30 -- Feign Death
NOTE THAT THE UNIT FLAGS CHANGE EVERY CLIENT UPDATE.
Hope this helps you,
lbniese