コード例 #1
0
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;
}
コード例 #2
0
		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);
		}
コード例 #3
0
ファイル: Level2.cpp プロジェクト: Refuge89/Hearthstone
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;
}
コード例 #4
0
ファイル: Level2.cpp プロジェクト: Chero/abcwow
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;
}
コード例 #5
0
ファイル: GameEventManager.cpp プロジェクト: Demensis/arcemu
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);
}
コード例 #6
0
ファイル: GameObjects.cpp プロジェクト: AscEmu/AscEmu
 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);
         }
     }
 }
コード例 #7
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;
					}
				}
	}
コード例 #8
0
    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;
					}
				}
	}
コード例 #9
0
ファイル: GameObjects.cpp プロジェクト: AscEmu/AscEmu
    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);
    }
コード例 #10
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();
	};
コード例 #11
0
ファイル: cmd_gobject.cpp プロジェクト: lev1976g/NoxicCore
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;
}
コード例 #12
0
ファイル: DotA-WoW-0.1Beta.cpp プロジェクト: AwkwardDev/WoWD
    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);
        }
    }
コード例 #13
0
    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();
	   }
コード例 #14
0
ファイル: GameObjects.cpp プロジェクト: Desch/Edge-of-Chaos
	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);
	}
コード例 #15
0
ファイル: Level2.cpp プロジェクト: Sylica2013/Antrix
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;
}
コード例 #16
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 && 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;
}
コード例 #17
0
ファイル: MiscHandler.cpp プロジェクト: Sylica2013/Antrix
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);
	}
}