Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local OBJECT_END = 0x0006
- local GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B
- local UNIT_FIELD_FLAGS = OBJECT_END + 0x0035 -- Size: 1, Type: INT, Flags: PUBLIC
- local UNIT_FLAG_NOT_SELECTABLE = 0x02000000 -- 26 33554432 cannot select the unit
- local UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0044
- local UNIT_FIELD_BYTES_2 = OBJECT_END + 0x0074 -- Size: 1, Type: BYTES, Flags: PUBLIC
- -- 3rd boss flags
- local UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0006
- local UNIT_FIELD_CHARM = OBJECT_END + 0x0000
- local UNIT_FLAG_PVP_ATTACKABLE = 0x00000008
- local UNIT_FLAG_PLAYER_CONTROLLED_CREATURE = 0x01000000
- local UNIT_END = OBJECT_END + 0x008E
- local PLAYER_DUEL_TEAM = UNIT_END + 0x0008
- local PLAYER_DUEL_ARBITER = UNIT_END + 0x0000
- --[[
- "This kingdom belongs to the Scourge! Only the dead may enter."
- "We are besieged. Strike out and bring back their corpses!"
- "They hunger."
- "Dinner time, my pets."
- "You were foolish to come."
- "As Anub'Arak commands!"
- 14076 10 A_KRIKTHIRKILL01
- 14077 10 A_KRIKTHIRKILL02
- 14078 10 A_KRIKTHIRKILL03
- 14079 10 A_KRIKTHIRSENDGROUP01
- 14080 10 A_KRIKTHIRSENDGROUP02
- 14081 10 A_KRIKTHIRSENDGROUP03
- 14082 10 A_KRIKTHIRPREFIGHT01
- 14083 10 A_KRIKTHIRPREFIGHT02
- 14084 10 A_KRIKTHIRPREFIGHT03
- 14085 10 A_KRIKTHIRSWARM01
- 14086 10 A_KRIKTHIRSWARM02
- ]]
- -- 3rd boss
- function TOC.VAR.thirdbosseventsTOC(pUnit, Event)
- if Event == 1 then
- pUnit:SendChatMessage(14,0,"This kingdom belongs to the Scourge! Only the dead may enter.")
- pUnit:PlaySoundToSet(14075)
- pUnit:RegisterEvent("TOC.VAR.MindControlAPlayer", 5000, 1)
- local object = pUnit:GetGameObjectNearestCoords(665.92, 143.5, 142.1, 195485)
- object:SetByte(GAMEOBJECT_BYTES_1,0,1)
- elseif Event == 2 then
- pUnit:RemoveEvents()
- local object = pUnit:GetGameObjectNearestCoords(665.92, 143.5, 142.1, 195485)
- object:SetByte(GAMEOBJECT_BYTES_1,0,0)
- elseif Event == 3 then
- elseif Event == 4 then
- pUnit:RemoveEvents()
- pUnit:SendChatMessage(14,0,"I should be grateful, but I long ago lost the capacity...")
- pUnit:PlaySoundToSet(14087)
- local object = pUnit:GetGameObjectNearestCoords(665.92, 143.5, 142.1, 195485)
- object:SetByte(GAMEOBJECT_BYTES_1,0,0)
- for _,plr in pairs(pUnit:GetInRangePlayers()) do
- if plr:HasAura(45631) then -- mind controlled
- plr:RemoveAura(50224) -- sight visual
- plr:RemoveAura(45631) -- chains self
- local count = 0
- local faction = 0
- while count < 6 and faction == 0 do
- local plr = pUnit:GetRandomPlayer()
- if plr then
- if plr:GetName() ~= plrs:GetName() then
- faction = plr:GetFaction()
- end
- end
- count = count + 1
- end
- if faction ~= 0 then
- plr:SetFaction(faction)
- else
- plr:SetFaction(1) -- to hell with it
- end
- plr:SetPlayerLock(0)
- plr:SetUInt64Value(UNIT_FIELD_CHARMEDBY, 0)
- plr:SetUInt32Value(UNIT_FIELD_FLAGS, 0)
- plr:SetUInt32Value(PLAYER_DUEL_TEAM, 0)
- plr:SetUInt64Value(PLAYER_DUEL_ARBITER,0)
- plr:SetPlayerLock(0)
- end
- end
- end
- end
- function TOC.VAR.MindControlAPlayer(pUnit)
- if pUnit:GetInRangePlayersCount() > 1 then
- local plr = pUnit:GetRandomPlayer(0)
- local count = 0
- while plr == nil and count < 5 do
- plr = pUnit:GetRandomPlayer(0)
- count = count + 1
- end
- if plr then
- local name = plr:GetName()
- pUnit:SendChatMessage(14,0,"Hush-tak Hee-tah!")
- pUnit:PlaySoundToSet(14078)
- pUnit:SendChatMessage(42,0,name.." has been mind controlled!")
- TOC.VAR.MindControlPlayer(plr, pUnit)
- end
- end
- end
- function TOC.VAR.MindControlPlayer(plr, pUnit)
- if pUnit:GetMainTank():GetName() == plr:GetName() then
- local c = pUnit:GetRandomPlayer(7) -- not main tank
- if c then
- pUnit:ChangeTarget(c)
- end
- end
- plr:CastSpell(50224) -- sight visual
- plr:CastSpell(45631) -- chains self
- plr:SetPlayerLock(1)
- plr:SetUInt64Value(UNIT_FIELD_CHARMEDBY, pUnit)
- plr:SetFaction(21)
- plr:SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED_CREATURE)
- plr:SetUInt32Value(PLAYER_DUEL_TEAM, 1)
- local found = false
- for _,plrs in pairs(pUnit:GetInRangePlayers()) do
- if plrs:GetName() ~= plr:GetName() then
- plrs:SetUInt32Value(PLAYER_DUEL_TEAM, 0)
- plrs:SetUInt64Value(PLAYER_DUEL_ARBITER,plr)
- if not found then
- found = true
- plr:SetUInt64Value(PLAYER_DUEL_ARBITER,plrs)
- end
- end
- end
- local count = 0
- local b = nil
- local nam = nil
- while b == nil and count < 5 and nam == nil do
- count = count + 1
- b = pUnit:GetRandomPlayer(0)
- if b then
- if b:GetName() ~= plr:GetName() then
- nam = plr:GetName()
- end
- end
- end
- if b and nam then
- plr:Unroot()
- plr:AttackReaction(b, 250, 11)
- end
- local id = pUnit:GetInstanceID()
- if id == nil then id = 1 end
- TOC[id] = TOC[id] or {VAR={}}
- TOC[id].VAR.class = plr:GetPlayerClass()
- TOC[id].VAR.plr = plr
- pUnit:RegisterEvent("TOC.VAR.MindControlPlayer_Actions", 5000, 0)
- pUnit:RegisterEvent("TOC.VAR.MindControlPlayer_Reset", 16000, 1)
- end
- function TOC.VAR.MindControlPlayer_Actions(pUnit)
- local id = pUnit:GetInstanceID()
- if id == nil then id = 1 end
- TOC[id] = TOC[id] or {VAR={}}
- if TOC[id].VAR.plr then
- local count = 0
- local b = nil
- local target = nil
- while b == nil and target == nil and count < 5 do
- count = count + 1
- b = pUnit:GetRandomPlayer(0)
- if b:GetName() ~= TOC[id].VAR.plr:GetName() then
- target = b
- end
- end
- if target then
- TOC[id].VAR.class = string.lower(TOC[id].VAR.class)
- if TOC[id].VAR.class == "warrior" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "warlock" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "shaman" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "rogue" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "priest" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "paladin" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "mage" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "hunter" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- elseif TOC[id].VAR.class == "druid" then
- if math.random(1,2) == 1 then
- TOC[id].VAR.plr:StopMovement(4000)
- TOC[id].VAR.plr:FullCastSpellOnTarget(TOC.VAR.getWarriorSpell(), target)
- else
- TOC[id].VAR.plr:MovePlayerTo(target:GetX(), target:GetY(), target:GetZ(), 0, 4096)
- end
- end
- end
- end
- end
- function TOC.VAR.getWarriorSpell()
- return 11
- end
- function TOC.VAR.getWarlockSpell()
- return 11
- end
- function TOC.VAR.getShamanSpell()
- return 11
- end
- function TOC.VAR.getRogueSpell()
- return 11
- end
- function TOC.VAR.getPriestSpell()
- return 11
- end
- function TOC.VAR.getPaladinSpell()
- return 11
- end
- function TOC.VAR.getMageSpell()
- return 11
- end
- function TOC.VAR.getHunterSpell()
- return 11
- end
- function TOC.VAR.getDruidSpell()
- return 11
- end
- function TOC.VAR.MindControlPlayer_Reset(pUnit)
- local id = pUnit:GetInstanceID()
- if id == nil then id = 1 end
- TOC[id] = TOC[id] or {VAR={}}
- local plr = TOC[id].VAR.plr
- if plr then
- pUnit:SendChatMessageToPlayer(42,0,"You have broken free of Krik'thir's will!", plr)
- plr:RemoveAura(50224) -- sight visual
- plr:RemoveAura(45631) -- chains self
- local count = 0
- local faction = 0
- while count < 6 and faction == 0 do
- local plrs = pUnit:GetRandomPlayer(0)
- if plrs then
- if plr:GetName() ~= plrs:GetName() then
- faction = plrs:GetFaction()
- end
- end
- count = count + 1
- end
- if faction ~= 0 then
- plr:SetFaction(faction)
- else
- plr:SetFaction(1) -- to hell with it
- end
- plr:SetPlayerLock(0)
- plr:SetUInt64Value(UNIT_FIELD_CHARMEDBY, 0)
- plr:SetUInt32Value(UNIT_FIELD_FLAGS, 0)
- plr:SetUInt32Value(PLAYER_DUEL_TEAM, 0)
- plr:SetUInt64Value(PLAYER_DUEL_ARBITER,0)
- end
- for _,plrs in pairs(pUnit:GetInRangePlayers()) do
- plrs:SetUInt64Value(PLAYER_DUEL_ARBITER,0)
- end
- TOC[id].VAR.class = nil
- TOC[id].VAR.plr = nil
- pUnit:RegisterEvent("TOC.VAR.MindControlAPlayer", 5000, 1)
- end
- RegisterUnitEvent(252691, 1, "TOC.VAR.thirdbosseventsTOC")
- RegisterUnitEvent(252691, 2, "TOC.VAR.thirdbosseventsTOC")
- RegisterUnitEvent(252691, 3, "TOC.VAR.thirdbosseventsTOC")
- RegisterUnitEvent(252691, 4, "TOC.VAR.thirdbosseventsTOC")
Advertisement
Add Comment
Please, Sign In to add comment