mirror of
https://github.com/ProjectEQ/projecteqquests
synced 2026-08-12 00:26:10 -04:00
385 lines
15 KiB
Lua
385 lines
15 KiB
Lua
--immune arena mobs a_mastruq_gladiator (297038) a_noc_brawler (297033) a_ra`tuk_bruiser (297036)
|
|
|
|
-- killable arena mobs: aggro radius ~ 10 a_mastruq_gladiator (297040) a_noc_brawler (297035) a_ra`tuk_bruiser (297037)
|
|
-- Champ_Event (297001)
|
|
|
|
local event_triggered = 0;
|
|
|
|
function ChampEvent_Spawn(e)
|
|
event_triggered = 0;
|
|
eq.set_timer("spawnevent", 3 * 1000);
|
|
eq.spawn_condition("txevu", 0, 6, 0); --off arena trash
|
|
end
|
|
|
|
function ChampEvent_Timer(e)
|
|
if (e.timer == "spawnevent") then
|
|
event_triggered = 0;
|
|
eq.stop_timer("spawnevent");
|
|
local ex = e.self:GetX();
|
|
local ey = e.self:GetY();
|
|
local ez = e.self:GetZ();
|
|
eq.set_proximity(ex - 30, ex + 30, ey - 30, ey + 30, ez - 1, ez + 20);
|
|
-- immune arena mobs
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -37, 10, -437, 258);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -69, -97, -433, 112);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -57, -95, -434, 392);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 22, -51, -434, 14);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 22, -39, -434, 258);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 21, 49, -434, 374);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 10, 48, -435, 120);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 54, -98, -434, 30);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 58, -90, -434, 266);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 4, -112, -434, 330);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -3, -120, -434, 76);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 52, 137, -434, 162);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, 62, 133, -434, 404);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -20, 111, -434, 444);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -28, 119, -434, 190);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -84, 145, -434, 297);
|
|
eq.spawn2(eq.ChooseRandom(297038,297033,297036), 0, 0, -92, 133, -434, 76);
|
|
eq.unique_spawn(297034, 0, 0, -39, -8, -434, 64); --#Mastruq_Champion (297034)
|
|
end
|
|
end
|
|
|
|
function ChampEvent_Enter(e)
|
|
if (event_triggered == 0) then
|
|
event_triggered = 1;
|
|
eq.signal(297034,1); --signal mastruq champion to begin emoting
|
|
eq.local_emote({e.self:GetX(), e.self:GetY(), e.self:GetZ()}, MT.White, 200,"As you step into the room, all combat stops and every eye turns to you. The champion in the center finishes his opponent and yells 'HOLD!' stopping the Muramites before they can charge.");
|
|
end
|
|
end
|
|
|
|
function ChampEvent_Signal(e)
|
|
if (e.signal == 1) then
|
|
eq.set_timer("spawnevent", 1800 * 1000); -- 30 minutes to respawn the event
|
|
elseif (e.signal == 2) then
|
|
eq.set_timer("spawnevent", 60 * 1000); -- 1 minutes to respawn the event from runt failure
|
|
end
|
|
end
|
|
|
|
function MastruqChampion_Signal(e)
|
|
if (e.signal == 1) then
|
|
e.self:MoveTo(0, 0, -430, 130,true);
|
|
eq.set_timer("emote1", 3 * 1000);
|
|
elseif (e.signal == 2) then
|
|
e.self:SetSpecialAbility(24, 0);
|
|
e.self:SetSpecialAbility(25, 0);
|
|
e.self:SetSpecialAbility(35, 0);
|
|
elseif (e.signal == 3) then
|
|
e.self:SetSpecialAbility(24, 0);
|
|
e.self:SetSpecialAbility(25, 0);
|
|
e.self:SetSpecialAbility(35, 0);
|
|
e.self:Say("I told ya we don't take kindly to cheaters! Boys, kill these fools starting with the one who broke the rules!");
|
|
end
|
|
end
|
|
|
|
function MastruqChampion_Timer(e)
|
|
if (e.timer == "emote1") then
|
|
eq.stop_timer("emote1");
|
|
e.self:Say("Look what we have here, boys? One of them softies found its way into our pit. What is it that we do with softies again?");
|
|
eq.set_timer("emote2", 3 * 1000);
|
|
elseif (e.timer == "emote2") then
|
|
eq.stop_timer("emote2")
|
|
eq.local_emote({e.self:GetX(), e.self:GetY(), e.self:GetZ()}, MT.White, 100,"The cry goes up from the crowd, 'KILL THEM!");
|
|
eq.set_timer("emote3", 3 * 1000);
|
|
elseif (e.timer == "emote3") then
|
|
eq.stop_timer("emote3");
|
|
e.self:Say("Yeah! We kill them! But, this here's a combat pit and I've been thinkin...");
|
|
eq.set_timer("emote4", 3 * 1000);
|
|
elseif (e.timer == "emote4") then
|
|
eq.stop_timer("emote4");
|
|
e.self:Say("Them softies always travel in big packs, but I bet they're real weak by themselves.");
|
|
eq.set_timer("emote5", 3 * 1000);
|
|
elseif (e.timer == "emote5") then
|
|
eq.stop_timer("emote5");
|
|
eq.local_emote({e.self:GetX(), e.self:GetY(), e.self:GetZ()}, MT.White, 100,"A mix of cheers and laughter comes out of the gathering crowd.");
|
|
eq.set_timer("emote6", 3 * 1000);
|
|
elseif (e.timer == "emote6") then
|
|
eq.stop_timer("emote6");
|
|
e.self:Say("They probably crumble like a rag doll the first time they go toe-to-toe with a real warrior.");
|
|
eq.set_timer("emote7", 3 * 1000);
|
|
elseif (e.timer == "emote7") then
|
|
eq.stop_timer("emote7");
|
|
e.self:Say("I bet this one here can't even take the runt!");
|
|
eq.set_timer("emote8", 3 * 1000);
|
|
elseif (e.timer == "emote8") then
|
|
eq.stop_timer("emote8");
|
|
eq.local_emote({e.self:GetX(), e.self:GetY(), e.self:GetZ()}, MT.White, 100,"The crowd bursts into jeers as a wretched creature pulls itself out of the pond and cowers before the champion.");
|
|
eq.unique_spawn(297209,0,0,-50,0,-438,132); -- The Runt
|
|
eq.set_timer("emote9", 3 * 1000);
|
|
elseif (e.timer == "emote9") then
|
|
eq.stop_timer("emote9");
|
|
e.self:Say("Go on, show us what you're made of! Just you and the runt. No pets, no friends, no healing, no nuttin! You win and you can walk away with your head still on your shoulder. But I warn you, we don't take kindly to cheaters.");
|
|
elseif(e.timer=="OOBcheck") then
|
|
eq.stop_timer("OOBcheck");
|
|
if (e.self:GetX() > 96 or e.self:GetX() < -120 or e.self:GetY() < -190 or e.self:GetY() > 190) then
|
|
e.self:CastSpell(3791,e.self:GetID()); -- Spell: Ocean's Cleansing
|
|
e.self:GMMove(8, 0, -436, 254);
|
|
e.self:WipeHateList();
|
|
else
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
end
|
|
end
|
|
end
|
|
|
|
function IxtHsek_Combat(e)
|
|
if e.joined then
|
|
eq.set_next_hp_event(90);
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
if(not eq.is_paused_timer("depop")) then
|
|
eq.pause_timer("depop");
|
|
end
|
|
else
|
|
eq.stop_timer("OOBcheck");
|
|
eq.resume_timer("depop");
|
|
end
|
|
end
|
|
|
|
function IxtHsek_HP(e)
|
|
local npc_list = eq.get_entity_list():GetNPCList();
|
|
for npc in npc_list.entries do
|
|
if (npc.valid and (npc:GetNPCTypeID() == 297035 or npc:GetNPCTypeID() == 297037 or npc:GetNPCTypeID() == 297040)) then
|
|
npc:AddToHateList(e.self:GetHateRandom(),1);
|
|
e.self:Say("Don't just stand there you fools! Come help me kill them!");
|
|
end
|
|
end
|
|
end
|
|
|
|
function MastruqChampion_Combat(e)
|
|
if e.joined then
|
|
eq.set_next_hp_event(20);
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
else
|
|
eq.stop_timer("OOBcheck");
|
|
end
|
|
end
|
|
|
|
function MastruqChampion_HP(e)
|
|
local npc_list = eq.get_entity_list():GetNPCList();
|
|
for npc in npc_list.entries do
|
|
if (npc.valid and (npc:GetNPCTypeID() == 297211)) then
|
|
npc:AddToHateList(e.self:GetHateTop(),1);
|
|
e.self:Say("Ugh. These fools are stronger than they look. Hsek, come help me with them!");
|
|
-- add #Ixt_Hsek_Syat (297211) to hate list
|
|
--should he emote?
|
|
end
|
|
end
|
|
end
|
|
|
|
--mastruq mods
|
|
|
|
function MastruqChampion_Spawn(e)
|
|
e.self:ModSkillDmgTaken(0, -25); -- 1h blunt
|
|
e.self:ModSkillDmgTaken(2, -25); -- 2h blunt
|
|
e.self:ModSkillDmgTaken(1, 25); -- 1h slashing
|
|
e.self:ModSkillDmgTaken(3, 25); -- 2h slashing
|
|
e.self:ModSkillDmgTaken(7, 25); -- archery
|
|
end
|
|
|
|
function TheRunt_Spawn(e)
|
|
-- mods enthralled destroyer/noc bloodluster
|
|
e.self:ModSkillDmgTaken(0, 25); -- 1h blunt
|
|
e.self:ModSkillDmgTaken(2, 25); -- 2h blunt
|
|
e.self:ModSkillDmgTaken(1, -25); -- 1h slashing
|
|
e.self:ModSkillDmgTaken(3, -25); -- 2h slashing
|
|
e.self:ModSkillDmgTaken(7, -25); -- archery
|
|
|
|
e.self:MoveTo(25, 0, -437, 130,true);
|
|
eq.set_timer("depop", 600 * 1000); -- 10 min reset if runt isnt killed
|
|
local hate_list;
|
|
end
|
|
|
|
function TheRunt_Combat(e)
|
|
if e.joined then
|
|
eq.set_timer("checklist", 1 * 1000);
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
else
|
|
eq.stop_timer("checklist");
|
|
eq.stop_timer("OOBcheck");
|
|
end
|
|
end
|
|
|
|
function TheRunt_Timer(e)
|
|
if (e.timer == "checklist") then
|
|
hate_list = e.self:CountHateList();
|
|
if (hate_list ~= nil and tonumber(hate_list) > 1) then
|
|
eq.stop_timer("checklist");
|
|
-- wake up arena mobs
|
|
eq.signal(297038,1);
|
|
eq.signal(297033,1);
|
|
eq.signal(297036,1);
|
|
-- champion also wakes up and attacks
|
|
eq.signal(297034,3); -- signal #Mastruq_Champion (297034) to remove immunities
|
|
-- add arena mobs to hate list
|
|
local npc_list = eq.get_entity_list():GetNPCList();
|
|
for npc in npc_list.entries do
|
|
if (npc.valid and (npc:GetNPCTypeID() == 297038 or npc:GetNPCTypeID() == 297033 or npc:GetNPCTypeID() == 297036 or npc:GetNPCTypeID() == 297034)) then
|
|
npc:AddToHateList(e.self:GetHateRandom(),1);
|
|
end
|
|
end
|
|
end
|
|
elseif(e.timer=="OOBcheck") then
|
|
eq.stop_timer("OOBcheck");
|
|
if (e.self:GetX() > 96 or e.self:GetX() < -120 or e.self:GetY() < -190 or e.self:GetY() > 190) then
|
|
e.self:CastSpell(3791,e.self:GetID()); -- Spell: Ocean's Cleansing
|
|
e.self:GMMove(8, 0, -436, 254);
|
|
e.self:WipeHateList();
|
|
else
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
end
|
|
elseif(e.timer=="depop") then
|
|
eq.depop(297211); -- hsek
|
|
eq.depop(297034); -- champ
|
|
eq.depop_all(297038); -- arena mob
|
|
eq.depop_all(297036); -- arena mob
|
|
eq.depop_all(297033); -- arena mob
|
|
eq.depop_all(297035); -- arena mob
|
|
eq.depop_all(297037); -- arena mob
|
|
eq.depop_all(297040); -- arena mob
|
|
eq.signal(297001,2); --signal champ_event to begin timer to respawn event
|
|
eq.depop_all(297209); -- the runt
|
|
end
|
|
end
|
|
|
|
function TheRunt_Death(e)
|
|
-- signal arena mobs to path out
|
|
eq.signal(297038,2);
|
|
eq.signal(297033,2);
|
|
eq.signal(297036,2);
|
|
eq.unique_spawn(297211,0,0,-93,121,-435,194); -- #Ixt_Hsek_Syat
|
|
eq.signal(297034,2); -- signal #Mastruq_Champion (297034) to remove immunities
|
|
eq.spawn2(eq.ChooseRandom(297040,297035,297037), 0, 0, -37, 10, -437, 258);
|
|
eq.spawn2(eq.ChooseRandom(297040,297035,297037), 0, 0, -69, -97, -433, 112);
|
|
eq.spawn2(eq.ChooseRandom(297040,297035,297037), 0, 0, -57, -95, -434, 392);
|
|
end
|
|
|
|
function ArenaMobs_Signal(e)
|
|
if (e.signal == 1) then
|
|
e.self:SetSpecialAbility(24, 0);
|
|
e.self:SetSpecialAbility(25, 0);
|
|
e.self:SetSpecialAbility(35, 0);
|
|
eq.stop_timer("animation");
|
|
elseif (e.signal == 2) then
|
|
eq.start(77); -- start the grid (one way depop)
|
|
end
|
|
end
|
|
|
|
function ArenaMobs_Spawn(e)
|
|
eq.set_timer("animation", 10 * 1000);
|
|
end
|
|
|
|
function ArenaMobs_Timer(e)
|
|
if (e.timer == "animation") then
|
|
e.self:DoAnim(eq.ChooseRandom(1,2,5,6,8,84,85));
|
|
elseif(e.timer=="OOBcheck") then
|
|
eq.stop_timer("OOBcheck");
|
|
if (e.self:GetX() > 96 or e.self:GetX() < -120 or e.self:GetY() < -190 or e.self:GetY() > 190) then
|
|
e.self:CastSpell(3791,e.self:GetID()); -- Spell: Ocean's Cleansing
|
|
e.self:GMMove(8, 0, -436, 254);
|
|
e.self:WipeHateList();
|
|
else
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
end
|
|
end
|
|
end
|
|
|
|
function KillableArena_Combat(e)
|
|
if e.joined then
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
else
|
|
eq.stop_timer("OOBcheck");
|
|
end
|
|
end
|
|
|
|
|
|
function KillableArena_Timer(e)
|
|
if(e.timer=="OOBcheck") then
|
|
eq.stop_timer("OOBcheck");
|
|
if (e.self:GetX() > 96 or e.self:GetX() < -120 or e.self:GetY() < -190 or e.self:GetY() > 190) then
|
|
e.self:CastSpell(3791,e.self:GetID()); -- Spell: Ocean's Cleansing
|
|
e.self:GMMove(8, 0, -436, 254);
|
|
e.self:WipeHateList();
|
|
else
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
end
|
|
end
|
|
end
|
|
|
|
function IxtHsek_Timer(e)
|
|
if(e.timer=="OOBcheck") then
|
|
eq.stop_timer("OOBcheck");
|
|
if (e.self:GetX() > 96 or e.self:GetX() < -120 or e.self:GetY() < -190 or e.self:GetY() > 190) then
|
|
e.self:CastSpell(3791,e.self:GetID()); -- Spell: Ocean's Cleansing
|
|
e.self:GMMove(8, 0, -436, 254);
|
|
e.self:WipeHateList();
|
|
else
|
|
eq.set_timer("OOBcheck", 6 * 1000);
|
|
end
|
|
elseif(e.timer=="depop") then
|
|
eq.depop(297211); -- hsek
|
|
eq.depop(297034); -- champ
|
|
eq.depop_all(297038); -- arena mob
|
|
eq.depop_all(297036); -- arena mob
|
|
eq.depop_all(297033); -- arena mob
|
|
eq.depop_all(297035); -- arena mob
|
|
eq.depop_all(297037); -- arena mob
|
|
eq.depop_all(297040); -- arena mob
|
|
eq.signal(297001,1); --signal champ_event to begin timer to respawn event
|
|
end
|
|
end
|
|
|
|
function IxtHsek_Spawn(e)
|
|
eq.set_timer("depop", 1800 * 1000);
|
|
e.self:MoveTo(25, 0, -437, 195,true);
|
|
end
|
|
|
|
function IxtHsek_Death(e)
|
|
--ixt death controls respawn of event
|
|
eq.depop_with_timer(297001); -- event is successful, initiate respawn
|
|
eq.unique_spawn(297041,0,0,-108, -30, -439,385); --arena (297041) will turn on arena spawn condition in 1 hour
|
|
end
|
|
|
|
|
|
function event_encounter_load(e)
|
|
eq.register_npc_event('champ', Event.spawn, 297001, ChampEvent_Spawn);
|
|
eq.register_npc_event('champ', Event.enter, 297001, ChampEvent_Enter);
|
|
eq.register_npc_event('champ', Event.timer, 297001, ChampEvent_Timer);
|
|
eq.register_npc_event('champ', Event.signal, 297001, ChampEvent_Signal);
|
|
|
|
eq.register_npc_event('champ', Event.timer, 297034, MastruqChampion_Timer);
|
|
eq.register_npc_event('champ', Event.combat, 297034, MastruqChampion_Combat);
|
|
eq.register_npc_event('champ', Event.signal, 297034, MastruqChampion_Signal);
|
|
eq.register_npc_event('champ', Event.hp, 297034, MastruqChampion_HP);
|
|
eq.register_npc_event('champ', Event.spawn, 297034, MastruqChampion_Spawn);
|
|
|
|
eq.register_npc_event('champ', Event.hp, 297211, IxtHsek_HP);
|
|
eq.register_npc_event('champ', Event.combat, 297211, IxtHsek_Combat);
|
|
eq.register_npc_event('champ', Event.timer, 297211, IxtHsek_Timer);
|
|
eq.register_npc_event('champ', Event.spawn, 297211, IxtHsek_Spawn);
|
|
eq.register_npc_event('champ', Event.death_complete, 297211, IxtHsek_Death);
|
|
|
|
eq.register_npc_event('champ', Event.combat, 297209, TheRunt_Combat);
|
|
eq.register_npc_event('champ', Event.spawn, 297209, TheRunt_Spawn);
|
|
eq.register_npc_event('champ', Event.timer, 297209, TheRunt_Timer);
|
|
eq.register_npc_event('champ', Event.death_complete, 297209, TheRunt_Death);
|
|
|
|
eq.register_npc_event('champ', Event.spawn, 297038, ArenaMobs_Spawn);
|
|
eq.register_npc_event('champ', Event.timer, 297038, ArenaMobs_Timer);
|
|
eq.register_npc_event('champ', Event.signal, 297038, ArenaMobs_Signal);
|
|
eq.register_npc_event('champ', Event.spawn, 297033, ArenaMobs_Spawn);
|
|
eq.register_npc_event('champ', Event.timer, 297033, ArenaMobs_Timer);
|
|
eq.register_npc_event('champ', Event.signal, 297033, ArenaMobs_Signal);
|
|
eq.register_npc_event('champ', Event.spawn, 297036, ArenaMobs_Spawn);
|
|
eq.register_npc_event('champ', Event.timer, 297036, ArenaMobs_Timer);
|
|
eq.register_npc_event('champ', Event.signal, 297036, ArenaMobs_Signal);
|
|
|
|
eq.register_npc_event('champ', Event.combat, 297038, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.combat, 297033, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.combat, 297036, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.combat, 297035, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.timer, 297035, KillableArena_Timer);
|
|
eq.register_npc_event('champ', Event.combat, 297037, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.timer, 297037, KillableArena_Timer);
|
|
eq.register_npc_event('champ', Event.combat, 297040, KillableArena_Combat);
|
|
eq.register_npc_event('champ', Event.timer, 297040, KillableArena_Timer);
|
|
end
|