本文整理汇总了C++中SummonList::erase方法的典型用法代码示例。如果您正苦于以下问题:C++ SummonList::erase方法的具体用法?C++ SummonList::erase怎么用?C++ SummonList::erase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SummonList
的用法示例。
在下文中一共展示了SummonList::erase方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateAI
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
{
case EVENT_FREEZING_GROUND:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
me->CastSpell(target, SPELL_FREEZING_GROUND, false);
events.RepeatEvent(20000);
break;
case EVENT_FROZEN_ORB_STALKER:
me->CastCustomSpell(SPELL_FROZEN_ORB, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me, false);
events.RepeatEvent(35000);
events.ScheduleEvent(EVENT_CHECK_SUMMONS, 10000);
break;
case EVENT_CHECK_SUMMONS:
for (SummonList::iterator i = summons.begin(); i != summons.end();)
{
if (Creature* cr = ObjectAccessor::GetCreature(*me, *i))
{
if (!cr->IsAlive())
summons.erase(i++);
else
++i;
}
else
summons.erase(i++);
}
if (summons.empty())
{
events.PopEvent();
me->CastSpell(me, SPELL_WHITEOUT, false);
break;
}
events.RepeatEvent(2000);
break;
}
DoMeleeAttackIfReady();
}
示例2: UpdateAI
void UpdateAI(uint32 diff)
{
if (!me->isActiveObject())
return;
UpdateVictim();
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (uint32 evId = events.GetEvent())
{
case 0:
break;
case EVENT_CHECK_PLAYER:
if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID))
if (p->GetExactDist(me) <= 50.0f)
{
events.RepeatEvent(5000);
break;
}
events.PopEvent();
me->setActive(false);
EnterEvadeMode();
return;
case EVENT_SUMMON_SOLDIERS:
for (uint8 i=0; i<SUNWELL_DEFENDER_NUM; ++i)
me->SummonCreature(NPC_SUNWELL_DEFENDER, SunwellDefenderPos[i], TEMPSUMMON_TIMED_DESPAWN, 33000+(i/5)*5000);
events.PopEvent();
break;
case EVENT_TALK_INTRO_0:
case EVENT_TALK_INTRO_1:
case EVENT_TALK_INTRO_2:
case EVENT_TALK_INTRO_3:
Talk(SAY_INTRO_0 + (evId-EVENT_TALK_INTRO_0));
events.PopEvent();
break;
case EVENT_SALUTE:
me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
if (Creature* c = ObjectAccessor::GetCreature(*me, *itr))
c->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
events.PopEvent();
break;
case EVENT_SOLDIERS_RUN_AWAY:
{
uint8 count = 0;
for (SummonList::iterator itr = summons.begin(); itr != summons.end();)
{
++count;
if (Creature* c = ObjectAccessor::GetCreature(*me, *itr))
{
c->SetWalk(false);
c->GetMotionMaster()->MovePoint(0, 11863.35f, -7073.44f, 27.40f);
}
SummonList::iterator itr2 = itr++;
summons.erase(itr2);
if (count >= 5)
{
if (!summons.empty())
{
events.RepeatEvent(5000);
return;
}
else
{
events.PopEvent();
return;
}
}
}
}
events.PopEvent();
break;
case EVENT_GO_FIGHTPOINT:
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(0, 11779.30f, -7065.43f, 24.92f);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
events.PopEvent();
break;
case EVENT_TALK_SPAWN_0:
case EVENT_TALK_SPAWN_1:
Talk(SAY_SPAWN_0 + (evId-EVENT_TALK_SPAWN_0));
events.PopEvent();
break;
case EVENT_SUMMON_MORLEN:
if (Creature* c = me->SummonCreature(NPC_MORLEN_COLDGRIP, 11766.70f, -7050.57f, 25.17f, 5.56f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000))
morlenGUID = c->GetGUID();
events.PopEvent();
break;
case EVENT_TALK_MORLEN_0:
case EVENT_TALK_MORLEN_1:
if (Creature* c = ObjectAccessor::GetCreature(*me, morlenGUID))
c->AI()->Talk(SAY_MORLEN_0 + (evId-EVENT_TALK_MORLEN_0));
events.PopEvent();
break;
case EVENT_SPAWN_WAVE_1:
case EVENT_SPAWN_WAVE_2:
//.........这里部分代码省略.........