bool CanCastPoM() { std::list<Creature*> FriendList = FindAllFriendlyInGrid(40); if(FriendList.empty()) return false; for(std::list<Creature*>::iterator i = FriendList.begin(); i != FriendList.end(); ++i) { if((*i)->HasAura(44586, 0)) return false; } return true; }
void UpdateAIOOC(const uint32 diff) { // need some tweaking if(!Talking) { if(Talk_Timer < diff) { if(Check_Timer < diff) { std::list<Creature*> friends = FindAllFriendlyInGrid(3); if(!friends.empty()) { Creature *c = friends.front(); c->GetMotionMaster()->MoveIdle(); c->SetInFront(me); me->GetMotionMaster()->MoveIdle(); me->SetInFront(c); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ROAR); Check_Timer = 1500; Talk_Timer = urand(4000, 6000); Talking = true; Talk_Creature = c->GetGUID(); //c->Say("Check1", 0, 0); //me->Say("Check0", 0, 0); } } else Check_Timer -= diff; } else Talk_Timer -= diff; } else // Talking { if(Check_Timer) { if(Check_Timer <= diff) { //me->Say("Check2", 0, 0); if(Creature *c = me->GetCreature(Talk_Creature)) { c->SetInFront(me); me->SetInFront(c); c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); } Check_Timer = 0; } else Check_Timer -= diff; } if(Talk_Timer < diff) { //me->Say("Check3", 0, 0); Talking = false; Talk_Timer = urand(4000, 8000); me->GetMotionMaster()->MovementExpired(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); if(Creature *c = me->GetCreature(Talk_Creature)) { c->GetMotionMaster()->MovementExpired(); c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); } } else Talk_Timer -= diff; } }