WIP maexxna web wrap
This commit is contained in:
@@ -22,7 +22,11 @@
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_WEB_WRAP = 28622,
|
||||
|
||||
SPELL_WEB_WRAP_200 = 28618,
|
||||
SPELL_WEB_WRAP_300 = 28619,
|
||||
SPELL_WEB_WRAP_400 = 28620,
|
||||
SPELL_WEB_WRAP_500 = 28621,
|
||||
SPELL_WEB_SPRAY_10 = 29484,
|
||||
SPELL_WEB_SPRAY_25 = 54125,
|
||||
SPELL_POISON_SHOCK_10 = 28741,
|
||||
@@ -30,7 +34,12 @@ enum Spells
|
||||
SPELL_NECROTIC_POISON_10 = 54121,
|
||||
SPELL_NECROTIC_POISON_25 = 28776,
|
||||
SPELL_FRENZY_10 = 54123,
|
||||
SPELL_FRENZY_25 = 54124
|
||||
SPELL_FRENZY_25 = 54124,
|
||||
SPELL_WEB_WRAP_STUN = 28622, // STUN Triggered by spells
|
||||
SPELL_WEB_WRAP_SCRIPT_EFFECT_10 = 28673, // SCRIPT_EFFECT 0, INIT
|
||||
SPELL_WEB_WRAP_SCRIPT_EFFECT_25 = 54127, // SCRIPT_EFFECT 0, INIT
|
||||
SPELL_SUMMON_SPIDERLINGS_10 = 54130, // DOES NOT EXIST IN WRATH, 29434 1.12
|
||||
SPELL_SUMMON_SPIDERLINGS_25 = 29434, // DOES NOT EXIST, CUSTOM
|
||||
};
|
||||
|
||||
enum Events
|
||||
@@ -53,7 +62,8 @@ enum Emotes
|
||||
enum Misc
|
||||
{
|
||||
NPC_WEB_WRAP = 16486,
|
||||
NPC_MAEXXNA_SPIDERLING = 17055
|
||||
NPC_MAEXXNA_SPIDERLING = 17055,
|
||||
NPC_WEB_WRAP_TRIGGER = 15384
|
||||
};
|
||||
|
||||
const Position PosWrap[3] =
|
||||
@@ -112,12 +122,13 @@ public:
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
me->SetInCombatWithZone();
|
||||
events.ScheduleEvent(EVENT_WEB_WRAP, 20s);
|
||||
events.ScheduleEvent(EVENT_WEB_SPRAY, 40s);
|
||||
events.ScheduleEvent(EVENT_POISON_SHOCK, 10s);
|
||||
events.ScheduleEvent(EVENT_NECROTIC_POISON, 5s);
|
||||
events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s);
|
||||
events.ScheduleEvent(EVENT_SUMMON_SPIDERLINGS, 30s);
|
||||
events.ScheduleEvent(EVENT_WEB_WRAP, 5s); // 20-20, repeat 40-40
|
||||
//events.ScheduleEvent(EVENT_WEB_WRAP, 20s); // 20-20, repeat 40-40
|
||||
//events.ScheduleEvent(EVENT_WEB_SPRAY, 40s); // 40-40, repeat 40-40
|
||||
//events.ScheduleEvent(EVENT_POISON_SHOCK, 10s); // 10-20, repeat 10-20
|
||||
//events.ScheduleEvent(EVENT_NECROTIC_POISON, 5s); // 20-30, repeat 10-30
|
||||
//events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s);
|
||||
//events.ScheduleEvent(EVENT_SUMMON_SPIDERLINGS, 30s); // 30, repeat 40-40
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_MAEXXNA_GATE)))
|
||||
@@ -199,17 +210,51 @@ public:
|
||||
break;
|
||||
case EVENT_WEB_WRAP:
|
||||
Talk(EMOTE_WEB_WRAP);
|
||||
for (uint8 i = 0; i < RAID_MODE(1, 2); ++i)
|
||||
//for (uint8 i = 0; i < RAID_MODE(1, 2); ++i)
|
||||
for (uint8 i = 0; i < 1; ++i)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0, true, true, -SPELL_WEB_WRAP))
|
||||
// TODO: this can select the same target twice
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0, true, true, -SPELL_WEB_WRAP_STUN))
|
||||
{
|
||||
target->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25));
|
||||
uint8 pos = urand(0, 2);
|
||||
if (Creature* wrap = me->SummonCreature(NPC_WEB_WRAP, PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
|
||||
std::list<Creature*> triggers;
|
||||
me->GetCreatureListWithEntryInGrid(triggers, NPC_WEB_WRAP_TRIGGER, 150.0f);
|
||||
if (!triggers.empty())
|
||||
{
|
||||
wrap->AI()->SetGUID(target->GetGUID());
|
||||
target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
|
||||
std::list<Creature*>::iterator itr = triggers.begin();
|
||||
std::advance(itr, urand(0, triggers.size() - 1));
|
||||
|
||||
Creature* triggerNPC;
|
||||
triggerNPC = *itr;
|
||||
|
||||
triggers.erase(std::remove(triggers.begin(), triggers.end(), triggerNPC), triggers.end());
|
||||
|
||||
|
||||
float dist = me->GetDistance(target);
|
||||
uint32 spellId = SPELL_WEB_WRAP_500;
|
||||
if (dist <= 20.f)
|
||||
spellId = SPELL_WEB_WRAP_200;
|
||||
else if (dist <= 30.f)
|
||||
spellId = SPELL_WEB_WRAP_300;
|
||||
else if (dist <= 40.f)
|
||||
spellId = SPELL_WEB_WRAP_400;
|
||||
//triggerNPC->CastCustomSpell(SPELL_WEB_WRAP_200, SPELLVALUE_AURA_DURATION, 1000, target, true);
|
||||
//triggerNPC->CastSpell(target, spellId, true);
|
||||
triggerNPC->CastSpell(target, 28620, true); // 4 seconds
|
||||
|
||||
|
||||
//triggerNPC->AI()->SetGUID(target->GetGUID());
|
||||
|
||||
//target->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25));
|
||||
//uint8 pos = urand(0, 2);
|
||||
//if (Creature* wrap = me->SummonCreature(NPC_WEB_WRAP, PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
|
||||
//{
|
||||
// wrap->AI()->SetGUID(target->GetGUID());
|
||||
// target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
events.Repeat(40s);
|
||||
@@ -220,6 +265,44 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class boss_maexxna_webwrap_trigger : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_maexxna_webwrap_trigger() : CreatureScript("boss_maexxna_webwrap_trigger") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const override
|
||||
{
|
||||
return GetNaxxramasAI<boss_maexxna_webwrap_triggerAI>(pCreature);
|
||||
}
|
||||
|
||||
struct boss_maexxna_webwrap_triggerAI : public NullCreatureAI
|
||||
{
|
||||
explicit boss_maexxna_webwrap_triggerAI(Creature* c) : NullCreatureAI(c) {}
|
||||
|
||||
ObjectGuid victimGUID;
|
||||
|
||||
void SetGUID(ObjectGuid guid, int32 /*param*/) override
|
||||
{
|
||||
victimGUID = guid;
|
||||
|
||||
if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
|
||||
{
|
||||
float dist = me->GetDistance(victim);
|
||||
uint32 duration = 4000;
|
||||
if (dist <= 20.f)
|
||||
duration = 1000;
|
||||
else if (dist <= 30.f)
|
||||
duration = 2000;
|
||||
else if (dist <= 40.f)
|
||||
duration = 3000;
|
||||
me->CastCustomSpell(SPELL_WEB_WRAP_200, SPELLVALUE_AURA_DURATION, duration, victim, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
class boss_maexxna_webwrap : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -265,5 +348,6 @@ public:
|
||||
void AddSC_boss_maexxna()
|
||||
{
|
||||
new boss_maexxna();
|
||||
new boss_maexxna_webwrap();
|
||||
//new boss_maexxna_webwrap();
|
||||
new boss_maexxna_webwrap_trigger();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user