bool ToLegionHold(uint32 i, Aura* pAura, bool apply) { if ( pAura == NULL || pAura->GetUnitCaster() == NULL || !pAura->GetUnitCaster()->IsPlayer() ) return true; Player *pPlayer = static_cast< Player* >( pAura->GetUnitCaster() ); Creature *pJovaanCheck = pPlayer->GetMapMgr()->GetInterface()->GetCreatureNearestCoords(-3310.743896f, 2951.929199f, 171.132538f, 21633); if ( pJovaanCheck != NULL ) return true; QuestLogEntry *pQuest = pPlayer->GetQuestLogForEntry( 10563 ); if ( pQuest == NULL ) { pQuest = pPlayer->GetQuestLogForEntry( 10596 ); if ( pQuest == NULL ) return true; } if ( apply ) { pPlayer->SetUInt32Value( UNIT_FIELD_DISPLAYID, 20366 ); pPlayer->Root(); Creature *pJovaan = sEAS.SpawnCreature( pPlayer, 21633, -3310.743896f, 2951.929199f, 171.132538f, 5.054039f, 0 ); // Spawn Jovaan if ( pJovaan != NULL ) { pJovaan->SetUInt64Value( UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2 ); if ( pJovaan->GetAIInterface() != NULL ) { pJovaan->GetAIInterface()->SetAllowedToEnterCombat( false ); } } GameObject *pGameObject = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 184834); if ( pGameObject != NULL ) { pGameObject->Despawn(60000); pPlayer->UpdateNearbyGameObjects(); } } else { if ( pQuest->GetMobCount( 2 ) < pQuest->GetQuest()->required_mobcount[2] ) { pQuest->SetMobCount( 2, pQuest->GetMobCount( 2 ) + 1 ); pQuest->SendUpdateAddKill( 2 ); pQuest->UpdatePlayerFields(); } pPlayer->SetUInt32Value( UNIT_FIELD_DISPLAYID, pPlayer->GetUInt32Value( UNIT_FIELD_NATIVEDISPLAYID ) ); pPlayer->Unroot(); } return true; }
void SpawnCrates(uint32 id, MapMgr* pMapMgr) { uint32 entry = 190094; float x = 0.0f, y = 0.0f, z = 0.0f, o = 0.0f; switch(id) { case 0: { x = 1570.92f; y = 669.933f; z = 102.309f; o = -1.64061f; } break; case 1: { x = 1579.42f; y = 621.446f; z = 99.7329f; o = 2.9845f; } break; case 2: { x = 1629.68f; y = 731.367f; z = 112.847f; o = -0.837757f; } break; case 3: { x = 1674.39f; y = 872.307f; z = 120.394f; o = -1.11701f; } break; case 4: { x = 1628.98f; y = 812.142f; z = 120.689f; o = 0.436332f; } break; } GameObject* crate = pMapMgr->GetInterface()->GetGameObjectNearestCoords(x, y, z, 190094); if(crate) crate->Despawn(0, 0); GameObject* go = pMapMgr->CreateGameObject(entry); go->CreateFromProto(entry, pMapMgr->GetMapId(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f); go->PushToWorld(pMapMgr); }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject* GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } bool foundonmap = true; if(GObj->m_spawn && GObj->m_spawn->entry == GObj->GetEntry() && GObj->IsInWorld()) { uint32 cellx = GObj->GetMapMgr()->GetPosX(GObj->m_spawn->x); uint32 celly = GObj->GetMapMgr()->GetPosY(GObj->m_spawn->y); if(cellx < _sizeX && celly < _sizeY) { foundonmap = false; GOSpawnList::iterator itr; ASSERT(GObj->GetMapMgr()->GetBaseMap() != NULL) CellSpawns *c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList(cellx, celly); if(c != NULL) { for(itr = c->GOSpawns.begin(); itr != c->GOSpawns.end(); itr++) { if((*itr) == GObj->m_spawn) { foundonmap = true; c->GOSpawns.erase(itr); break; } } } } GObj->DeleteFromDB(); if(foundonmap) { delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0, 0); // Deleted through ExpireAndDelete GObj = NULLGOB; if(foundonmap) BlueSystemMessage(m_session, "Deleted selected object and erased it from spawn map."); else BlueSystemMessage(m_session, "Deleted selected object."); m_session->GetPlayer()->m_GM_SelectedGO = NULLGOB; return true; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *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)); if(cellx < _sizeX && celly < _sizeY) { //m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx,celly)->GOSpawns.erase(GObj->m_spawn); 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; } GObj->DeleteFromDB(); delete GObj->m_spawn; } } GObj->Despawn(0); delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ return true; }
void GameEventMgr::DespawnEvent(uint32 id) { Log.Success("GameEvent","Started despawning event %u", id); // creatures for(std::map<uint32, std::list<uint32>>::iterator mitr = m_creaturespawns[id].begin(); mitr != m_creaturespawns[id].end(); mitr++) { for(std::list<uint32>::iterator gitr = mitr->second.begin(); gitr != mitr->second.end(); gitr++) { // find creature with current guid(*gitr) and despawn it MapMgr *mgr = sInstanceMgr.GetMapMgr(mitr->first); Creature *crt = mgr->GetCreature(*gitr); if(crt == NULL) { Log.Success("GameEvent","Failed to despawn creature with guid %u for event %u", *gitr, id); } else { // we don't need to delete waypoints as they are stored in m_custom_waypoint_map // and they are deleted automatically when creature is deleted crt->Despawn(0,0); Log.Success("GameEvent","creature with guid %u despawned from map %u for event %u", *gitr, mitr->first, id); } } mitr->second.clear(); } // gameobjects for(std::map<uint32, std::list<uint32>>::iterator mitr = m_gameobjectspawns[id].begin(); mitr != m_gameobjectspawns[id].end(); mitr++) { for(std::list<uint32>::iterator gitr = mitr->second.begin(); gitr != mitr->second.end(); gitr++) { // find gameobject with current guid(*gitr) and despawn it MapMgr *mgr = sInstanceMgr.GetMapMgr(mitr->first); GameObject *go = mgr->GetGameObject(*gitr); if(go == NULL) { Log.Success("GameEvent","Failed to despawn gameobject with guid %u for event %u", *gitr, id); } else { go->Despawn(0,0); Log.Success("GameEvent","gameobject with guid %u despawned from map %u for event %u", *gitr, mitr->first, id); } } mitr->second.clear(); } Log.Success("GameEvent","event %u despawned.", id); }
void OnActivate(Player* player) { if (player->HasQuest(5902) || player->HasQuest(5904)) { LocationVector pos = player->GetPosition(); GameObject* go = player->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(pos.x, pos.y, pos.z, 177491); if (go == nullptr) { GameObject* barel = player->GetMapMgr()->CreateAndSpawnGameObject(177491, 2449.51f, -1662.32f, 104.38f, 1.0f, 1); if (barel != nullptr) barel->Despawn(2 * 60 * 1000, 0); } } }
void OnDied(Unit* mKiller) { RemoveAIUpdateEvent(); Unit* Novos = _unit->GetMapMgr()->GetUnit( _unit->GetSummonedByGUID() ); if( Novos ) for( uint8 i=0; i<4; i++) if( Novos->m_ObjectSlots[i] ) { GameObject* Crystal = Novos->GetMapMgr()->GetGameObject( Novos->m_ObjectSlots[i] ); if( Crystal && Crystal->IsInWorld() ) { Crystal->Despawn(0,0); return; } } }
void OnDied(Unit * mKiller) { RemoveAIUpdateEvent(); Unit * Novos = _unit->GetMapMgr()->GetUnit( _unit->GetUInt64Value( UNIT_FIELD_SUMMONEDBY ) ); if( Novos ) for( uint8 i=0; i<4; i++) if( Novos->m_ObjectSlots[i] ) { GameObject * Crystal = Novos->GetMapMgr()->GetGameObject( Novos->m_ObjectSlots[i] ); if( Crystal && Crystal->IsInWorld() ) { Crystal->Despawn(0); return; } } }
void OnActivate(Player* player) { if (!player->HasQuest(10526)) return; LocationVector pos = player->GetPosition(); // Wth is that ? To remove ? GameObject* gobj = player->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(pos.x, pos.y, pos.z, 184729); if (gobj != nullptr) gobj->Despawn(6 * 60 * 1000, 0); Creature* spike = player->GetMapMgr()->CreateAndSpawnCreature(21319, 1315.54f, 6688.33f, -18, 0.001f); if (spike != nullptr) spike->Despawn(5 * 60 * 1000, 0); }
void GossipHello( Object* pObject, Player* pPlayer, bool AutoSend ) { if ( pObject == NULL || pObject->GetTypeId() != TYPEID_ITEM || pPlayer == NULL ) return; QuestLogEntry* QuestEntry = pPlayer->GetQuestLogForEntry( 9452 ); if ( QuestEntry == NULL ) return; #ifndef BLIZZLIKE //if ( QuestEntry->GetMobCount( 0 ) >= QuestEntry->GetQuest()->required_mobcount[ 0 ] ) // return; #endif if ( pPlayer->GetMapMgr() == NULL ) return; // Meh, double object looking - we should find a way to remove this GameObject* School = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords( pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 181616 ); if ( School == NULL || pPlayer->CalcDistance( School ) > 5.0f ) return; #ifdef BLIZZLIKE sEventMgr.AddEvent( School, &GameObject::Despawn, static_cast< uint32 >( 20000 ), EVENT_GAMEOBJECT_ITEM_SPAWN, 1000, 1, 0 ); #else School->Despawn( 20000 ); #endif pPlayer->CastSpell( pPlayer, dbcSpell.LookupEntry( TO_ITEM( pObject )->GetProto()->Spells[ 0 ].Id ), false ); uint32 Chance = RandomUInt( 10 ); if ( Chance <= 3 ) { Creature* NewCreature = sEAS.SpawnCreature( pPlayer, 17102, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), pPlayer->GetOrientation(), 180000 ); if ( NewCreature != NULL ) { NewCreature->GetAIInterface()->StopMovement( 500 ); NewCreature->setAttackTimer( 1000, false ); NewCreature->m_noRespawn = true; }; return; }; sEAS.AddItem( 23614, pPlayer ); QuestEntry->SendUpdateAddKill( 1 ); QuestEntry->UpdatePlayerFields(); pPlayer->Gossip_Complete(); };
bool ChatHandler::HandleGODelete(const char* args, WorldSession* m_session) { GameObject* GObj = m_session->GetPlayer()->GetSelectedGo(); if(!GObj) { RedSystemMessage(m_session, "No selected GameObject..."); return false; } if(GObj->IsInBg()) { RedSystemMessage(m_session, "GameObjects can't be deleted in Battlegrounds"); return false; } if(GObj->m_spawn && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx = uint32(((_maxX - GObj->m_spawn->x) / _cellSize)); uint32 celly = uint32(((_maxY - GObj->m_spawn->y) / _cellSize)); if(cellx < _sizeX && celly < _sizeY) { CellSpawns* sp = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList(cellx, celly); if(sp) { for(GOSpawnList::iterator itr = sp->GOSpawns.begin(); itr != sp->GOSpawns.end(); ++itr) { if((*itr) == GObj->m_spawn) { sp->GOSpawns.erase(itr); break; } } } GObj->DeleteFromDB(); delete GObj->m_spawn; GObj->m_spawn = NULL; } } sGMLog.writefromsession(m_session, "deleted game object entry %u on map %u at X:%f Y:%f Z:%f Name %s", GObj->GetEntry(), GObj->GetMapId(), GObj->GetPositionX(), GObj->GetPositionY(), GObj->GetPositionZ(), GameObjectNameStorage.LookupEntry(GObj->GetEntry())->Name); GObj->Despawn(0, 0); // We do not need to delete the object because GameObject::Despawn with no time => ExpireAndDelete() => _Expire() => delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; return true; }
void DespawnJailWalls() { script_debuglog("removing jail walls"); // Remove jail walls. GameObject *pGameObject; while(!jailgameobjects.empty()) { pGameObject = jailgameobjects.front(); jailgameobjects.pop(); // Despawn him (fade animation !) pGameObject->Despawn(60000); // Delete him from memory. _instance->GetInterface()->DeleteGameObject(pGameObject); } }
void OnCombatStop(Unit* mTarget) { _unit->GetAIInterface()->setCurrentAgent(AGENT_NULL); _unit->GetAIInterface()->SetAIState(STATE_IDLE); RemoveAIUpdateEvent(); for( uint8 i=0; i<4; i++) { if( _unit->m_ObjectSlots[i] ) { GameObject* Crystal = _unit->GetMapMgr()->GetGameObject( _unit->m_ObjectSlots[i] ); if( Crystal && Crystal->IsInWorld() ) Crystal->Despawn(0,0); } } _unit->Root(); _unit->InterruptSpell(); _unit->RemoveAllAuras(); }
void OnActivate(Player* pPlayer) { if(!pPlayer) return; if(!pPlayer->GetQuestLogForEntry(10526)) return; // Wth is that ? To remove ? GameObject* gobj = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 184729); if(!gobj) return; gobj->Despawn(6*60*1000, 0); Creature* spike = sEAS.SpawnCreature(pPlayer, 21319, 1315.54f, 6688.33f, -18, 0.001f, 0); spike->Despawn(5*60*1000, 0); }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx,celly)->GOSpawns.erase(GObj->m_spawn); delete GObj->m_spawn; } GObj->DeleteFromDB(); GObj->Despawn(0); delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ return true; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject* 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); GOSpawnList::iterator itr,itr2; for(itr = c->GOSpawns.begin(); itr != c->GOSpawns.end();) { itr2 = itr; itr++; if((*itr2) == GObj->m_spawn) { c->GOSpawns.erase(itr2); break; } } delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0); GObj->Destructor(); GObj = NULL; m_session->GetPlayer()->m_GM_SelectedGO = NULL; return true; }
void WorldSession::HandleLootReleaseOpcode( WorldPacket & recv_data ) { if(!_player->IsInWorld()) return; uint64 guid; recv_data >> guid; WorldPacket data(SMSG_LOOT_RELEASE_RESPONSE, 9); data << guid << uint8( 1 ); SendPacket( &data ); _player->SetLootGUID(0); _player->RemoveFlag(UNIT_FIELD_FLAGS, U_FIELD_ANIMATION_LOOTING); _player->m_currentLoot = 0; if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_UNIT) { Creature* pCreature = _player->GetMapMgr()->GetCreature(guid); if(!pCreature) return; // remove from looter set pCreature->loot.looters.erase(_player->GetGUID()); if(!pCreature->loot.gold) { for(std::vector<__LootItem>::iterator i=pCreature->loot.items.begin();i!=pCreature->loot.items.end();i++) if(i->iItemsCount) { ItemPrototype *proto=ItemPrototypeStorage.LookupEntry(i->item.itemid); if(proto->Class != 12) return; if(_player->HasQuestForItem(i->item.itemid)) return; } pCreature->BuildFieldUpdatePacket(_player, UNIT_DYNAMIC_FLAGS, 0); if(!pCreature->Skinned) { if(lootmgr.IsSkinnable(pCreature->GetEntry())) { pCreature->BuildFieldUpdatePacket(_player, UNIT_FIELD_FLAGS, U_FIELD_FLAG_SKINNABLE); } } } } else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_GAMEOBJECT) { GameObject* pGO = _player->GetMapMgr()->GetGameObject(guid); if(!pGO) return; pGO->loot.looters.erase(_player->GetGUID()); //GO MUST DISAPPEAR AFTER LOOTING, //FIX ME: respawn time of GO must be added,15 minutes by default //if this is not fishing bobber despawn it if(pGO->GetUInt32Value(GAMEOBJECT_TYPE_ID)==GAMEOBJECT_TYPE_FISHINGNODE) { if(pGO->IsInWorld()) { pGO->RemoveFromWorld(); } delete pGO; } else { uint32 DespawnTime = 0; if(sQuestMgr.GetGameObjectLootQuest(pGO->GetEntry())) DespawnTime = 120000; // 5 min for quest GO, else { DespawnTime = 900000; // 15 for else } pGO->Despawn(DespawnTime); } } else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_CORPSE) { Corpse *pCorpse = objmgr.GetCorpse(guid); if(pCorpse) pCorpse->SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, 0); } else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_PLAYER) { Player *plr = objmgr.GetPlayer(guid); if(plr) { plr->bShouldHaveLootableOnCorpse = false; plr->RemoveFlag(UNIT_DYNAMIC_FLAGS, U_DYN_FLAG_LOOTABLE); } } else if(UINT32_LOPART(GUID_HIPART(guid))) { // suicide! _player->GetItemInterface()->SafeFullRemoveItemByGuid(guid); } }