本文整理汇总了C++中GameObject::GetEntry方法的典型用法代码示例。如果您正苦于以下问题:C++ GameObject::GetEntry方法的具体用法?C++ GameObject::GetEntry怎么用?C++ GameObject::GetEntry使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameObject
的用法示例。
在下文中一共展示了GameObject::GetEntry方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateGOPassenger
GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data)
{
Map* map = GetMap();
GameObject* go = new GameObject();
if (!go->LoadGameObjectFromDB(guid, map, false))
{
delete go;
return NULL;
}
float x = data->posX;
float y = data->posY;
float z = data->posZ;
float o = data->orientation;
go->SetTransport(this);
go->m_movementInfo.transport.guid = GetGUID();
go->m_movementInfo.transport.pos.Relocate(x, y, z, o); // m_movementInfo.transport.pos.m_positionX = offset
go->m_movementInfo.transport.seat = -1;
CalculatePassengerPosition(x, y, z, &o); // This method transforms supplied transport offsets into global coordinates offset > worldpos
go->Relocate(x, y, z, o); // me->m_positionX = worldpos
go->RelocateStationaryPosition(x, y, z, o); // this->gameobject->m_stationaryPosition x=worldpos
go->m_updateFlag |= UPDATEFLAG_GO_TRANSPORT_POSITION;
if (!go->IsPositionValid())
{
TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY());
delete go;
return NULL;
}
if (!map->AddToMap(go))
{
delete go;
return NULL;
}
_staticPassengers.insert(go);
return go;
}
示例2: HandleGameobjectReportUse
void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket)
{
ObjectGuid guid;
recvPacket >> guid;
DEBUG_LOG("WORLD: Received opcode CMSG_GAMEOBJ_REPORT_USE guid: %s", guid.GetString().c_str());
// ignore for remote control state
if (!_player->IsSelfMover())
return;
GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);
if (!go)
return;
if (!go->IsWithinDistInMap(_player, INTERACTION_DISTANCE))
return;
_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT, go->GetEntry());
}
示例3: HandleGameobjectReportUse
void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket)
{
uint64 guid;
recvPacket >> guid;
sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_REPORT_USE Message [in game guid: %u]", GUID_LOPART(guid));
// ignore for remote control state
if(_player->m_mover != _player)
return;
GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);
if(!go)
return;
if(!go->IsWithinDistInMap(_player,INTERACTION_DISTANCE))
return;
_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT, go->GetEntry());
}
示例4: 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);
}
}
示例5: HandleGameObjectUseOpcode
void WorldSession::HandleGameObjectUseOpcode( WorldPacket & recv_data )
{
ObjectGuid guid;
recv_data >> guid;
DEBUG_LOG("WORLD: Recvd CMSG_GAMEOBJ_USE Message guid: %s", guid.GetString().c_str());
// ignore for remote control state
if (!_player->IsSelfMover())
return;
GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid);
if(!obj)
return;
// Never expect this opcode for some type GO's
if (obj->GetGoType() == GAMEOBJECT_TYPE_GENERIC)
{
sLog.outError("HandleGameObjectUseOpcode: CMSG_GAMEOBJ_USE for not allowed GameObject type %u (Entry %u), didn't expect this to happen.", obj->GetGoType(), obj->GetEntry());
return;
}
obj->Use(_player);
}
示例6: HandleGOSpawn
bool ChatHandler::HandleGOSpawn(const char* args, WorldSession* m_session)
{
std::stringstream sstext;
char* pEntryID = strtok((char*)args, " ");
if(!pEntryID)
return false;
uint32 EntryID = atoi(pEntryID);
bool Save = false;
char* pSave = strtok(NULL, " ");
if(pSave)
Save = (atoi(pSave) > 0 ? true : false);
GameObjectInfo* goi = GameObjectNameStorage.LookupEntry(EntryID);
if(!goi)
{
sstext << "GameObject Info '" << EntryID << "' Not Found" << '\0';
SystemMessage(m_session, sstext.str().c_str());
return true;
}
LOG_DEBUG("Spawning GameObject By Entry '%u'", EntryID);
sstext << "Spawning GameObject By Entry '" << EntryID << "'" << '\0';
SystemMessage(m_session, sstext.str().c_str());
Player* chr = m_session->GetPlayer();
GameObject* go = chr->GetMapMgr()->CreateGameObject(EntryID);
uint32 mapid = chr->GetMapId();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
go->CreateFromProto(EntryID, mapid, x, y, z, o);
go->PushToWorld(chr->GetMapMgr());
go->Phase(PHASE_SET, chr->GetPhase());
// Create spawn instance
GOSpawn* gs = new GOSpawn;
gs->entry = go->GetEntry();
gs->facing = go->GetOrientation();
gs->faction = go->GetFaction();
gs->flags = go->GetUInt32Value(GAMEOBJECT_FLAGS);
gs->id = objmgr.GenerateGameObjectSpawnID();
gs->o = 0.0f;
gs->o1 = go->GetParentRotation(0);
gs->o2 = go->GetParentRotation(2);
gs->o3 = go->GetParentRotation(3);
gs->scale = go->GetScale();
gs->x = go->GetPositionX();
gs->y = go->GetPositionY();
gs->z = go->GetPositionZ();
gs->state = go->GetByte(GAMEOBJECT_BYTES_1, 0);
//gs->stateNpcLink = 0;
gs->phase = go->GetPhase();
gs->overrides = go->GetOverrides();
uint32 cx = chr->GetMapMgr()->GetPosX(chr->GetPositionX());
uint32 cy = chr->GetMapMgr()->GetPosY(chr->GetPositionY());
chr->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cx, cy)->GOSpawns.push_back(gs);
go->m_spawn = gs;
MapCell* mCell = chr->GetMapMgr()->GetCell(cx, cy);
if(mCell != NULL)
mCell->SetLoaded();
if(Save == true)
{
// If we're saving, create template and add index
go->SaveToDB();
go->m_loadedFromDB = true;
}
sGMLog.writefromsession(m_session, "spawned gameobject %s, entry %u at %u %f %f %f%s", GameObjectNameStorage.LookupEntry(gs->entry)->Name, gs->entry, chr->GetMapId(), gs->x, gs->y, gs->z, Save ? ", saved in DB" : "");
return true;
}
示例7: Dragonspireroomcheck
void Dragonspireroomcheck()
{
Creature* mob = NULL;
GameObject* rune = NULL;
for (uint8 i = 0; i < 7; ++i)
{
bool _mobAlive = false;
rune = instance->GetGameObject(go_roomrunes[i]);
if (rune && rune->GetGoState() == GO_STATE_ACTIVE)
{
for (uint8 ii = 0; ii < 5; ++ii)
{
mob = instance->GetCreature(runecreaturelist[i][ii]);
if (mob && mob->IsAlive())
_mobAlive = true;
}
}
if (!_mobAlive && rune->GetGoState() == GO_STATE_ACTIVE)
{
HandleGameObject(0, false, rune);
switch (rune->GetEntry())
{
case GO_HALL_RUNE_1:
SetBossState(DATA_HALL_RUNE_1, DONE);
break;
case GO_HALL_RUNE_2:
SetBossState(DATA_HALL_RUNE_2, DONE);
break;
case GO_HALL_RUNE_3:
SetBossState(DATA_HALL_RUNE_3, DONE);
break;
case GO_HALL_RUNE_4:
SetBossState(DATA_HALL_RUNE_4, DONE);
break;
case GO_HALL_RUNE_5:
SetBossState(DATA_HALL_RUNE_5, DONE);
break;
case GO_HALL_RUNE_6:
SetBossState(DATA_HALL_RUNE_6, DONE);
break;
case GO_HALL_RUNE_7:
SetBossState(DATA_HALL_RUNE_7, DONE);
break;
default:
break;
}
}
}
if (GetBossState(DATA_HALL_RUNE_1) == DONE && GetBossState(DATA_HALL_RUNE_2) == DONE && GetBossState(DATA_HALL_RUNE_3) == DONE &&
GetBossState(DATA_HALL_RUNE_4) == DONE && GetBossState(DATA_HALL_RUNE_5) == DONE && GetBossState(DATA_HALL_RUNE_6) == DONE &&
GetBossState(DATA_HALL_RUNE_7) == DONE)
{
SetBossState(DATA_DRAGONSPIRE_ROOM, DONE);
if (GameObject* door1 = instance->GetGameObject(go_emberseerin))
HandleGameObject(0, true, door1);
if (GameObject* door2 = instance->GetGameObject(go_doors))
HandleGameObject(0, true, door2);
}
}
示例8: UseFishingNode
void GameObject::UseFishingNode(Player *player)
{
sEventMgr.RemoveEvents( this );
if( GetUInt32Value( GAMEOBJECT_FLAGS ) != 32 ) // Clicking on the bobber before something is hooked
{
player->GetSession()->OutPacket( SMSG_FISH_NOT_HOOKED );
EndFishing( player, true );
return;
}
/* Unused code: sAreaStore.LookupEntry(GetMapMgr()->GetAreaID(GetPositionX(),GetPositionY()))->ZoneId*/
uint32 zone = player->GetAreaID();
if( zone == 0 ) // If the player's area ID is 0, use the zone ID instead
zone = player->GetZoneId();
FishingZoneEntry *entry = FishingZoneStorage.LookupEntry( zone );
if( entry == NULL ) // No fishing information found for area or zone, log an error, and end fishing
{
sLog.outError( "ERROR: Fishing zone information for zone %d not found!", zone );
EndFishing( player, true );
return;
}
uint32 maxskill = entry->MaxSkill;
uint32 minskill = entry->MinSkill;
if( player->_GetSkillLineCurrent( SKILL_FISHING, false ) < maxskill )
player->_AdvanceSkillLine( SKILL_FISHING, float2int32( 1.0f * sWorld.getRate( RATE_SKILLRATE ) ) );
GameObject * school = NULL;
this->AquireInrangeLock(); //make sure to release lock before exit function !
for ( InRangeSet::iterator it = GetInRangeSetBegin(); it != GetInRangeSetEnd(); ++it )
{
if ( (*it) == NULL || (*it)->GetTypeId() != TYPEID_GAMEOBJECT || (*it)->GetUInt32Value(GAMEOBJECT_TYPE_ID) != GAMEOBJECT_TYPE_FISHINGHOLE)
continue;
school = static_cast<GameObject *>( *it );
if ( !isInRange( school, (float)school->GetInfo()->sound1 ) )
{
school = NULL;
continue;
}
else
break;
}
this->ReleaseInrangeLock();
if ( school != NULL ) // open school loot if school exists
{
lootmgr.FillGOLoot( &school->loot, school->GetEntry(), school->GetMapMgr() ? ( school->GetMapMgr()->iInstanceMode ? true : false ) : false );
player->SendLoot( school->GetGUID(), LOOT_FISHING );
EndFishing( player, false );
school->CatchFish();
if ( !school->CanFish() )
sEventMgr.AddEvent( school, &GameObject::Despawn, ( 1800000 + RandomUInt( 3600000 ) ), EVENT_GAMEOBJECT_EXPIRE, 10000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT ); // respawn in 30 - 90 minutes
}
else if( Rand( ( ( player->_GetSkillLineCurrent( SKILL_FISHING, true ) - minskill ) * 100 ) / maxskill ) ) // Open loot on success, otherwise FISH_ESCAPED.
{
lootmgr.FillFishingLoot( &loot, zone );
player->SendLoot( GetGUID(), LOOT_FISHING );
EndFishing( player, false );
}
else // Failed
{
player->GetSession()->OutPacket( SMSG_FISH_ESCAPED );
EndFishing( player, true );
}
}
示例9: SendSelectionInfo
static void SendSelectionInfo(Player* player, uint32 GObjectID, bool isHex, bool add) // Sends an addon message for selected objects list
{
if (!player || !GObjectID)
return;
std::ostringstream ss;
if (!add)
if(!isHex)
ss << "GOMOVE|REMOVE|" << std::dec << (uint32)GObjectID <<"||0";
else
ss << "GOMOVE|REMOVE|" << "0x" << std::hex << GObjectID <<"||0";
else
{
GameObject* object = GetObjectByGObjectID(player, GObjectID, isHex);
if(!object)
return;
if(!isHex)
ss <<"GOMOVE|ADD|" << std::dec << (uint32)GObjectID << std::dec <<"|"<< object->GetName() <<"|"<< object->GetEntry();
else
ss <<"GOMOVE|ADD|" << "0x" << std::hex << GObjectID << std::dec <<"|"<< object->GetName() <<"|"<< object->GetEntry();
}
SendAddonMessage(player, ss.str().c_str());
}
示例10: HandleGOInfo
bool ChatHandler::HandleGOInfo(const char *args, WorldSession *m_session)
{
std::stringstream sstext;
GameObjectInfo *GOInfo = NULL;
GameObject *GObj = NULL;
GObj = m_session->GetPlayer()->m_GM_SelectedGO;
if( !GObj )
{
RedSystemMessage(m_session, "No selected GameObject...");
return true;
}
sstext
<< MSG_COLOR_SUBWHITE << "Informations:\n"
<< MSG_COLOR_GREEN << "Entry: " << MSG_COLOR_LIGHTBLUE << GObj->GetEntry() << "\n"
<< MSG_COLOR_GREEN << "Model: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_DISPLAYID)<< "\n"
<< MSG_COLOR_GREEN << "State: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_STATE)<< "\n"
<< MSG_COLOR_GREEN << "flags: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_FLAGS)<< "\n"
<< MSG_COLOR_GREEN << "dynflags:" << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_DYN_FLAGS) << "\n"
<< MSG_COLOR_GREEN << "faction: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_FACTION)<< "\n"
<< MSG_COLOR_GREEN << "Type: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_TYPE_ID) << " -- ";
switch( GObj->GetUInt32Value(GAMEOBJECT_TYPE_ID) )
{
case GAMEOBJECT_TYPE_DOOR: sstext << "Door"; break;
case GAMEOBJECT_TYPE_BUTTON: sstext << "Button"; break;
case GAMEOBJECT_TYPE_QUESTGIVER: sstext << "Quest Giver"; break;
case GAMEOBJECT_TYPE_CHEST: sstext << "Chest"; break;
case GAMEOBJECT_TYPE_BINDER: sstext << "Binder"; break;
case GAMEOBJECT_TYPE_GENERIC: sstext << "Generic"; break;
case GAMEOBJECT_TYPE_TRAP: sstext << "Trap"; break;
case GAMEOBJECT_TYPE_CHAIR: sstext << "Chair"; break;
case GAMEOBJECT_TYPE_SPELL_FOCUS: sstext << "Spell Focus"; break;
case GAMEOBJECT_TYPE_TEXT: sstext << "Text"; break;
case GAMEOBJECT_TYPE_GOOBER: sstext << "Goober"; break;
case GAMEOBJECT_TYPE_TRANSPORT: sstext << "Transport"; break;
case GAMEOBJECT_TYPE_AREADAMAGE: sstext << "Area Damage"; break;
case GAMEOBJECT_TYPE_CAMERA: sstext << "Camera"; break;
case GAMEOBJECT_TYPE_MAP_OBJECT: sstext << "Map Object"; break;
case GAMEOBJECT_TYPE_MO_TRANSPORT: sstext << "Mo Transport"; break;
case GAMEOBJECT_TYPE_DUEL_ARBITER: sstext << "Duel Arbiter"; break;
case GAMEOBJECT_TYPE_FISHINGNODE: sstext << "Fishing Node"; break;
case GAMEOBJECT_TYPE_RITUAL: sstext << "Ritual"; break;
case GAMEOBJECT_TYPE_MAILBOX: sstext << "Mailbox"; break;
case GAMEOBJECT_TYPE_AUCTIONHOUSE: sstext << "Auction House"; break;
case GAMEOBJECT_TYPE_GUARDPOST: sstext << "Guard Post"; break;
case GAMEOBJECT_TYPE_SPELLCASTER: sstext << "Spell Caster"; break;
case GAMEOBJECT_TYPE_MEETINGSTONE: sstext << "Meeting Stone"; break;
case GAMEOBJECT_TYPE_FLAGSTAND: sstext << "Flag Stand"; break;
case GAMEOBJECT_TYPE_FISHINGHOLE: sstext << "Fishing Hole"; break;
case GAMEOBJECT_TYPE_FLAGDROP: sstext << "Flag Drop"; break;
default: sstext << "Unknown."; break;
}
sstext
<< "\n"
<< MSG_COLOR_GREEN << "Distance: " << MSG_COLOR_LIGHTBLUE << GObj->CalcDistance((Object*)m_session->GetPlayer());
GOInfo = GameObjectNameStorage.LookupEntry(GObj->GetEntry());
if( !GOInfo )
{
RedSystemMessage(m_session, "This GameObject doesn't have template, you won't be able to get some informations nor to spawn a GO with this entry.");
sstext << "|r";
SystemMessage(m_session, sstext.str().c_str());
return true;
}
sstext
<< "\n"
<< MSG_COLOR_GREEN << "Name: " << MSG_COLOR_LIGHTBLUE << GOInfo->Name << "\n"
<< MSG_COLOR_GREEN << "Size: " << MSG_COLOR_LIGHTBLUE << GObj->GetFloatValue(OBJECT_FIELD_SCALE_X) << "\n"
<< "|r";
SystemMessage(m_session, sstext.str().c_str());
return true;
}
示例11: HandleGOInfo
bool ChatHandler::HandleGOInfo(const char *args, WorldSession *m_session)
{
std::stringstream sstext;
GameObject *GObj = NULL;
GObj = m_session->GetPlayer()->m_GM_SelectedGO;
if( !GObj )
{
RedSystemMessage(m_session, "No selected GameObject...");
return true;
}
WhiteSystemMessage(m_session, "Information:");
if(GObj->m_spawn)
GreenSystemMessage(m_session, "SpawnID: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->m_spawn->id);
GreenSystemMessage(m_session, "Entry: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetEntry());
GreenSystemMessage(m_session, "Model: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetDisplayId());
GreenSystemMessage(m_session, "State: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetState());
GreenSystemMessage(m_session, "flags: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetFlags());
GreenSystemMessage(m_session, "dynflags: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetUInt32Value(GAMEOBJECT_DYNAMIC));
GreenSystemMessage(m_session, "faction: %s%u|r", MSG_COLOR_LIGHTBLUE, GObj->GetUInt32Value(GAMEOBJECT_FACTION));
std::stringstream gottext;
uint8 type = GObj->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_TYPE_ID);
switch(type)
{
case GAMEOBJECT_TYPE_DOOR:
gottext << "Door";
break;
case GAMEOBJECT_TYPE_BUTTON:
gottext << "Button";
break;
case GAMEOBJECT_TYPE_QUESTGIVER:
gottext << "Quest Giver";
break;
case GAMEOBJECT_TYPE_CHEST:
gottext << "Chest";
break;
case GAMEOBJECT_TYPE_BINDER:
gottext << "Binder";
break;
case GAMEOBJECT_TYPE_GENERIC:
gottext << "Generic";
break;
case GAMEOBJECT_TYPE_TRAP:
gottext << "Trap";
break;
case GAMEOBJECT_TYPE_CHAIR:
gottext << "Chair";
break;
case GAMEOBJECT_TYPE_SPELL_FOCUS:
gottext << "Spell Focus";
break;
case GAMEOBJECT_TYPE_TEXT:
gottext << "Text";
break;
case GAMEOBJECT_TYPE_GOOBER:
gottext << "Goober";
break;
case GAMEOBJECT_TYPE_TRANSPORT:
gottext << "Transport";
break;
case GAMEOBJECT_TYPE_AREADAMAGE:
gottext << "Area Damage";
break;
case GAMEOBJECT_TYPE_CAMERA:
gottext << "Camera";
break;
case GAMEOBJECT_TYPE_MAP_OBJECT:
gottext << "Map Object";
break;
case GAMEOBJECT_TYPE_MO_TRANSPORT:
gottext << "Mo Transport";
break;
case GAMEOBJECT_TYPE_DUEL_ARBITER:
gottext << "Duel Arbiter";
break;
case GAMEOBJECT_TYPE_FISHINGNODE:
gottext << "Fishing Node";
break;
case GAMEOBJECT_TYPE_RITUAL:
gottext << "Ritual";
break;
case GAMEOBJECT_TYPE_MAILBOX:
gottext << "Mailbox";
break;
case GAMEOBJECT_TYPE_AUCTIONHOUSE:
gottext << "Auction House";
break;
case GAMEOBJECT_TYPE_GUARDPOST:
gottext << "Guard Post";
break;
case GAMEOBJECT_TYPE_SPELLCASTER:
gottext << "Spell Caster";
break;
case GAMEOBJECT_TYPE_MEETINGSTONE:
gottext << "Meeting Stone";
break;
case GAMEOBJECT_TYPE_FLAGSTAND:
gottext << "Flag Stand";
//.........这里部分代码省略.........
示例12: HandleGOSpawn
bool ChatHandler::HandleGOSpawn(const char *args, WorldSession *m_session)
{
if(!args)
return false;
char* pEntryID = strtok((char*)args, " ");
if (!pEntryID)
return false;
uint32 EntryID = atoi(pEntryID);
if((GameObjectNameStorage.LookupEntry(EntryID) == NULL) || (objmgr.SQLCheckExists("gameobject_names", "entry", EntryID) == NULL))
{
RedSystemMessage(m_session, "Invalid Gameobject ID(%u).", EntryID);
return true;
}
bool Save = m_session->HasGMPermissions() ? true : false;
char* pSave = strtok(NULL, " ");
if(pSave)
Save = (atoi(pSave) > 0 ? true : false);
GameObject* go = m_session->GetPlayer()->GetMapMgr()->CreateGameObject(EntryID);
if(go == NULL)
{
RedSystemMessage(m_session, "Spawn of Gameobject(%u) failed.", EntryID);
return true;
}
go->Init();
Player* chr = m_session->GetPlayer();
uint32 mapid = chr->GetMapId();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
go->CreateFromProto(EntryID,mapid,x,y,z,o);
BlueSystemMessage(m_session, "Spawning Gameobject(%u) at current position", EntryID);
if(Save == true) // If we're saving, create template and add index
{
// Create spawn instance
GOSpawn *gs = new GOSpawn;
gs->entry = go->GetEntry();
gs->facing = go->GetOrientation();
gs->faction = go->GetUInt32Value(GAMEOBJECT_FACTION);
gs->flags = go->GetUInt32Value(GAMEOBJECT_FLAGS);
gs->id = objmgr.GenerateGameObjectSpawnID();
gs->scale = go->GetFloatValue(OBJECT_FIELD_SCALE_X);
gs->x = x;
gs->y = y;
gs->z = z;
gs->state = go->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_STATE);
gs->phase = chr->GetPhaseMask();
go->Load(gs);
go->SaveToDB();
uint32 cx = chr->GetMapMgr()->GetPosX(x);
uint32 cy = chr->GetMapMgr()->GetPosY(y);
chr->GetMapMgr()->AddGoSpawn(cx, cy, gs);
}
go->SetPhaseMask(chr->GetPhaseMask());
go->SetInstanceID(chr->GetInstanceID());
go->PushToWorld(m_session->GetPlayer()->GetMapMgr());
sWorld.LogGM(m_session, "Spawned gameobject %u at %f %f %f (%s)", EntryID, x, y, z, Save ? "Saved" : "Not Saved");
return true;
}
示例13: 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;
/* 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;
}
示例14: HandleGOScale
bool ChatHandler::HandleGOScale(const char* args, WorldSession* m_session)
{
GameObject* go = m_session->GetPlayer()->GetSelectedGo();
if(!go)
{
RedSystemMessage(m_session, "No selected GameObject...");
return true;
}
if(!args)
{
RedSystemMessage(m_session, "Invalid syntax. Should be .gobject scale 1.0");
return false;
}
float scale = (float)atof(args);
if(!scale) scale = 1;
go->SetScale(scale);
BlueSystemMessage(m_session, "Set scale to %.3f", scale);
sGMLog.writefromsession(m_session, "set scale on gameobject %s to %.3f, entry %u", GameObjectNameStorage.LookupEntry(go->GetEntry())->Name, scale, go->GetEntry());
uint32 NewGuid = m_session->GetPlayer()->GetMapMgr()->GenerateGameobjectGuid();
go->RemoveFromWorld(true);
go->SetNewGuid(NewGuid);
go->PushToWorld(m_session->GetPlayer()->GetMapMgr());
go->SaveToDB();
//lets reselect the object that can be really annoying...
m_session->GetPlayer()->m_GM_SelectedGO = NewGuid;
return true;
}
示例15: 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;
//.........这里部分代码省略.........