本文整理汇总了C++中CAST_AI函数的典型用法代码示例。如果您正苦于以下问题:C++ CAST_AI函数的具体用法?C++ CAST_AI怎么用?C++ CAST_AI使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CAST_AI函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoCast
void boss_attumen::boss_attumenAI::UpdateAI(const uint32 diff)
{
if (ResetTimer)
{
if (ResetTimer <= diff)
{
ResetTimer = 0;
Unit* pMidnight = Unit::GetUnit(*me, Midnight);
if (pMidnight)
{
pMidnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pMidnight->SetVisible(true);
}
Midnight = 0;
me->SetVisible(false);
me->Kill(me);
} else ResetTimer -= diff;
}
//Return since we have no target
if (!UpdateVictim())
return;
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))
return;
if (CleaveTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SHADOWCLEAVE);
CleaveTimer = urand(10000, 15000);
} else CleaveTimer -= diff;
if (CurseTimer <= diff)
{
DoCast(me->getVictim(), SPELL_INTANGIBLE_PRESENCE);
CurseTimer = 30000;
} else CurseTimer -= diff;
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_RANDOM1, SAY_RANDOM2), me);
RandomYellTimer = urand(30000, 60000);
} else RandomYellTimer -= diff;
if (me->GetUInt32Value(UNIT_FIELD_DISPLAYID) == MOUNTED_DISPLAYID)
{
if (ChargeTimer <= diff)
{
Unit* target = NULL;
std::list<HostileReference*> t_list = me->getThreatManager().getThreatList();
std::vector<Unit*> target_list;
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false))
target_list.push_back(target);
target = NULL;
}
if (!target_list.empty())
target = *(target_list.begin()+rand()%target_list.size());
DoCast(target, SPELL_BERSERKER_CHARGE);
ChargeTimer = 20000;
} else ChargeTimer -= diff;
}
else
{
if (HealthBelowPct(25))
{
Creature* pMidnight = Unit::GetCreature(*me, Midnight);
if (pMidnight && pMidnight->GetTypeId() == TYPEID_UNIT)
{
CAST_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me);
me->SetHealth(pMidnight->GetHealth());
DoResetThreat();
}
}
}
DoMeleeAttackIfReady();
}
示例2: WaypointReached
//.........这里部分代码省略.........
SetRun(false);
break;
case 60:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
//make horsie run off
SetEscortPaused(true);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
pInstance->SetData(TYPE_THRALL_PART2, DONE);
SetRun();
break;
case 64:
SetRun(false);
break;
case 68:
me->SummonCreature(MOB_ENTRY_BARN_PROTECTOR, 2500.22f, 692.60f, 55.50f, 2.84f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_BARN_LOOKOUT, 2500.13f, 696.55f, 55.51f, 3.38f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_BARN_GUARDSMAN, 2500.55f, 693.64f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_BARN_GUARDSMAN, 2500.94f, 695.81f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
break;
case 71:
SetRun();
break;
case 81:
SetRun(false);
break;
case 83:
me->SummonCreature(MOB_ENTRY_CHURCH_PROTECTOR, 2627.33f, 646.82f, 56.03f, 4.28f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
me->SummonCreature(MOB_ENTRY_CHURCH_LOOKOUT, 2624.14f, 648.03f, 56.03f, 4.50f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
me->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN, 2625.32f, 649.60f, 56.03f, 4.38f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
me->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN, 2627.22f, 649.00f, 56.03f, 4.34f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
break;
case 84:
DoScriptText(SAY_TH_CHURCH_END, me);
SetRun();
break;
case 91:
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
SetRun(false);
break;
case 93:
me->SummonCreature(MOB_ENTRY_INN_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_INN_LOOKOUT, 2648.96f, 662.59f, 61.93f, 0.79f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_INN_GUARDSMAN, 2657.36f, 662.34f, 61.93f, 2.68f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
me->SummonCreature(MOB_ENTRY_INN_GUARDSMAN, 2656.39f, 659.77f, 61.93f, 2.61f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
break;
case 94:
if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA))
{
if (Unit* Taretha = Unit::GetUnit((*me), TarethaGUID))
DoScriptText(SAY_TA_ESCAPED, Taretha, me);
}
break;
case 95:
DoScriptText(SAY_TH_MEET_TARETHA, me);
pInstance->SetData(TYPE_THRALL_PART3, DONE);
SetEscortPaused(true);
break;
case 96:
DoScriptText(SAY_TH_EPOCH_WONDER, me);
break;
case 97:
DoScriptText(SAY_TH_EPOCH_KILL_TARETHA, me);
SetRun();
break;
case 98:
//trigger epoch Yell("Thrall! Come outside and face your fate! ....")
//from here, thrall should not never be allowed to move to point 106 which he currently does.
break;
case 106:
{
//trigger taretha to run down outside
if (Creature* Taretha = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TARETHA)))
{
if (Player* pPlayer = GetPlayerForEscort())
CAST_AI(npc_escortAI, (Taretha->AI()))->Start(false, true, pPlayer->GetGUID());
}
//kill credit Creature for quest
Map* pMap = me->GetMap();
Map::PlayerList const& players = pMap->GetPlayers();
if (!players.isEmpty() && pMap->IsDungeon())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
if (Player* pPlayer = itr->getSource())
pPlayer->KilledMonsterCredit(20156, 0);
}
}
//alot will happen here, thrall and taretha talk, erozion appear at spot to explain
me->SummonCreature(EROZION_ENTRY, 2646.47f, 680.416f, 55.38f, 4.16f, TEMPSUMMON_TIMED_DESPAWN, 120000);
}
break;
case 108:
//last waypoint, just set Thrall invisible, respawn is turned off
me->SetVisible(false);
break;
}
}
示例3: JustDied
void JustDied(Unit* killer)
{
if (Creature* herald = me->FindNearestCreature(ENTRY_VAZRUDEN_HERALD, 150))
CAST_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(killer);
}
示例4: HandleEffectRemove
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTarget()->IsAIEnabled)
CAST_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_REMOVED);
}
示例5: UpdateAI
//.........这里部分代码省略.........
//ChaosBlast_Timer
if (!me->getVictim())
return;
if (me->GetDistance(me->getVictim()) < 30)
me->StopMoving();
if (ChaosBlast_Timer <= diff)
{
// will cast only when in range of spell
if (me->GetDistance(me->getVictim()) < 30)
{
//DoCast(me->getVictim(), SPELL_CHAOS_BLAST, true);
int damage = 100;
me->CastCustomSpell(me->getVictim(), SPELL_CHAOS_BLAST, &damage, NULL, NULL, false, NULL, NULL, me->GetGUID());
}
ChaosBlast_Timer = 3000;
} else ChaosBlast_Timer -= diff;
//Summon Inner Demon
if (InnerDemons_Timer <= diff)
{
std::list<HostileReference *>& ThreatList = me->getThreatManager().getThreatList();
std::vector<Unit* > TargetList;
for (std::list<HostileReference *>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
{
Unit* tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->getVictim()->GetGUID() && TargetList.size()<5)
TargetList.push_back(tempTarget);
}
SpellEntry *spell = (SpellEntry *)GetSpellStore()->LookupEntry(SPELL_INSIDIOUS_WHISPER);
for (std::vector<Unit* >::const_iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
{
if ((*itr) && (*itr)->isAlive())
{
Creature* demon = me->SummonCreature(INNER_DEMON_ID, (*itr)->GetPositionX()+10, (*itr)->GetPositionY()+10, (*itr)->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
if (demon)
{
demon->AI()->AttackStart((*itr));
CAST_AI(mob_inner_demonAI, demon->AI())->victimGUID = (*itr)->GetGUID();
for (int i=0; i<3; i++)
{
if (!spell->Effect[i])
continue;
(*itr)->AddAura(new InsidiousAura(spell, i, NULL, (*itr), (*itr)));
}
if (InnerDemon_Count > 4)
InnerDemon_Count = 0;
//Safe storing of creatures
InnderDemon[InnerDemon_Count] = demon->GetGUID();
//Update demon count
++InnerDemon_Count;
}
}
}
DoScriptText(SAY_INNER_DEMONS, me);
InnerDemons_Timer = 999999;
} else InnerDemons_Timer -= diff;
//Switch_Timer
if (SwitchToHuman_Timer <= diff)
{
//switch to nightelf form
me->SetDisplayId(MODEL_NIGHTELF);
me->LoadEquipment(me->GetEquipmentId());
CastConsumingMadness();
DespawnDemon();
DemonForm = false;
NeedThreatReset = true;
SwitchToHuman_Timer = 60000;
} else SwitchToHuman_Timer -= diff;
}
if (!IsFinalForm && (me->GetHealth()*100 / me->GetMaxHealth()) < 15)
{
//at this point he divides himself in two parts
CastConsumingMadness();
DespawnDemon();
Creature* Copy = NULL;
Copy = DoSpawnCreature(DEMON_FORM, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 6000);
if (Copy)
{
Demon = Copy->GetGUID();
if (me->getVictim())
Copy->AI()->AttackStart(me->getVictim());
}
//set nightelf final form
IsFinalForm = true;
DemonForm = false;
DoScriptText(SAY_FINAL_FORM, me);
me->SetDisplayId(MODEL_NIGHTELF);
me->LoadEquipment(me->GetEquipmentId());
}
}
示例6: JustDied
void JustDied(Unit* Killer)
{
if (Creature *Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100))
CAST_AI(boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerDied(Killer);
}
示例7: OnGossipHello
bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_INCOMPLETE && !CAST_AI(npc_defiant_troll::npc_defiant_trollAI, creature->AI())->IsWorking())
{
player->CastSpell(creature, SPELL_LIGHTNING_VISUAL, true);
player->KilledMonsterCredit(DEFFIANT_KILL_CREDIT, creature->GetGUID());
creature->AI()->Talk(SAY_WORK);
creature->RemoveAllAuras();
if (GameObject* deposit = creature->FindNearestGameObject(GO_DEPOSIT, 20))
creature->GetMotionMaster()->MovePoint(1, deposit->GetPositionX() - 1.0f, deposit->GetPositionY(), deposit->GetPositionZ());
if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_COMPLETE)
player->RemoveAura(SPELL_LIGHTNING_VISUAL);
player->CLOSE_GOSSIP_MENU();
return true;
}
player->CLOSE_GOSSIP_MENU();
return false;
}
示例8: JustDied
void JustDied(Unit* pKiller)
{
if (pInstance)
if (Creature* pSjonnir = Unit::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR)))
CAST_AI(boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge();
}
示例9: DoSplit
void DoSplit(int atPercent /* 75 50 25 */)
{
DoScriptText(SAY_SPLIT, me);
ov_mycoordinates *place1 = new ov_mycoordinates(-8340.782227f, 2083.814453f, 125.648788f, 0);
ov_mycoordinates *place2 = new ov_mycoordinates(-8341.546875f, 2118.504639f, 133.058151f, 0);
ov_mycoordinates *place3 = new ov_mycoordinates(-8318.822266f, 2058.231201f, 133.058151f, 0);
ov_mycoordinates *bossc=place1, *i1=place2, *i2=place3;
switch (urand(0, 2))
{
case 0:
bossc=place1;
i1=place2;
i2=place3;
break;
case 1:
bossc=place2;
i1=place1;
i2=place3;
break;
case 2:
bossc=place3;
i1=place1;
i2=place2;
break;
}
for (uint16 i = 0; i < 41; ++i)
{
if (Player* target = CAST_PLR(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)))
{
if (Group* pGrp = target->GetGroup())
for (uint8 ico = 0; ico < TARGETICONCOUNT; ++ico)
{
//if (grp->m_targetIcons[ico] == me->GetGUID()) -- private member :(
pGrp->SetTargetIcon(ico, 0, 0);
}
break;
}
}
me->RemoveAllAuras();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(false);
me->SetPosition(bossc->x, bossc->y, bossc->z, bossc->r);
Invisible = true;
DoResetThreat();
DoStopAttack();
switch (atPercent)
{
case 75: Images75 = true; break;
case 50: Images50 = true; break;
case 25: Images25 = true; break;
}
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
Creature* Image1 = me->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
if (Image1)
{
Image1->SetMaxHealth(me->GetMaxHealth() / 5);
Image1->SetHealth(me->GetHealth() / 5);
if (target)
Image1->AI()->AttackStart(target);
CAST_AI(boss_skeram::boss_skeramAI, Image1->AI())->IsImage = true;
}
Creature* Image2 = me->SummonCreature(15263, i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
if (Image2)
{
Image2->SetMaxHealth(me->GetMaxHealth() / 5);
Image2->SetHealth(me->GetHealth() / 5);
if (target)
Image2->AI()->AttackStart(target);
CAST_AI(boss_skeram::boss_skeramAI, Image2->AI())->IsImage = true;
}
Invisible = true;
delete place1;
delete place2;
delete place3;
}
示例10: JustSummoned
void JustSummoned(Creature* summon) override
{
CAST_AI(npc_injured_soldier_dummy::npc_injured_soldier_dummyAI, summon->AI())->_phase = 1;
}
示例11: CAST_AI
void mob_qiraj_war_spawn::mob_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/)
{
me->RemoveCorpse();
if (Creature* Mob = (Unit::GetCreature(*me, MobGUID)))
CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, Mob->AI())->LiveCounter();
};
示例12: OnGossipHello
bool OnGossipHello(Player* pPlayer, GameObject* pGO)
{
if (Creature *pAnraphet = pGO->FindNearestCreature(BOSS_TEMPLE_GUARDIAN_ANHUUR, 1000, true))
if (boss_temple_guardian_anhuur::boss_temple_guardian_anhuurAI* pAI = CAST_AI(boss_temple_guardian_anhuur::boss_temple_guardian_anhuurAI, pAnraphet->AI()))
pAI->ActivateLever(pGO->GetEntry());
pGO->SetGoState(GO_STATE_ACTIVE);
//pPlayer->CastSpell(pGO, 68398, false);
if (Creature* beam = pGO->FindNearestCreature(40183, 30.0f, true))
beam->Kill(beam);
return true;
}
示例13: UpdateAI
void UpdateAI(const uint32 diff)
{
if (!EventBegun)
return;
if (HealthBelowPct(15) && !HasYelledOnce)
{
DoScriptText(SAY_LOW_HEALTH, me);
HasYelledOnce = true;
}
if (ShadeGUID && !StartCombat)
{
Creature* Shade = (Unit::GetCreature((*me), ShadeGUID));
if (Shade && Shade->isAlive())
{
if (CAST_AI(boss_shade_of_akama::boss_shade_of_akamaAI, Shade->AI())->IsBanished)
{
if (CastSoulRetrieveTimer <= diff)
{
DoCast(Shade, SPELL_AKAMA_SOUL_CHANNEL);
CastSoulRetrieveTimer = 500;
} else CastSoulRetrieveTimer -= diff;
}
else
{
me->InterruptNonMeleeSpells(false);
StartCombat = true;
}
}
}
if (ShadeHasDied && (WayPointId == 1))
{
if (pInstance)
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, DONE);
me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[1].x, AkamaWP[1].y, AkamaWP[1].z);
++WayPointId;
}
if (!ShadeHasDied && StartCombat)
{
if (CheckTimer <= diff)
{
if (ShadeGUID)
{
Creature* Shade = Unit::GetCreature((*me), ShadeGUID);
if (Shade && !Shade->isAlive())
{
ShadeHasDied = true;
WayPointId = 0;
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[0].x, AkamaWP[0].y, AkamaWP[0].z);
}
if (Shade && Shade->isAlive())
{
if (Shade->getThreatManager().getThreatList().size() < 2)
Shade->AI()->EnterEvadeMode();
}
}
CheckTimer = 5000;
} else CheckTimer -= diff;
}
if (SummonBrokenTimer && BrokenSummonIndex < 4)
{
if (SummonBrokenTimer <= diff)
{
for (uint8 i = 0; i < 4; ++i)
{
float x = BrokenCoords[BrokenSummonIndex].x + (i*5);
float y = BrokenCoords[BrokenSummonIndex].y + (1*5);
float z = BrokenCoords[BrokenSummonIndex].z;
float o = BrokenCoords[BrokenSummonIndex].o;
Creature* Broken = me->SummonCreature(CREATURE_BROKEN, x, y, z, o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000);
if (Broken)
{
float wx = BrokenWP[BrokenSummonIndex].x + (i*5);
float wy = BrokenWP[BrokenSummonIndex].y + (i*5);
float wz = BrokenWP[BrokenSummonIndex].z;
Broken->GetMotionMaster()->MovePoint(0, wx, wy, wz);
Broken->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
BrokenList.push_back(Broken->GetGUID());
}
}
++BrokenSummonIndex;
SummonBrokenTimer = 1000;
} else SummonBrokenTimer -= diff;
}
if (SoulRetrieveTimer)
{
if (SoulRetrieveTimer <= diff)
{
switch (EndingTalkCount)
{
case 0:
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
++EndingTalkCount;
SoulRetrieveTimer = 2000;
//.........这里部分代码省略.........
示例14: UpdateAI
void UpdateAI(const uint32 diff)
{
npc_escortAI::UpdateAI(diff);
if (PlayerGUID)
{
Player* AuraPlayer = Unit::GetPlayer(*me,PlayerGUID);
if (!AuraPlayer)
{
me->DisappearAndDie();
return;
}
else
{
if (AuraPlayer->isDead())
{
AuraPlayer->FailQuest(QUEST_A_FALL_FROM_GRACE);
me->DisappearAndDie();
return;
}
if (EndSequence)
{
if (EndSequenceTimer <= diff)
{
EndSequenceTimer = 12000;
if (EndSayCount == 6)
{
me->GetMotionMaster()->MoveJump(HighAbbotLandgrenJumpPos[0][0][0], HighAbbotLandgrenJumpPos[0][0][1], HighAbbotLandgrenJumpPos[0][0][2], 0.5f, 8.0f);
EndSequenceTimer = 2000;
}
if (EndSayCount == 7)
{
me->MonsterSay(HighAbbotText[6], LANG_UNIVERSAL, 0);
EndSequenceTimer = 2000;
}
if (EndSayCount == 8)
{
AuraPlayer->KilledMonsterCredit(27444, 0);
if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE))
AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE);
if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE))
AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE);
EndSequence = false;
}
if (EndSayCount < 6)
me->MonsterSay(HighAbbotText[EndSayCount], LANG_UNIVERSAL, PlayerGUID);
EndSayCount++;
} else
EndSequenceTimer -= diff;
}
if (!EventStarted && me->GetEntry() == NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY)
{
Start(false, false, PlayerGUID, 0, false);
EventStarted = true;
}
if (CheckPlayerDist)
if (AuraPlayer->GetDistance(2827.796f, -420.191f, 118.196f) < 4)
StartMove();
if (AuraCheckTimer <= diff) {
if (AuraPlayer && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].CreatureOrGOCount[0] == 1 && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE) && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE)) {
switch(AuraPlayer->getGender())
{
case GENDER_FEMALE:
AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE, false);
break;
case GENDER_MALE:
AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE, false);
break;
}
}
AuraCheckTimer = 300;
} else
AuraCheckTimer -= diff;
if (me->GetEntry() != NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY)
{
if (BodyGuardStart && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].CreatureOrGOCount[0] == 1) {
if (Creature* tmp = me->FindNearestCreature(NPC_DEVOUT_BODYGUARD, Range, true))
{
if (BodyGuardMoveTimer <= diff)
{
CAST_AI(npc_devout_bodyguard::npc_devout_bodyguardAI, tmp->AI())->StartMove();
BodyGuardMoveTimer = 6000;
Range = 4.0f;
if (GuardCount == 1)
BodyGuardStart = false;
GuardCount++;
} else
BodyGuardMoveTimer -= diff;
}
}
}
}
//.........这里部分代码省略.........
示例15: UpdateAI
void UpdateAI(const uint32 uiDiff)
{
if (uiPhase)
{
if (uiTimer <= uiDiff)
{
switch(uiPhase)
{
case 1:
DoScriptText(SAY_QUEST_ACCEPT_ATTACK, me);
uiTimer = 3000;
uiPhase = 2;
break;
case 2:
if (Creature* pTyrion = me->FindNearestCreature(NPC_TYRION, 10.0f))
DoScriptText(SAY_TYRION_1, pTyrion);
uiTimer = 3000;
uiPhase = 3;
break;
case 3:
me->UpdateEntry(NPC_PRIESTESS_TYRIONA, ALLIANCE);
uiTimer = 2000;
uiPhase = 4;
break;
case 4:
SetEscortPaused(false);
uiPhase = 0;
uiTimer = 0;
break;
case 5:
if (Creature* pGuard = me->FindNearestCreature(NPC_STORMWIND_ROYAL, 10.0f, true))
DoScriptText(SAY_GUARD_1, pGuard);
uiTimer = 3000;
uiPhase = 6;
break;
case 6:
DoScriptText(SAY_SPYBOT_2, me);
uiTimer = 3000;
uiPhase = 7;
break;
case 7:
SetEscortPaused(false);
uiTimer = 0;
uiPhase = 0;
break;
case 8:
if (Creature* pLescovar = me->FindNearestCreature(NPC_LORD_GREGOR_LESCOVAR, 10.0f))
DoScriptText(SAY_LESCOVAR_1, pLescovar);
uiTimer = 3000;
uiPhase = 9;
break;
case 9:
DoScriptText(SAY_SPYBOT_4, me);
uiTimer = 3000;
uiPhase = 10;
break;
case 10:
if (Creature* pLescovar = me->FindNearestCreature(NPC_LORD_GREGOR_LESCOVAR, 10.0f))
{
if (Player* pPlayer = GetPlayerForEscort())
{
CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, pPlayer->GetGUID());
CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->SetMaxPlayerDistance(200.0f);
}
}
me->DisappearAndDie();
uiTimer = 0;
uiPhase = 0;
break;
}
} else uiTimer -= uiDiff;
}
npc_escortAI::UpdateAI(uiDiff);
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}