void DropFlag(PlayerPointer pPlayer, uint32 spellID) { if(!pPlayer || spellID != SILITHYST_SPELL) return; uint32 triggerID = pPlayer->GetTeam() == ALLIANCE ? ALLIANCE_RETURN : HORDE_RETURN; // we have to use AreaTrigger.dbc here AreaTrigger* pAreaTrigger = AreaTriggerStorage.LookupEntry(triggerID); if(pAreaTrigger) if(pPlayer->CalcDistance(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z) > 10.0f) { GameObjectPointer pGo = pPlayer->GetMapMgr()->GetInterface()->SpawnGameObject(SILITHYST_MOUND, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 0, true, 0, 0); if(pGo == NULL) { pGo->Destructor(); pGo = NULLGOB; } }; }
void WorldSession::HandleDuelCancelled(WorldPacket & recv_data) { if( _player->DuelingWith == NULL ) return; if( _player->m_duelState == DUEL_STATE_STARTED ) { _player->DuelingWith->EndDuel( DUEL_WINNER_KNOCKOUT ); return; } WorldPacket data( SMSG_DUEL_COMPLETE, 1 ); data << uint8( 1 ); SendPacket( &data ); _player->DuelingWith->m_session->SendPacket( &data ); GameObjectPointer arbiter = _player->GetMapMgr() ? _player->GetMapMgr()->GetGameObject( GET_LOWGUID_PART(_player->GetUInt64Value( PLAYER_DUEL_ARBITER )) ) : NULLGOB; if( arbiter != NULL ) { arbiter->RemoveFromWorld( true ); arbiter->Destructor(); arbiter = NULLGOB; } _player->DuelingWith->SetUInt64Value( PLAYER_DUEL_ARBITER, 0 ); _player->SetUInt64Value( PLAYER_DUEL_ARBITER, 0 ); _player->DuelingWith->SetUInt32Value( PLAYER_DUEL_TEAM, 0 ); _player->SetUInt32Value( PLAYER_DUEL_TEAM, 0); _player->DuelingWith->m_duelState = DUEL_STATE_FINISHED; _player->m_duelState = DUEL_STATE_FINISHED; _player->DuelingWith->m_duelCountdownTimer = 0; _player->m_duelCountdownTimer = 0; _player->DuelingWith->DuelingWith = NULLPLR; _player->DuelingWith = NULLPLR; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObjectPointer GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0 && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); GObj->DeleteFromDB(); if(cellx < _sizeX && celly < _sizeY) { CellSpawns * c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx, celly); for(GOSpawnList::iterator itr = c->GOSpawns.begin(); itr != c->GOSpawns.end(); ++itr) { if((*itr) == GObj->m_spawn) { c->GOSpawns.erase(itr); break; } } delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0); GObj->Destructor(); GObj = NULLGOB; m_session->GetPlayer()->m_GM_SelectedGO = NULLGOB; return true; }
void MapScriptInterface::DeleteGameObject(GameObjectPointer ptr) { ptr->Destructor(); ptr = NULLGOB; }