本文整理汇总了C++中GameObject::Despawn方法的典型用法代码示例。如果您正苦于以下问题:C++ GameObject::Despawn方法的具体用法?C++ GameObject::Despawn怎么用?C++ GameObject::Despawn使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameObject
的用法示例。
在下文中一共展示了GameObject::Despawn方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ToLegionHold
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: SpawnCrates
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: HandleGODelete
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: HandleGODelete
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: DespawnEvent
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: OnActivate
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: OnDied
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: OnDied
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: GossipHello
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();
};
示例10: RedSystemMessage
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;
}
示例11: DespawnJailWalls
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);
}
}
示例12: OnCombatStop
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();
}
示例13: OnActivate
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);
}
示例14: HandleGODelete
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;
}
示例15: HandleLootReleaseOpcode
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);
}
}