Enough said, its working properly and i wrote it.Code:struct pAttackMap{ pAttackMap() : guid(0), timer(0) { } uint64 guid; uint32 timer; }; struct MANGOS_DLL_DECL npc_training_dummyAI : public Scripted_NoMovementAI { npc_training_dummyAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature){} std::map<uint64, pAttackMap*> AttackMap; uint32 second; void Reset(){} void DamageTaken(Unit* pDealer, uint32& uiDamage) { uint64 guid = pDealer->GetObjectGuid(); pAttackMap *data = AttackMap[guid]; if(!data) { data = new pAttackMap(); AttackMap[guid] = data; data->guid = guid; } data->timer = 6000; } void UpdateAI(const uint32 diff) { second += diff; if (second > 1000) { for (std::map<uint64, pAttackMap*>::iterator itr = AttackMap.begin(); itr != AttackMap.end(); ++itr) { ObjectGuid oGuid; oGuid.Set(itr->second->guid); Player* pPlayer = m_creature->GetMap()->GetPlayer(oGuid); itr->second->timer -= 1000; if (itr->second->timer < 1) { pPlayer->CombatStop(true); pPlayer->AttackStop(false); pPlayer->CombatStopWithPets(true); pPlayer->ClearInCombat(); AttackMap.erase(itr->second->guid); delete itr->second; } if (AttackMap.empty()) { EnterEvadeMode(); m_creature->SetHealth(m_creature->GetMaxHealth()); } } second = 0; } m_creature->SetStunned(true); if ((m_creature->GetHealthPercent() < 10.0f || m_creature->GetHealthPercent() > 20.0f) && m_creature->isInCombat()) // allow players using finishers m_creature->SetHealth(m_creature->GetMaxHealth()/5); m_creature->SetTargetGuid(ObjectGuid()); // prevent from rotating } }; CreatureAI* GetAI_npc_training_dummy(Creature* pCreature) { return new npc_training_dummyAI(pCreature); }