void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, uint32 guid) { for (size_t i=0; i < EqualChanced.size(); ++i) { // if spawned if (spawns.IsActiveObject<T>(EqualChanced[i].guid)) { if (!guid || EqualChanced[i].guid == guid) { Despawn1Object(EqualChanced[i].guid); spawns.RemoveObject<T>(EqualChanced[i].guid, poolId); } } } for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) { // spawned if (spawns.IsActiveObject<T>(ExplicitlyChanced[i].guid)) { if (!guid || ExplicitlyChanced[i].guid == guid) { Despawn1Object(ExplicitlyChanced[i].guid); spawns.RemoveObject<T>(ExplicitlyChanced[i].guid, poolId); } } } }
void PoolGroup<T>::DespawnObject(MapPersistentState& mapState, uint32 guid) { for (size_t i = 0; i < EqualChanced.size(); ++i) { // if spawned if (mapState.GetSpawnedPoolData().IsSpawnedObject<T>(EqualChanced[i].guid)) { // any or specially requested if (!guid || EqualChanced[i].guid == guid) { Despawn1Object(mapState, EqualChanced[i].guid); mapState.GetSpawnedPoolData().RemoveSpawn<T>(EqualChanced[i].guid, poolId); } } } for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) { // spawned if (mapState.GetSpawnedPoolData().IsSpawnedObject<T>(ExplicitlyChanced[i].guid)) { // any or specially requested if (!guid || ExplicitlyChanced[i].guid == guid) { Despawn1Object(mapState, ExplicitlyChanced[i].guid); mapState.GetSpawnedPoolData().RemoveSpawn<T>(ExplicitlyChanced[i].guid, poolId); } } } }
void PoolGroup<T>::DespawnObject(SpawnedPoolData& spawns, uint32 guid) { for (size_t i = 0; i < EqualChanced.size(); ++i) { // if spawned if (spawns.IsSpawnedObject<T>(EqualChanced[i].guid)) { // any or specially requested if (!guid || EqualChanced[i].guid == guid) { Despawn1Object(EqualChanced[i].guid); spawns.RemoveSpawn<T>(EqualChanced[i].guid,poolId); } } } for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) { // spawned if (spawns.IsSpawnedObject<T>(ExplicitlyChanced[i].guid)) { // any or specially requested if (!guid || ExplicitlyChanced[i].guid == guid) { Despawn1Object(ExplicitlyChanced[i].guid); spawns.RemoveSpawn<T>(ExplicitlyChanced[i].guid,poolId); } } } }
void PoolGroup<T>::DespawnObject(uint32 guid) { for (size_t i = 0; i < EqualChanced.size(); ++i) { if (EqualChanced[i].spawned) { if (!guid || EqualChanced[i].guid == guid) { Despawn1Object(EqualChanced[i].guid); EqualChanced[i].spawned = false; if (m_SpawnedPoolAmount > 0) --m_SpawnedPoolAmount; } } } for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) { if (ExplicitlyChanced[i].spawned) { if (!guid || ExplicitlyChanced[i].guid == guid) { Despawn1Object(ExplicitlyChanced[i].guid); ExplicitlyChanced[i].spawned = false; if (m_SpawnedPoolAmount > 0) --m_SpawnedPoolAmount; } } } }
void PoolGroup<T>::SpawnObject(uint32 limit, bool cache) { if (limit == 1) // This is the only case where explicit chance is used { uint32 roll = RollOne(); if (cache && m_LastDespawnedNode != roll) Despawn1Object(m_LastDespawnedNode); m_LastDespawnedNode = 0; Spawn1Object(roll); } else if (limit < EqualChanced.size() && m_SpawnedPoolAmount < limit) { std::vector<uint32> IndexList; for (size_t i = 0; i < EqualChanced.size(); ++i) if (!EqualChanced[i].spawned) IndexList.push_back(i); while (m_SpawnedPoolAmount < limit && IndexList.size() > 0) { uint32 roll = urand(1, IndexList.size()) - 1; uint32 index = IndexList[roll]; if (!cache || (cache && EqualChanced[index].guid != m_LastDespawnedNode)) { if (cache) Despawn1Object(m_LastDespawnedNode); EqualChanced[index].spawned = Spawn1Object(EqualChanced[index].guid); } else EqualChanced[index].spawned = ReSpawn1Object(EqualChanced[index].guid); if (EqualChanced[index].spawned) ++m_SpawnedPoolAmount; // limited group use the Spawned variable to store the number of actualy spawned creatures std::vector<uint32>::iterator itr = IndexList.begin()+roll; IndexList.erase(itr); } m_LastDespawnedNode = 0; } else // Not enough objects in pool, so spawn all { for (size_t i = 0; i < EqualChanced.size(); ++i) EqualChanced[i].spawned = Spawn1Object(EqualChanced[i].guid); } }
void PoolHandler::PoolGroup<T>::DespawnObject(uint32 guid) { for (int i=0; i<EqualChanced.size(); ++i) { if (EqualChanced[i].spawned) { if (!guid || EqualChanced[i].guid == guid) { if (guid) CacheValue = EqualChanced[i].guid; else Despawn1Object(EqualChanced[i].guid); EqualChanced[i].spawned = false; Spawned--; } } } }
void PoolGroup<T>::DespawnObject(uint32 guid) { for (size_t i=0; i<EqualChanced.size(); ++i) { if (EqualChanced[i].spawned) { if (!guid || EqualChanced[i].guid == guid) { if (guid) m_LastDespawnedNode = EqualChanced[i].guid; else Despawn1Object(EqualChanced[i].guid); EqualChanced[i].spawned = false; if (m_SpawnedPoolAmount > 0) --m_SpawnedPoolAmount; } } } }