void GameEventMgr::FinishEvent(uint32 id) { GameEventMap::iterator _event = CheckAndReturnEvent(id); if( _event == m_GameEventMap.end() ) { sLog.outError("System tried to finish event %u, but this event does not exist!", id); return; } // already finished if( _event->second->active != true ) return; // despawn etc. here DespawnEvent( id ); ScriptedBackToOrig( id ); sHookInterface.OnGameEventFinish( id ); // set as non active _event->second->active = false; // update next start time if( _event->second->occurence != 0 ) { _event->second->start_time += _event->second->occurence; _event->second->end_time = _event->second->start_time + _event->second->length; } // if user wants to save event everytime, just save it if( sWorld.optimized_game_event_saving == true ) { sGameEventMgr.SaveEvent( id ); } sLog.outDebug("Event %s (ID: %u) has just stopped.", _event->second->name, id); }
void BattleGroundDS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { // despawn doors just for make a sure players don't get stuck behind it if(!DoorsDespawned) { DespawnEvent(DOORS_EVENT, 0); DoorsDespawned = true; } // knocking out of tube if(KnockbackCheck) { if(m_uiKnockback < diff || KnockbackSpam) { for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = sObjectMgr.GetPlayer(itr->first); if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) plr->KnockBackPlayerWithAngle(6.05f, 35.0f, 7.0f); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) plr->KnockBackPlayerWithAngle(3.03f, 35.0f, 7.0f); } if(!KnockbackSpam) { m_uiKnockSpam = 5000; KnockbackSpam = true; // Remove Demonic Circle for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) if (Player *plr = sObjectMgr.GetPlayer(itr->first)) if(GameObject* obj = plr->GetGameObject(48018)) obj->Delete(); } } else m_uiKnockback -= diff; if(KnockbackSpam) { if(m_uiKnockSpam < diff) KnockbackCheck = false; else m_uiKnockSpam -= diff; } } // Waterfall if(m_uiWaterfall < diff) { if(WaterfallActivated) { DespawnEvent(WATERFALL_EVENT, 0); WaterfallActivated = false; } else { SpawnEvent(WATERFALL_EVENT, 0, true); WaterfallActivated = true; } m_uiWaterfall = urand(30,45)*IN_MILLISECONDS; } else m_uiWaterfall -= diff; } }