Код:
struct mob_azure_saboteurAI : public npc_escortAI
{
mob_azure_saboteurAI(Creature *c):npc_escortAI(c)
{
pInstance = c->GetInstanceData();
bHasGotMovingPoints = false;
uiBoss = 0;
Reset();
}
ScriptedInstance* pInstance;
bool bHasGotMovingPoints;
uint32 uiBoss;
void Reset()
{
if (pInstance && !uiBoss)
uiBoss = pInstance->GetData(DATA_WAVE_COUNT) == 6 ? pInstance->GetData(DATA_FIRST_BOSS) : pInstance->GetData(DATA_SECOND_BOSS);
}
void WaypointReached(uint32 uiWPointId)
{
switch (uiBoss)
{
case 1:
if (uiWPointId == 2)
FinishPointReached();
break;
case 2:
if (uiWPointId == 2)
FinishPointReached();
break;
case 3:
if (uiWPointId == 1)
FinishPointReached();
break;
case 4:
if (uiWPointId == 0)
FinishPointReached();
break;
case 5:
if (uiWPointId == 0)
FinishPointReached();
break;
case 6:
if (uiWPointId == 4)
FinishPointReached();
break;
}
}
void UpdateAI(const uint32 diff)
{
if (pInstance && pInstance->GetData(DATA_MAIN_EVENT_PHASE != IN_PROGRESS))
me->CastStop();
npc_escortAI::UpdateAI(diff);
if (!bHasGotMovingPoints)
{
bHasGotMovingPoints = true;
switch (uiBoss)
{
case 1:
for (int i=0;i<3;i++)
AddWaypoint(i,SaboteurFinalPos1[i][0],SaboteurFinalPos1[i][1],SaboteurFinalPos1[i][2],0);
me->SetHomePosition(SaboteurFinalPos1[2][0],SaboteurFinalPos1[2][1],SaboteurFinalPos1[2][2],4.762346);
break;
case 2:
for (int i=0;i<3;i++)
AddWaypoint(i,SaboteurFinalPos2[i][0],SaboteurFinalPos2[i][1],SaboteurFinalPos2[i][2],0);
me->SetHomePosition(SaboteurFinalPos2[2][0],SaboteurFinalPos2[2][1],SaboteurFinalPos2[2][2],1.862674);
break;
case 3:
for (int i=0;i<2;i++)
AddWaypoint(i,SaboteurFinalPos3[i][0],SaboteurFinalPos3[i][1],SaboteurFinalPos3[i][2],0);
me->SetHomePosition(SaboteurFinalPos3[1][0],SaboteurFinalPos3[1][1],SaboteurFinalPos3[1][2],5.500638);
break;
case 4:
AddWaypoint(0,SaboteurFinalPos4[0],SaboteurFinalPos4[1],SaboteurFinalPos4[2],0);
me->SetHomePosition(SaboteurFinalPos4[0],SaboteurFinalPos4[1],SaboteurFinalPos4[2],3.991108);
break;
case 5:
AddWaypoint(0,SaboteurFinalPos5[0],SaboteurFinalPos5[1],SaboteurFinalPos5[2],0);
me->SetHomePosition(SaboteurFinalPos5[0],SaboteurFinalPos5[1],SaboteurFinalPos5[2],1.100841);
break;
case 6:
for (int i=0;i<5;i++)
AddWaypoint(i,SaboteurFinalPos6[i][0],SaboteurFinalPos6[i][1],SaboteurFinalPos6[i][2],0);
me->SetHomePosition(SaboteurFinalPos6[4][0],SaboteurFinalPos6[4][1],SaboteurFinalPos6[4][2],0.983031);
break;
}
SetDespawnAtEnd(false);
Start(true,true);
}
}