mirror of
https://github.com/ProjectEQ/projecteqquests
synced 2026-08-12 00:26:10 -04:00
459 lines
13 KiB
Lua
459 lines
13 KiB
Lua
--[[
|
|
-- Ancient Cragbeast Matriarch
|
|
-- NPCs involved:
|
|
-- #Ancient_Cragbeast_Matriarch (297056)
|
|
-- #Bearer_of_Absorption (297173)
|
|
-- #Bearer_of_Anger (297055)
|
|
-- #Bearer_of_Haste (297190)
|
|
-- #Bearer_of_Intensification (297051)
|
|
-- #Bearer_of_Mending (297054)
|
|
-- #Bearer_of_Nascency (297050)
|
|
-- #Bearer_of_Projection (297208)
|
|
-- #Bearer_of_Quickening (297142)
|
|
-- #Bearer_of_Rage (297053)
|
|
-- #Bearer_of_Reflection (297052)
|
|
-- #Bearer_of_Resistance (297141)
|
|
-- #Bearer_of_Shielding (297191)
|
|
-- http://everquest.allakhazam.com/db/quest.html?quest=7691
|
|
--]]
|
|
|
|
local ae = false
|
|
local adds = false
|
|
local combat = false
|
|
|
|
function ACMSpawn(e)
|
|
local entity_list = eq.get_entity_list()
|
|
ae = false
|
|
adds = false
|
|
combat = false
|
|
-- due to the way spawn conditions work, if on boot up the condition is
|
|
-- enabled the mob spawn order is not guaranteed
|
|
-- This isn't as clean as I would like, but it's better than checking them all on a timer
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297173) then
|
|
AbsorptionEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297055) then
|
|
AngerEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297190) then
|
|
HasteEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297051) then
|
|
IntensificationEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297054) then
|
|
MendingEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297050) then
|
|
NascencyEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297208) then
|
|
ProjectionEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297142) then
|
|
QuickeningEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297053) then
|
|
RageEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297052) then
|
|
ReflectionEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297141) then
|
|
ResistanceEnable(e.self)
|
|
end
|
|
if entity_list:IsMobSpawnedByNpcTypeID(297191) then
|
|
ShieldingEnable(e.self)
|
|
end
|
|
eq.spawn_condition("txevu", 0, 3, 1) -- bearers and Mastruqs
|
|
end
|
|
|
|
function ACMDeath(e)
|
|
eq.spawn_condition("txevu", 0, 3, 0) -- bearers and Mastruqs
|
|
ae = false
|
|
adds = false
|
|
combat = false
|
|
end
|
|
|
|
function ACMTimer(e)
|
|
if e.timer == "hatchling" then
|
|
x = e.self:GetX()
|
|
y = e.self:GetY()
|
|
z = e.self:GetZ()
|
|
h = e.self:GetHeading()
|
|
eq.zone_emote(MT.Yellow, "In search of food, cragbeast hatchlings scurry out from beneath the Ancient Cragbeast Matriarch")
|
|
eq.spawn2(297210, 0, 0, x, y + 5, z, h) -- a_cragbeast_hatchling
|
|
eq.spawn2(297210, 0, 0, x + 5, y, z, h) -- a_cragbeast_hatchling
|
|
eq.spawn2(297210, 0, 0, x - 5, y, z, h) -- a_cragbeast_hatchling
|
|
elseif e.timer == "ae" then
|
|
eq.stop_timer(e.timer)
|
|
local target = e.self:GetTarget()
|
|
if target.valid then
|
|
e.self:CastSpell(1239, target:GetID()) -- Devouring Conflagration
|
|
end
|
|
time = math.random(5, 60) * 1000
|
|
eq.set_timer(e.timer, time)
|
|
end
|
|
end
|
|
|
|
function ACMCombat(e)
|
|
if e.joined then
|
|
combat = true
|
|
if adds then
|
|
eq.set_timer("hatchling", 35000)
|
|
end
|
|
if ae then
|
|
eq.set_timer("ae", math.random(5, 60) * 1000)
|
|
end
|
|
else
|
|
combat = false
|
|
eq.stop_timer("hatchling")
|
|
eq.stop_timer("ae")
|
|
end
|
|
end
|
|
|
|
-- This is less than ideal IMO, but since we can't keep around a pointer that
|
|
-- gets cleared in every case (#repop) we gotta rely on signals
|
|
function ACMSignal(e)
|
|
if e.signal == 297173 then
|
|
AbsorptionEnable(e.self)
|
|
elseif e.signal == -297173 then
|
|
AbsorptionDisable(e.self)
|
|
elseif e.signal == 297055 then
|
|
AngerEnable(e.self)
|
|
elseif e.signal == -297055 then
|
|
AngerDisable(e.self)
|
|
elseif e.signal == 297190 then
|
|
HasteEnable(e.self)
|
|
elseif e.signal == -297190 then
|
|
HasteDisable(e.self)
|
|
elseif e.signal == 297051 then
|
|
IntensificationEnable(e.self)
|
|
elseif e.signal == -297051 then
|
|
IntensificationDisable(e.self)
|
|
elseif e.signal == 297054 then
|
|
MendingEnable(e.self)
|
|
elseif e.signal == -297054 then
|
|
MendingDisable(e.self)
|
|
elseif e.signal == 297050 then
|
|
NascencyEnable(e.self)
|
|
elseif e.signal == -297050 then
|
|
NascencyDisable(e.self)
|
|
elseif e.signal == 297208 then
|
|
ProjectionEnable(e.self)
|
|
elseif e.signal == -297208 then
|
|
ProjectionDisable(e.self)
|
|
elseif e.signal == 297142 then
|
|
QuickeningEnable(e.self)
|
|
elseif e.signal == -297142 then
|
|
QuickeningDisable(e.self)
|
|
elseif e.signal == 297053 then
|
|
RageEnable(e.self)
|
|
elseif e.signal == -297053 then
|
|
RageDisable(e.self)
|
|
elseif e.signal == 297052 then
|
|
ReflectionEnable(e.self)
|
|
elseif e.signal == -297052 then
|
|
ReflectionDisable(e.self)
|
|
elseif e.signal == 297141 then
|
|
ResistanceEnable(e.self)
|
|
elseif e.signal == -297141 then
|
|
ResistanceDisable(e.self)
|
|
elseif e.signal == 297191 then
|
|
ShieldingEnable(e.self)
|
|
elseif e.signal == -297191 then
|
|
ShieldingDisable(e.self)
|
|
end
|
|
end
|
|
|
|
function AbsorptionEnable(acm)
|
|
acm:ModSkillDmgTaken(0, -75) -- 1h blunt
|
|
acm:ModSkillDmgTaken(1, -75) -- 1h slashing
|
|
acm:ModSkillDmgTaken(2, -75) -- 2h blunt
|
|
acm:ModSkillDmgTaken(3, -75) -- 2h slashing
|
|
acm:ModSkillDmgTaken(7, -75) -- archery
|
|
acm:ModSkillDmgTaken(8, -75) -- backstab
|
|
acm:ModSkillDmgTaken(10, -75) -- bash
|
|
acm:ModSkillDmgTaken(21, -75) -- dragon punch
|
|
acm:ModSkillDmgTaken(23, -75) -- eagle strike
|
|
acm:ModSkillDmgTaken(26, -75) -- flying kick
|
|
acm:ModSkillDmgTaken(28, -75) -- hand to hand
|
|
acm:ModSkillDmgTaken(30, -75) -- kick
|
|
acm:ModSkillDmgTaken(36, -75) -- piercing
|
|
acm:ModSkillDmgTaken(38, -75) -- round kick
|
|
acm:ModSkillDmgTaken(52, -75) -- tiger claw
|
|
acm:ModSkillDmgTaken(74, -75) -- frenzy
|
|
--acm:ModSkillDmgTaken(77, -75) -- 2h piercing
|
|
end
|
|
|
|
function AbsorptionDisable(acm)
|
|
acm:ModSkillDmgTaken(0, 0) -- 1h blunt
|
|
acm:ModSkillDmgTaken(1, 0) -- 1h slashing
|
|
acm:ModSkillDmgTaken(2, 0) -- 2h blunt
|
|
acm:ModSkillDmgTaken(3, 0) -- 2h slashing
|
|
acm:ModSkillDmgTaken(7, 0) -- archery
|
|
acm:ModSkillDmgTaken(8, 0) -- backstab
|
|
acm:ModSkillDmgTaken(10, 0) -- bash
|
|
acm:ModSkillDmgTaken(21, 0) -- dragon punch
|
|
acm:ModSkillDmgTaken(23, 0) -- eagle strike
|
|
acm:ModSkillDmgTaken(26, 0) -- flying kick
|
|
acm:ModSkillDmgTaken(28, 0) -- hand to hand
|
|
acm:ModSkillDmgTaken(30, 0) -- kick
|
|
acm:ModSkillDmgTaken(36, 0) -- piercing
|
|
acm:ModSkillDmgTaken(38, 0) -- round kick
|
|
acm:ModSkillDmgTaken(52, 0) -- tiger claw
|
|
acm:ModSkillDmgTaken(74, 0) -- frenzy
|
|
--acm:ModSkillDmgTaken(77, 0) -- 2h piercing
|
|
end
|
|
|
|
function AngerEnable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.rampage, 1)
|
|
acm:SetSpecialAbilityParam(SpecialAbility.rampage, 0, 27)
|
|
end
|
|
|
|
function AngerDisable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.rampage, 0)
|
|
end
|
|
|
|
function HasteEnable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.flurry, 1)
|
|
acm:SetSpecialAbilityParam(SpecialAbility.flurry, 0, 50)
|
|
end
|
|
|
|
function HasteDisable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.flurry, 0)
|
|
end
|
|
|
|
function IntensificationEnable(acm)
|
|
acm:ModifyNPCStat("min_hit", "1150")
|
|
acm:ModifyNPCStat("max_hit", "4000")
|
|
end
|
|
|
|
function IntensificationDisable(acm)
|
|
acm:ModifyNPCStat("min_hit", "850")
|
|
acm:ModifyNPCStat("max_hit", "2750")
|
|
end
|
|
|
|
function MendingEnable(acm)
|
|
acm:ModifyNPCStat("hp_regen", "6000")
|
|
end
|
|
|
|
function MendingDisable(acm)
|
|
acm:ModifyNPCStat("hp_regen", "100") -- not parsed
|
|
end
|
|
|
|
function NascencyEnable(acm)
|
|
adds = true
|
|
if combat then
|
|
eq.set_timer("hatchling", 35000, acm)
|
|
end
|
|
end
|
|
|
|
function NascencyDisable(acm)
|
|
adds = false
|
|
eq.stop_timer("hatchling", acm)
|
|
end
|
|
|
|
function ProjectionEnable(acm)
|
|
ae = true
|
|
if combat then
|
|
time = math.random(5, 60) * 1000
|
|
eq.set_timer("ae", time, acm)
|
|
end
|
|
end
|
|
|
|
function ProjectionDisable(acm)
|
|
ae = false
|
|
eq.stop_timer("ae", acm)
|
|
end
|
|
|
|
function QuickeningEnable(acm)
|
|
acm:ModifyNPCStat("attack_delay", "12")
|
|
end
|
|
|
|
function QuickeningDisable(acm)
|
|
acm:ModifyNPCStat("attack_delay", "17")
|
|
end
|
|
|
|
function RageEnable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.area_rampage, 1)
|
|
acm:SetSpecialAbilityParam(SpecialAbility.area_rampage, 0, 17)
|
|
end
|
|
|
|
function RageDisable(acm)
|
|
acm:SetSpecialAbility(SpecialAbility.area_rampage, 0)
|
|
end
|
|
|
|
function ReflectionEnable(acm)
|
|
acm:AddAISpell(0, 1248, 1024, -1, 30, -1) -- Spiritual Echo, in combat buff
|
|
end
|
|
|
|
function ReflectionDisable(acm)
|
|
acm:RemoveAISpell(1248) -- Spiritual Echo
|
|
end
|
|
|
|
function ResistanceEnable(acm)
|
|
-- Need to parse these
|
|
acm:ModifyNPCStat("mr", "236")
|
|
acm:ModifyNPCStat("fr", "236")
|
|
acm:ModifyNPCStat("cr", "236")
|
|
acm:ModifyNPCStat("pr", "236")
|
|
acm:ModifyNPCStat("dr", "236")
|
|
end
|
|
|
|
function ResistanceDisable(acm)
|
|
-- Need to parse these
|
|
acm:ModifyNPCStat("mr", "136")
|
|
acm:ModifyNPCStat("fr", "136")
|
|
acm:ModifyNPCStat("cr", "136")
|
|
acm:ModifyNPCStat("pr", "136")
|
|
acm:ModifyNPCStat("dr", "136")
|
|
end
|
|
|
|
function ShieldingEnable(acm)
|
|
acm:AddAISpell(0, 1249, 1024, -1, 30, -1) -- Bristling Armament, in combat buff
|
|
end
|
|
|
|
function ShieldingDisable(acm)
|
|
acm:RemoveAISpell(1249) -- Bristling Armament
|
|
end
|
|
|
|
function AbsorptionSpawn(e)
|
|
eq.signal(297056, 297173)
|
|
end
|
|
|
|
function AbsorptionDeath(e)
|
|
eq.signal(297056, -297173)
|
|
end
|
|
|
|
function AngerSpawn(e)
|
|
eq.signal(297056, 297055)
|
|
end
|
|
|
|
function AngerDeath(e)
|
|
eq.signal(297056, -297055)
|
|
end
|
|
|
|
function HasteSpawn(e)
|
|
eq.signal(297056, 297190)
|
|
end
|
|
|
|
function HasteDeath(e)
|
|
eq.signal(297056, -297190)
|
|
end
|
|
|
|
function IntensificationSpawn(e)
|
|
eq.signal(297056, 297051)
|
|
end
|
|
|
|
function IntensificationDeath(e)
|
|
eq.signal(297056, -297051)
|
|
end
|
|
|
|
function MendingSpawn(e)
|
|
eq.signal(297056, 297054)
|
|
end
|
|
|
|
function MendingDeath(e)
|
|
eq.signal(297056, -297054)
|
|
end
|
|
|
|
function NascencySpawn(e)
|
|
eq.signal(297056, 297050)
|
|
end
|
|
|
|
function NascencyDeath(e)
|
|
eq.signal(297056, -297050)
|
|
end
|
|
|
|
function ProjectionSpawn(e)
|
|
eq.signal(297056, 297208)
|
|
end
|
|
|
|
function ProjectionDeath(e)
|
|
eq.signal(297056, -297208)
|
|
end
|
|
|
|
function QuickeningSpawn(e)
|
|
eq.signal(297056, 297142)
|
|
end
|
|
|
|
function QuickeningDeath(e)
|
|
eq.signal(297056, -297142)
|
|
end
|
|
|
|
function RageSpawn(e)
|
|
eq.signal(297056, 297053)
|
|
end
|
|
|
|
function RageDeath(e)
|
|
eq.signal(297056, -297053)
|
|
end
|
|
|
|
function ReflectionSpawn(e)
|
|
eq.signal(297056, 297052)
|
|
end
|
|
|
|
function ReflectionDeath(e)
|
|
eq.signal(297056, -297052)
|
|
end
|
|
|
|
function ResistanceSpawn(e)
|
|
eq.signal(297056, 297141)
|
|
end
|
|
|
|
function ResistanceDeath(e)
|
|
eq.signal(297056, -297141)
|
|
end
|
|
|
|
function ShieldingSpawn(e)
|
|
eq.signal(297056, 297191)
|
|
end
|
|
|
|
function ShieldingDeath(e)
|
|
eq.signal(297056, -297191)
|
|
end
|
|
|
|
function event_encounter_load(e)
|
|
eq.register_npc_event("acm", Event.spawn, 297056, ACMSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297056, ACMDeath)
|
|
eq.register_npc_event("acm", Event.timer, 297056, ACMTimer)
|
|
eq.register_npc_event("acm", Event.combat, 297056, ACMCombat)
|
|
eq.register_npc_event("acm", Event.signal, 297056, ACMSignal)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297173, AbsorptionSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297173, AbsorptionDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297055, AngerSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297055, AngerDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297190, HasteSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297190, HasteDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297051, IntensificationSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297051, IntensificationDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297054, MendingSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297054, MendingDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297050, NascencySpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297050, NascencyDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297208, ProjectionSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297208, ProjectionDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297142, QuickeningSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297142, QuickeningDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297053, RageSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297053, RageDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297052, ReflectionSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297052, ReflectionDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297141, ResistanceSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297141, ResistanceDeath)
|
|
|
|
eq.register_npc_event("acm", Event.spawn, 297191, ShieldingSpawn)
|
|
eq.register_npc_event("acm", Event.death_complete, 297191, ShieldingDeath)
|
|
end
|