use event instead of update(diff)

This commit is contained in:
Jelle Meeus
2024-04-28 19:09:04 +02:00
parent ee2aff0618
commit 4062391ef6

View File

@@ -46,7 +46,8 @@ enum Events
EVENT_NECROTIC_POISON = 3,
EVENT_WEB_WRAP = 4,
EVENT_HEALTH_CHECK = 5,
EVENT_SUMMON_SPIDERLINGS = 6
EVENT_SUMMON_SPIDERLINGS = 6,
EVENT_WEB_WRAP_APPLY_STUN = 7
};
enum Emotes
@@ -113,7 +114,7 @@ public:
EventMap events;
SummonList summons;
std::vector<std::pair<uint32, ObjectGuid>> wraps;
GuidList wraps;
bool IsInRoom()
{
@@ -221,32 +222,9 @@ public:
target->KnockbackFrom(randomPos.GetPositionX(), randomPos.GetPositionY(), -horizontalSpeed, verticalSpeed);
me->CastSpell(target, SPELL_WEB_WRAP_PACIFY_5, true); // pacify silence for 5 seconds
wraps.push_back(std::make_pair(uint32(2000), target->GetGUID()));
}
}
void UpdateWraps(uint32 diff)
{
bool wdone = false;
for (auto& p : wraps)
{
if (p.first < diff)
{
if (Player* player = ObjectAccessor::GetPlayer(*me, p.second))
{
player->CastSpell(player, SPELL_WEB_WRAP_STUN, true);
}
wdone = true;
}
else
{
p.first -= diff;
}
}
if (wdone)
{
wraps.clear();
wraps.push_back(target->GetGUID());
}
events.ScheduleEvent(EVENT_WEB_WRAP_APPLY_STUN, 2s);
}
void UpdateAI(uint32 diff) override
@@ -257,8 +235,6 @@ public:
if (!UpdateVictim())
return;
UpdateWraps(diff);
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -295,10 +271,23 @@ public:
events.Repeat(1s);
break;
case EVENT_WEB_WRAP:
Talk(EMOTE_WEB_WRAP);
DoCastWebWrap();
events.Repeat(40s);
break;
case EVENT_WEB_WRAP_APPLY_STUN:
{
for (auto& p : wraps)
{
if (Player* player = ObjectAccessor::GetPlayer(*me, p))
{
player->CastSpell(player, SPELL_WEB_WRAP_STUN, true);
}
}
wraps.clear();
break;
}
}
DoMeleeAttackIfReady();
}