本文整理汇总了C++中GameObject::GetMapId方法的典型用法代码示例。如果您正苦于以下问题:C++ GameObject::GetMapId方法的具体用法?C++ GameObject::GetMapId怎么用?C++ GameObject::GetMapId使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameObject
的用法示例。
在下文中一共展示了GameObject::GetMapId方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleGameObjectMoveCommand
//move selected object
static bool HandleGameObjectMoveCommand(ChatHandler* handler, char const* args)
{
uint32 guidLow = GetGuidLowFromArgsOrLastTargetedGo(handler, args);
if (!guidLow)
return false;
GameObject* object = NULL;
// by DB guid
if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow))
object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id);
if (!object)
{
handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);
handler->SetSentErrorMessage(true);
return false;
}
char* toX = strtok(NULL, " ");
char* toY = strtok(NULL, " ");
char* toZ = strtok(NULL, " ");
if (!toX)
{
Player* player = handler->GetSession()->GetPlayer();
object->Relocate(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), object->GetOrientation());
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
}
else
{
if (!toY || !toZ)
return false;
float x = (float)atof(toX);
float y = (float)atof(toY);
float z = (float)atof(toZ);
if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, object->GetMapId());
handler->SetSentErrorMessage(true);
return false;
}
object->Relocate(x, y, z, object->GetOrientation());
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
}
object->SaveToDB();
object->Refresh();
handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow());
return true;
}
示例2: HandleObjectCommand
bool ChatHandler::HandleObjectCommand(const char* args)
{
WorldPacket data;
if (!*args)
return false;
uint32 display_id = atoi((char*)args);
char* safe = strtok((char*)args, " ");
Player *chr = m_session->GetPlayer();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
GameObject* pGameObj = new GameObject();
pGameObj->Create(objmgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT), display_id, chr->GetMapId(), x, y, z, o, 0, 0, 0, 0);
pGameObj->SetZoneId(chr->GetZoneId());
pGameObj->SetUInt32Value(GAMEOBJECT_TYPE_ID, 19);
Log::getSingleton( ).outError("AddObject at Level3.cpp line 252");
MapManager::Instance().GetMap(pGameObj->GetMapId())->Add(pGameObj);
if(strcmp(safe,"true") == 0)
pGameObj->SaveToDB();
return true;
}
示例3: HandleDuelCancelledOpcode
void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket)
{
sLog.outString( "HandleDuelCancelledOpcode.\n" );
uint64 guid;
Player *pl;
Player *plTarget;
WorldPacket data;
recvPacket >> guid;
pl = GetPlayer(); //get player
plTarget = objmgr.GetPlayer(pl->m_duelGUID);
data.Initialize(SMSG_GAMEOBJECT_DESPAWN_ANIM);
data << (uint64)guid;
pl->GetSession()->SendPacket(&data);
plTarget->GetSession()->SendPacket(&data);
data.Initialize(SMSG_DESTROY_OBJECT);
data << (uint64)guid;
pl->GetSession()->SendPacket(&data);
plTarget->GetSession()->SendPacket(&data);
data.Initialize(SMSG_DUEL_COMPLETE);
data << (uint8)0; // Duel Cancel
pl->GetSession()->SendPacket(&data);
plTarget->GetSession()->SendPacket(&data);
pl->m_isInDuel = false;
plTarget->m_isInDuel = false;
GameObject* obj = NULL;
#ifndef ENABLE_GRID_SYSTEM
obj = objmgr.GetObject<GameObject>(guid);
#else
if( pl )
obj = ObjectAccessor::Instance().GetGameObject(*pl, guid);
#endif
if(obj)
{
#ifndef ENABLE_GRID_SYSTEM
obj->RemoveFromMap();
objmgr.RemoveObject(obj);
#else
MapManager::Instance().GetMap(obj->GetMapId())->RemoveFromMap(obj);
#endif
}
}
示例4: HandleGameObjectCommand
bool ChatHandler::HandleGameObjectCommand(const char* args)
{
if (!*args)
return false;
WorldPacket data;
uint32 display_id = atoi((char*)args);
if(!display_id) return false;
uint16 typesid = atoi((char*)args);
if(!typesid) return false;
uint16 factionid = atoi((char*)args);
if(!factionid) return false;
uint32 fieldentry = atoi((char*)args);
if(!fieldentry) return false;
Player *chr = m_session->GetPlayer();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
uint32 guidlow = objmgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT);
Log::getSingleton( ).outError("GameObjectGUIDlow %u",guidlow);
GameObject* pGameObj = new GameObject();
pGameObj->Create(guidlow, display_id, chr->GetMapId(), x, y, z, o, 0, 0, 0, 0);
pGameObj->SetUInt32Value(OBJECT_FIELD_ENTRY, fieldentry);
pGameObj->SetUInt32Value(GAMEOBJECT_TYPE_ID, typesid);
pGameObj->SetZoneId(chr->GetZoneId());
Log::getSingleton( ).outError("AddObject at Level3.cpp line 252");
MapManager::Instance().GetMap(pGameObj->GetMapId())->Add(pGameObj);
pGameObj->SaveToDB();
return true;
}
示例5: HandleMoveObjectCommand
bool ChatHandler::HandleMoveObjectCommand(const char* args)
{
if(!*args)
return false;
char* plowguid = strtok((char*)args, " ");
if(!plowguid)
return false;
uint32 lowguid = (uint32)atoi(plowguid);
GameObject* obj = ObjectAccessor::Instance().GetGameObject(*m_session->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_GAMEOBJECT));
if(!obj)
{
PSendSysMessage("Game Object (GUID: %u) not found", lowguid);
return true;
}
char* px = strtok(NULL, " ");
char* py = strtok(NULL, " ");
char* pz = strtok(NULL, " ");
if (!px)
{
Player *chr = m_session->GetPlayer();
obj->Relocate(chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), obj->GetOrientation());
obj->SetFloatValue(GAMEOBJECT_POS_X, chr->GetPositionX());
obj->SetFloatValue(GAMEOBJECT_POS_Y, chr->GetPositionY());
obj->SetFloatValue(GAMEOBJECT_POS_Z, chr->GetPositionZ());
}
else
{
if(!py || !pz)
return false;
float x = (float)atof(px);
float y = (float)atof(py);
float z = (float)atof(pz);
if(!MapManager::IsValidMapCoord(obj->GetMapId(),x,y))
{
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,obj->GetMapId());
return true;
}
obj->Relocate(x, y, z, obj->GetOrientation());
obj->SetFloatValue(GAMEOBJECT_POS_X, x);
obj->SetFloatValue(GAMEOBJECT_POS_Y, y);
obj->SetFloatValue(GAMEOBJECT_POS_Z, z);
}
obj->SaveToDB();
obj->Refresh();
PSendSysMessage("Game Object (GUID: %u) moved", obj->GetGUIDLow());
return true;
}
示例6: HandleGameObjectUseOpcode
void WorldSession::HandleGameObjectUseOpcode( WorldPacket & recv_data )
{
uint64 guid;
uint32 spellId = OPEN_CHEST;
const GameObjectInfo *info;
recv_data >> guid;
sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_USE Message [guid=%u]", guid);
GameObject *obj = ObjectAccessor::Instance().GetGameObject(*_player, guid);
if(!obj) return;
// uint32 t = obj->GetUInt32Value(GAMEOBJECT_TYPE_ID);
//obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
//obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
uint32 t = obj->GetUInt32Value(GAMEOBJECT_TYPE_ID);
switch(t)
{
//door
case GAMEOBJECT_TYPE_DOOR: //0
obj->SetUInt32Value(GAMEOBJECT_FLAGS,33);
obj->SetUInt32Value(GAMEOBJECT_STATE,0); //open
//obj->SetUInt32Value(GAMEOBJECT_TIMESTAMP,0x465EE6D2); //load timestamp
obj->SetLootState(GO_CLOSED);
obj->SetRespawnTime(5); //close door in 5 seconds
return;
case GAMEOBJECT_TYPE_QUESTGIVER: // 2
_player->PrepareQuestMenu( guid );
_player->SendPreparedQuest( guid );
return;
//Sitting: Wooden bench, chairs enzz
case GAMEOBJECT_TYPE_CHAIR: //7
info = obj->GetGOInfo();
if(info)
{
spellId = info->sound0;
//guid=GetPlayer()->GetGUID();
_player->TeleportTo(obj->GetMapId(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),false,false);
//offset 3 is related to the DB
_player->SetUInt32Value(UNIT_FIELD_BYTES_1, _player->GetUInt32Value(UNIT_FIELD_BYTES_1) | (3 + spellId) );
return;
}
break;
//big gun, its a spell/aura
case GAMEOBJECT_TYPE_GOOBER: //10
//chest locked
case GAMEOBJECT_TYPE_SPELLCASTER: //22
obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
info = obj->GetGOInfo();
if(info)
{
spellId = info->sound0;
if (spellId == 0)
spellId = info->sound3;
guid=_player->GetGUID();
}
break;
//fishing bobber
case GAMEOBJECT_TYPE_FISHINGNODE: //17
{
if(_player->GetGUID() != obj->GetOwnerGUID())
return;
switch(obj->getLootState())
{
case GO_CLOSED: // ready for loot
{
// 1) skill must beb >= base_zone_skill
// 2) if skill == base_zone_skill => 5% chance
// 3) chance is liniar dependence from (base_zone_skill-skill)
int32 skill = _player->GetSkillValue(SKILL_FISHING);
int32 zone_skill = _player->FishingMinSkillForCurrentZone();
int32 chance = skill - zone_skill + 5;
int32 roll = irand(1,100);
DEBUG_LOG("Fishing check (skill: %i zone min skill: %i chance %i roll: %i",skill,zone_skill,chance,roll);
if(skill >= zone_skill && chance >= roll)
{
// prevent removing GO at spell cancel
_player->RemoveGameObject(obj,false);
obj->SetOwnerGUID(_player->GetGUID());
//fish catched
_player->UpdateFishingSkill();
_player->SendLoot(obj->GetGUID(),LOOT_FISHING);
}
else
//.........这里部分代码省略.........
示例7: HandleGameObjectMoveCommand
//move selected object
static bool HandleGameObjectMoveCommand(ChatHandler* handler, const char* args)
{
// number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r
char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject");
if (!cId)
return false;
uint32 lowguid = atoi(cId);
if (!lowguid)
return false;
GameObject* obj = NULL;
// by DB guid
if (GameObjectData const* go_data = sObjectMgr->GetGOData(lowguid))
obj = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid,go_data->id);
if (!obj)
{
handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid);
handler->SetSentErrorMessage(true);
return false;
}
char* px = strtok(NULL, " ");
char* py = strtok(NULL, " ");
char* pz = strtok(NULL, " ");
if (!px)
{
Player *chr = handler->GetSession()->GetPlayer();
obj->Relocate(chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), obj->GetOrientation());
obj->DestroyForNearbyPlayers();
obj->UpdateObjectVisibility();
}
else
{
if (!py || !pz)
return false;
float x = (float)atof(px);
float y = (float)atof(py);
float z = (float)atof(pz);
if (!MapManager::IsValidMapCoord(obj->GetMapId(),x,y,z))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,obj->GetMapId());
handler->SetSentErrorMessage(true);
return false;
}
obj->Relocate(x, y, z, obj->GetOrientation());
obj->DestroyForNearbyPlayers();
obj->UpdateObjectVisibility();
}
obj->SaveToDB();
obj->Refresh();
handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, obj->GetGUIDLow(), obj->GetGOInfo()->name, obj->GetGUIDLow());
return true;
}
示例8: HandleGODelete
bool ChatHandler::HandleGODelete(const char* args, WorldSession* m_session)
{
GameObject* GObj = m_session->GetPlayer()->GetSelectedGo();
if(GObj == NULL)
{
RedSystemMessage(m_session, "No selected GameObject...");
return true;
}
if(GObj->IsInBg())
{
RedSystemMessage(m_session, "GameObjects can't be deleted in Battlegrounds");
return true;
}
if(GObj->m_spawn != NULL && 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 != NULL)
{
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;
}
示例9: HandleGameObjectMoveCommand
//move selected object
static bool HandleGameObjectMoveCommand(ChatHandler* handler, char const* args)
{
// number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r
char* id = handler->extractKeyFromLink((char*)args, "Hgameobject");
if (!id)
return false;
ObjectGuid::LowType guidLow = atoul(id);
if (!guidLow)
return false;
GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
if (!object)
{
handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);
handler->SetSentErrorMessage(true);
return false;
}
char* toX = strtok(nullptr, " ");
char* toY = strtok(nullptr, " ");
char* toZ = strtok(nullptr, " ");
float x, y, z;
if (!toX)
{
Player* player = handler->GetSession()->GetPlayer();
player->GetPosition(x, y, z);
}
else
{
if (!toY || !toZ)
return false;
x = (float)atof(toX);
y = (float)atof(toY);
z = (float)atof(toZ);
if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, object->GetMapId());
handler->SetSentErrorMessage(true);
return false;
}
}
Map* map = object->GetMap();
object->Relocate(x, y, z, object->GetOrientation());
object->SaveToDB();
// Generate a completely new spawn with new guid
// 3.3.5a client caches recently deleted objects and brings them back to life
// when CreateObject block for this guid is received again
// however it entirely skips parsing that block and only uses already known location
object->Delete();
object = new GameObject();
if (!object->LoadFromDB(guidLow, map, true))
{
delete object;
return false;
}
handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name.c_str(), object->GetSpawnId());
return true;
}
示例10: GOMove_Command
static bool GOMove_Command(ChatHandler* handler, const char* args)
{
if (!args)
return false;
char* ID_t = strtok((char*)args, " ");
if (!ID_t)
return false;
uint32 ID = (uint32)atol(ID_t);
char* GObjectID_C = strtok(NULL, " ");
uint32 GObjectID = 0;
bool isHex = false;
if (GObjectID_C)
{
GObjectID = strtoul(GObjectID_C, NULL, 0); // can take in hex as well as dec
isHex = (std::string(GObjectID_C).find("0x") != std::string::npos);
}
char* ARG_t = strtok(NULL, " ");
uint32 ARG = 0;
if (ARG_t)
ARG = (uint32)atol(ARG_t);
WorldSession* session = handler->GetSession();
Player* player = session->GetPlayer();
uint64 playerGUID = player->GetGUID();
if (ID < SPAWN) // no args
{
if (ID >= DELET && ID <= GOTO) // has target (needs retrieve gameobject)
{
GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex);
if (!target)
ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temp(%u)", GObjectID, isHex ? 1 : 0);
else
{
float x,y,z,o;
target->GetPosition(x,y,z,o);
uint32 p = target->GetPhaseMask();
switch(ID)
{
case DELET: DeleteObject(target/*, isHex ? GObjectID : 0*/); SendSelectionInfo(player, GObjectID, isHex, false); break;
case X: SpawnObject(player,player->GetPositionX(),y,z,o,p,true,GObjectID, isHex); break;
case Y: SpawnObject(player,x,player->GetPositionY(),z,o,p,true,GObjectID, isHex); break;
case Z: SpawnObject(player,x,y,player->GetPositionZ(),o,p,true,GObjectID, isHex); break;
case O: SpawnObject(player,x,y,z,player->GetOrientation(),p,true,GObjectID, isHex); break;
case GOTO: player->TeleportTo(target->GetMapId(), x,y,z,o); break;
case RESPAWN: SpawnObject(player,x,y,z,o,p,false,target->GetEntry(), isHex); break;
case GROUND:
{
float ground = target->GetMap()->GetHeight(target->GetPhaseMask(), x, y, MAX_HEIGHT);
if(ground != INVALID_HEIGHT)
SpawnObject(player,x,y,ground,o,p,true,GObjectID, isHex);
} break;
}
}
}
else
{
switch(ID)
{
case TEST: session->SendAreaTriggerMessage(player->GetName().c_str()); break;
case FACE: { float piper2 = M_PI/2; float multi = player->GetOrientation()/piper2; float multi_int = floor(multi); float new_ori = (multi-multi_int > 0.5f) ? (multi_int+1)*piper2 : multi_int*piper2; player->SetFacingTo(new_ori); } break;
case SAVE: SaveObject(player, GObjectID, isHex); break;
case SELECTNEAR:
{
GameObject* object = handler->GetNearbyGameObject();
object = GetClosestGObjectID(player, object);
if (!object)
ChatHandler(player->GetSession()).PSendSysMessage("No objects found");
else
{
bool isHex = (object->GetGUIDHigh() != HIGHGUID_GAMEOBJECT);
SendSelectionInfo(player, isHex ? object->GetGUIDHigh() : object->GetDBTableGUIDLow() ? object->GetDBTableGUIDLow() : object->GetGUIDLow(), isHex, true);
session->SendAreaTriggerMessage("Selected %s", object->GetName().c_str());
}
} break;
}
}
}
else if (ARG && ID >= SPAWN)
{
if (ID >= NORTH && ID <= PHASE)
{
GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex);
if (!target)
ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temporary: %s", GObjectID, isHex ? "true" : "false");
else
{
float x,y,z,o;
target->GetPosition(x,y,z,o);
uint32 p = target->GetPhaseMask();
switch(ID)
{
case NORTH: SpawnObject(player,x+((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break;
case EAST: SpawnObject(player,x,y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
case SOUTH: SpawnObject(player,x-((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break;
case WEST: SpawnObject(player,x,y+((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
case NORTHEAST: SpawnObject(player,x+((float)ARG/100),y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
//.........这里部分代码省略.........
示例11: HandleGODelete
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session)
{
GameObject *GObj = m_session->GetPlayer()->GetSelectedGo();
if( GObj == NULL )
{
RedSystemMessage(m_session, "No selected GameObject...");
return true;
}
if( GObj->m_spawn != NULL && 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 != NULL )
{
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;
}
}
GObj->Despawn(0, 0); // We do not need to delete the object because GameObject::Despawn with no time => ExpireAndDelete() => _Expire() => delete GObj;
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);
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;
}
示例12: HandleGameObjectUseOpcode
void WorldSession::HandleGameObjectUseOpcode( WorldPacket & recv_data )
{
CHECK_PACKET_SIZE(recv_data,8);
uint64 guid;
uint32 spellId = OPEN_CHEST;
const GameObjectInfo *info;
recv_data >> guid;
sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_USE Message [guid=%u]", guid);
GameObject *obj = ObjectAccessor::GetGameObject(*_player, guid);
if(!obj) return;
//obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
//obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
// default spell caster is player that use GO
Unit* spellCaster = GetPlayer();
// default spell target is player that use GO
Unit* spellTarget = GetPlayer();
if (Script->GOHello(_player, obj))
return;
switch(obj->GetGoType())
{
case GAMEOBJECT_TYPE_DOOR: //0
obj->SetUInt32Value(GAMEOBJECT_FLAGS,33);
obj->SetUInt32Value(GAMEOBJECT_STATE,0); //open
//obj->SetUInt32Value(GAMEOBJECT_TIMESTAMP,0x465EE6D2); //load timestamp
obj->SetLootState(GO_CLOSED);
obj->SetRespawnTime(5); //close door in 5 seconds
return;
case GAMEOBJECT_TYPE_BUTTON: //1
obj->SetUInt32Value(GAMEOBJECT_FLAGS,33);
obj->SetUInt32Value(GAMEOBJECT_STATE,0); //open
obj->SetLootState(GO_CLOSED);
obj->SetRespawnTime(2); //close in 1 seconds
// activate script
sWorld.ScriptsStart(sButtonScripts, obj->GetDBTableGUIDLow(), spellCaster, obj);
return;
case GAMEOBJECT_TYPE_QUESTGIVER: //2
_player->PrepareQuestMenu( guid );
_player->SendPreparedQuest( guid );
return;
//Sitting: Wooden bench, chairs enzz
case GAMEOBJECT_TYPE_CHAIR: //7
info = obj->GetGOInfo();
if(info)
{
//spellId = info->data0; // this is not a spell or offset
_player->TeleportTo(obj->GetMapId(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),false,false);
_player->SetFlag(UNIT_FIELD_BYTES_1,PLAYER_STATE_SIT_LOW_CHAIR); // Using (3 + spellId) was wrong, this is a number of slot for chair/bench, not offset
_player->SetStandState(PLAYER_STATE_SIT_LOW_CHAIR);
return;
}
break;
//big gun, its a spell/aura
case GAMEOBJECT_TYPE_GOOBER: //10
info = obj->GetGOInfo();
spellId = info ? info->data10 : 0;
break;
case GAMEOBJECT_TYPE_SPELLCASTER: //22
obj->SetUInt32Value(GAMEOBJECT_FLAGS,2);
info = obj->GetGOInfo();
if(info)
{
spellId = info->data0;
if (spellId == 0)
spellId = info->data3;
//guid=_player->GetGUID();
}
break;
case GAMEOBJECT_TYPE_CAMERA: //13
info = obj->GetGOInfo();
if(info)
{
uint32 cinematic_id = info->data1;
if(cinematic_id)
{
WorldPacket data(SMSG_TRIGGER_CINEMATIC, 4);
data << cinematic_id;
_player->GetSession()->SendPacket(&data);
}
return;
}
break;
//.........这里部分代码省略.........
示例13: HandleGameObjectMoveCommand
//move selected object
static bool HandleGameObjectMoveCommand(ChatHandler* handler, char const* args)
{
// number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r
char* id = handler->extractKeyFromLink((char*)args, "Hgameobject");
if (!id)
return false;
uint32 guidLow = atoi(id);
if (!guidLow)
return false;
GameObject* object = nullptr;
// by DB guid
if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow))
object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id);
if (!object)
{
handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);
handler->SetSentErrorMessage(true);
return false;
}
char* toX = strtok(nullptr, " ");
char* toY = strtok(nullptr, " ");
char* toZ = strtok(nullptr, " ");
if (!toX)
{
Player* player = handler->GetSession()->GetPlayer();
object->GetMap()->GameObjectRelocation(object, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), object->GetOrientation());
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
}
else
{
if (!toY || !toZ)
return false;
float x = (float)atof(toX);
float y = (float)atof(toY);
float z = (float)atof(toZ);
if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, object->GetMapId());
handler->SetSentErrorMessage(true);
return false;
}
object->GetMap()->GameObjectRelocation(object, x, y, z, object->GetOrientation());
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
}
object->SaveToDB();
object->Refresh();
handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow());
return true;
}