本文整理汇总了C++中Transporter::GetMapId方法的典型用法代码示例。如果您正苦于以下问题:C++ Transporter::GetMapId方法的具体用法?C++ Transporter::GetMapId怎么用?C++ Transporter::GetMapId使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Transporter
的用法示例。
在下文中一共展示了Transporter::GetMapId方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleMoveWorldportAckOpcode
void WorldSession::HandleMoveWorldportAckOpcode( WorldPacket & recv_data )
{
GetPlayer()->SetPlayerStatus(NONE);
if(_player->IsInWorld())
{
// get outta here
return;
}
sLog.outDebug( "WORLD: got MSG_MOVE_WORLDPORT_ACK." );
if(_player->m_CurrentTransporter && _player->GetMapId() != _player->m_CurrentTransporter->GetMapId())
{
/* wow, our pc must really suck. */
Transporter * pTrans = _player->m_CurrentTransporter;
float c_tposx = pTrans->GetPositionX() + _player->m_TransporterX;
float c_tposy = pTrans->GetPositionY() + _player->m_TransporterY;
float c_tposz = pTrans->GetPositionZ() + _player->m_TransporterZ;
WorldPacket dataw(SMSG_NEW_WORLD, 20);
dataw << pTrans->GetMapId() << c_tposx << c_tposy << c_tposz << _player->GetOrientation();
SendPacket(&dataw);
}
else
{
_player->m_TeleportState = 2;
_player->AddToWorld();
}
}
示例2: LoadTransportInInstance
Transporter* ObjectMgr::LoadTransportInInstance(MapMgr *instance, uint32 goEntry, uint32 period)
{
auto gameobject_info = sMySQLStore.getGameObjectProperties(goEntry);
if (gameobject_info == nullptr)
{
LOG_ERROR("Transport ID:%u, will not be loaded, gameobject_properties missing", goEntry);
return NULL;
}
if (gameobject_info->type != GAMEOBJECT_TYPE_MO_TRANSPORT)
{
LOG_ERROR("Transport ID:%u, Name: %s, will not be loaded, gameobject_properties type wrong", goEntry, gameobject_info->name.c_str());
return NULL;
}
std::set<uint32> mapsUsed;
Transporter* t = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER << 32 | goEntry);
// Generate waypoints
if (!t->GenerateWaypoints(gameobject_info->mo_transport.taxi_path_id))
{
LOG_ERROR("Transport ID:%u, Name: %s, failed to create waypoints", gameobject_info->entry, gameobject_info->name.c_str());
delete t;
return NULL;
}
// Create Transporter
if (!t->Create(goEntry, period))
{
delete t;
return NULL;
}
m_Transporters.insert(t);
m_TransportersByInstanceIdMap[instance->GetInstanceID()].insert(t);
AddTransport(t);
// AddObject To World
t->AddToWorld(instance);
// correct incorrect instance id's
t->SetInstanceID(instance->GetInstanceID());
t->SetMapId(t->GetMapId());
t->BuildStartMovePacket(instance);
t->BuildStopMovePacket(instance);
t->m_WayPoints.clear(); // Make transport stopped at server-side, movement will be handled by scripts
LogDetail("Transport Handler : Spawned Transport Entry %u, map %u, instance id %u", goEntry, t->GetMapId(), t->GetInstanceID());
return t;
}
示例3: FullLogin
void WorldSession::FullLogin(Player* plr)
{
DEBUG_LOG("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
// copy to movement array
plr->movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
memcpy(&plr->movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
WorldPacket datab(MSG_SET_DUNGEON_DIFFICULTY, 20);
datab << plr->iInstanceType;
datab << uint32(0x01);
datab << uint32(0x00);
SendPacket(&datab);
WorldPacket datac(MSG_SET_RAID_DIFFICULTY, 20);
datac << plr->iRaidType;
datac << uint32(0x01);
datac << uint32(0x00);
SendPacket(&datac);
// Send first line of MOTD
WorldPacket datat(SMSG_MOTD, sizeof(sWorld.GetMotd()) + 4);
datat << uint32(0x04);
datat << sWorld.GetMotd();
SendPacket(&datat);
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
//////////////////////////////////////////////////////////////////////////////////////////////////////
// send voicechat state - active/inactive
//
// {SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
// |------------------------------------------------|----------------|
// |00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
// |------------------------------------------------|----------------|
// |02 01 |.. |
// -------------------------------------------------------------------
//
//
// Old packetdump is OLD. This is probably from 2.2.0 (that was the patch when it was added to wow)!
//
//////////////////////////////////////////////////////////////////////////////////////////////////////
plr->UpdateAttackSpeed();
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == NULL)
{
info = new PlayerInfo;
memset(info, 0, sizeof(PlayerInfo));
info->cl = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
objmgr.AddPlayerInfo(info);
}
plr->m_playerInfo = info;
if(plr->m_playerInfo->guild)
{
plr->m_uint32Values[PLAYER_GUILDID] = plr->m_playerInfo->guild->GetGuildId();
plr->m_uint32Values[PLAYER_GUILDRANK] = plr->m_playerInfo->guildRank->iId;
}
for(uint32 z = 0; z < NUM_ARENA_TEAM_TYPES; ++z)
{
if(_player->m_playerInfo->arenaTeam[z] != NULL)
{
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7), _player->m_playerInfo->arenaTeam[z]->m_id);
if(_player->m_playerInfo->arenaTeam[z]->m_leader == _player->GetLowGUID())
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 0);
else
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 1);
}
}
info->m_loggedInPlayer = plr;
// account data == UI config
if(sWorld.m_useAccountData)
{
WorldPacket data(SMSG_ACCOUNT_DATA_TIMES, 4+1+4+8*4);
MD5Hash md5hash;
data << uint32(UNIXTIME) << uint8(1) << uint32(0xEA);
for (int i = 0; i < 8; i++)
//.........这里部分代码省略.........
示例4: FullLogin
void WorldSession::FullLogin(Player * plr)
{
Log.Debug("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
// copy to movement array
movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
memcpy(&movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
#ifndef USING_BIG_ENDIAN
StackWorldPacket<20> datab(CMSG_DUNGEON_DIFFICULTY);
#else
WorldPacket datab(CMSG_DUNGEON_DIFFICULTY, 20);
#endif
datab << plr->iInstanceType;
datab << uint32(0x01);
datab << uint32(0x00);
SendPacket(&datab);
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
// send voicechat state - active/inactive
/*
{SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
|------------------------------------------------|----------------|
|00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
|------------------------------------------------|----------------|
|02 01 |.. |
-------------------------------------------------------------------
*/
#ifdef VOICE_CHAT
datab.Initialize(SMSG_VOICE_SYSTEM_STATUS);
datab << uint8(2) << uint8(sVoiceChatHandler.CanUseVoiceChat() ? 1 : 0);
SendPacket(&datab);
#else
datab.Initialize(SMSG_VOICE_SYSTEM_STATUS);
datab << uint8(2) << uint8(0);
#endif
plr->UpdateAttackSpeed();
/*if(plr->getLevel()>70)
plr->SetUInt32Value(UNIT_FIELD_LEVEL,70);*/
// enable trigger cheat by default
plr->triggerpass_cheat = HasGMPermissions();
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == 0)
{
info = new PlayerInfo;
info->cl = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
info->guild=NULL;
info->guildRank=NULL;
info->guildMember=NULL;
info->m_Group=0;
info->subGroup=0;
objmgr.AddPlayerInfo(info);
}
plr->m_playerInfo = info;
if(plr->m_playerInfo->guild)
{
plr->m_uint32Values[PLAYER_GUILDID] = plr->m_playerInfo->guild->GetGuildId();
plr->m_uint32Values[PLAYER_GUILDRANK] = plr->m_playerInfo->guildRank->iId;
}
info->m_loggedInPlayer = plr;
// account data == UI config
#ifndef USING_BIG_ENDIAN
StackWorldPacket<128> data(SMSG_ACCOUNT_DATA_MD5);
#else
WorldPacket data(SMSG_ACCOUNT_DATA_MD5, 128);
#endif
MD5Hash md5hash;
for (int i = 0; i < 8; i++)
{
AccountDataEntry* acct_data = GetAccountData(i);
if (!acct_data->data)
{
//.........这里部分代码省略.........
示例5: FullLogin
void WorldSession::FullLogin(Player * plr)
{
Log.Debug("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
MapMgr *mgr = sInstanceMgr.GetInstance(static_cast< Object* >( plr ));
if (mgr && mgr->m_battleground)
{
/* Don't allow player to login into a bg that has ended or is full */
if (mgr->m_battleground->HasEnded() == true ||
mgr->m_battleground->HasFreeSlots(plr->GetTeamInitial(), mgr->m_battleground->GetType() == false)) {
mgr = NULL;
}
}
/* Trying to log to an instance that doesn't exists anymore? */
if (!mgr)
{
if(!IS_INSTANCE(plr->m_bgEntryPointMap))
{
plr->m_position.x = plr->m_bgEntryPointX;
plr->m_position.y = plr->m_bgEntryPointY;
plr->m_position.z = plr->m_bgEntryPointZ;
plr->m_position.o = plr->m_bgEntryPointO;
plr->m_mapId = plr->m_bgEntryPointMap;
}
else
{
plr->m_position.x = plr->GetBindPositionX();
plr->m_position.y = plr->GetBindPositionY();
plr->m_position.z = plr->GetBindPositionZ();
plr->m_position.o = 0;
plr->m_mapId = plr->GetBindMapId();
}
}
// copy to movement array
movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
memcpy(&movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
// send voicechat state - active/inactive
/*
{SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
|------------------------------------------------|----------------|
|00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
|------------------------------------------------|----------------|
|02 01 |.. |
-------------------------------------------------------------------
*/
#ifndef USING_BIG_ENDIAN
StackWorldPacket<20> datab(SMSG_VOICE_SYSTEM_STATUS);
#else
WorldPacket datab(SMSG_VOICE_SYSTEM_STATUS, 20);
#endif
#ifdef VOICE_CHAT
datab.Initialize(SMSG_VOICE_SYSTEM_STATUS);
datab << uint8(2) << uint8(sVoiceChatHandler.CanUseVoiceChat() ? 1 : 0);
SendPacket(&datab);
#else
datab.Initialize(SMSG_VOICE_SYSTEM_STATUS);
datab << uint8(2) << uint8(0);
#endif
plr->UpdateAttackSpeed();
/*if(plr->getLevel()>PLAYER_LEVEL_CAP_70)
plr->SetUInt32Value(UNIT_FIELD_LEVEL,PLAYER_LEVEL_CAP_70);*/
// enable trigger cheat by default
// plr->TriggerpassCheat = HasGMPermissions();
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == 0)
{
info = new PlayerInfo;
info->cl = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
info->guild=NULL;
info->guildRank=NULL;
info->guildMember=NULL;
//.........这里部分代码省略.........
示例6: FullLogin
void WorldSession::FullLogin(Player* plr)
{
sLog.Debug("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
// send voicechat state - active/inactive
/*
{SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
|------------------------------------------------|----------------|
|00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
|------------------------------------------------|----------------|
|02 01 |.. |
-------------------------------------------------------------------
*/
WorldPacket datab(SMSG_FEATURE_SYSTEM_STATUS, 2);
datab << uint8(2) << uint8(0);
SendPacket(&datab);
datab.Initialize(SMSG_LEARNED_DANCE_MOVES, 8);
datab << uint32(0);
datab << uint32(0);
SendPacket(&datab);
plr->UpdateStats();
// Anti max level hack.
if(sWorld.LevelCap_Custom_All && (plr->getLevel() > sWorld.LevelCap_Custom_All))
plr->SetUInt32Value(UNIT_FIELD_LEVEL, sWorld.LevelCap_Custom_All);
// Enable certain GM abilities on login.
if(HasGMPermissions())
{
plr->bGMTagOn = true;
plr->m_isGmInvisible = true;
plr->m_invisible = true;
plr->bInvincible = true;
if(CanUseCommand('z'))
{
plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_DEVELOPER);
plr->triggerpass_cheat = true; // Enable for admins automatically.
}
else
plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_GM);
}
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == NULL)
{
info = new PlayerInfo;
memset(info, 0, sizeof(PlayerInfo));
info->_class = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
objmgr.AddPlayerInfo(info);
}
plr->m_playerInfo = info;
if(plr->m_playerInfo->GuildId)
{
plr->m_uint32Values[PLAYER_GUILDID] = plr->m_playerInfo->GuildId;
plr->m_uint32Values[PLAYER_GUILDRANK] = plr->m_playerInfo->GuildRank;
}
for(uint32 z = 0; z < NUM_ARENA_TEAM_TYPES; ++z)
{
if(plr->m_playerInfo->arenaTeam[z] != NULL)
{
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6), plr->m_playerInfo->arenaTeam[z]->m_id);
if(plr->m_playerInfo->arenaTeam[z]->m_leader == plr->GetLowGUID())
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 0);
else
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 1);
}
}
info->m_loggedInPlayer = plr;
// account data == UI config
if(sWorld.m_useAccountData)
{
WorldPacket data(SMSG_ACCOUNT_DATA_TIMES, 4+1+4+8*4);
MD5Hash md5hash;
//.........这里部分代码省略.........
示例7: FullLogin
void WorldSession::FullLogin(Player* plr)
{
DEBUG_LOG("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
// copy to movement array
plr->movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
memcpy(&plr->movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
// send voicechat state - active/inactive
/*
{SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
|------------------------------------------------|----------------|
|00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
|------------------------------------------------|----------------|
|02 01 |.. |
-------------------------------------------------------------------
*/
WorldPacket datab;
datab.Initialize(SMSG_FEATURE_SYSTEM_STATUS);
datab << uint8(2) << uint8(0);
SendPacket(&datab);
datab.Initialize(SMSG_LEARNED_DANCE_MOVES);
datab << uint32(0);
datab << uint32(0);
SendPacket(&datab);
plr->UpdateAttackSpeed();
// Anti max level hack.
if(sWorld.LevelCap_Custom_All && (plr->getLevel() > sWorld.LevelCap_Custom_All))
plr->SetUInt32Value(UNIT_FIELD_LEVEL, sWorld.LevelCap_Custom_All);
// Enable certain GM abilities on login.
if(HasGMPermissions())
{
plr->bGMTagOn = true;
plr->m_isGmInvisible = true;
plr->m_invisible = true;
if(CanUseCommand('z'))
{
plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_DEVELOPER);
plr->triggerpass_cheat = true; // Enable for admins automatically.
}
else
plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_GM);
}
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == NULL)
{
info = new PlayerInfo;
memset(info, 0, sizeof(PlayerInfo));
info->cl = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
objmgr.AddPlayerInfo(info);
}
plr->m_playerInfo = info;
if(plr->m_playerInfo->guild)
{
plr->m_uint32Values[PLAYER_GUILDID] = plr->m_playerInfo->guild->GetGuildId();
plr->m_uint32Values[PLAYER_GUILDRANK] = plr->m_playerInfo->guildRank->iId;
}
for(uint32 z = 0; z < NUM_ARENA_TEAM_TYPES; ++z)
{
if(plr->m_playerInfo->arenaTeam[z] != NULL)
{
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6), plr->m_playerInfo->arenaTeam[z]->m_id);
if(plr->m_playerInfo->arenaTeam[z]->m_leader == plr->GetLowGUID())
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 0);
else
plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 1);
}
}
info->m_loggedInPlayer = plr;
// account data == UI config
//.........这里部分代码省略.........
示例8: FullLogin
void WorldSession::FullLogin(Player* plr)
{
DEBUG_LOG("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
// copy to movement array
//movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
//memcpy(&movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
WorldPacket datab(MSG_SET_DUNGEON_DIFFICULTY, 20);
datab << plr->iInstanceType;
datab << uint32(0x01);
datab << uint32(0x00);
SendPacket(&datab);
WorldPacket datat(SMSG_MOTD, 50);
datat << uint32(0x04);
datat << sWorld.GetMotd();
SendPacket(&datat);
/* world preload */
packetSMSG_LOGIN_VERIFY_WORLD vwpck;
vwpck.MapId = plr->GetMapId();
vwpck.O = plr->GetOrientation();
vwpck.X = plr->GetPositionX();
vwpck.Y = plr->GetPositionY();
vwpck.Z = plr->GetPositionZ();
OutPacket( SMSG_LOGIN_VERIFY_WORLD, sizeof(packetSMSG_LOGIN_VERIFY_WORLD), &vwpck );
// send voicechat state - active/inactive
/*
{SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
|------------------------------------------------|----------------|
|00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
|------------------------------------------------|----------------|
|02 01 |.. |
-------------------------------------------------------------------
*/
#ifdef VOICE_CHAT
datab.Initialize(SMSG_FEATURE_SYSTEM_STATUS);
datab << uint8(2) << uint8(sVoiceChatHandler.CanUseVoiceChat() ? 1 : 0);
SendPacket(&datab);
#else
datab.Initialize(SMSG_FEATURE_SYSTEM_STATUS);
datab << uint8(2) << uint8(0);
#endif
plr->UpdateAttackSpeed();
/*if(plr->getLevel()>70)
plr->SetUInt32Value(UNIT_FIELD_LEVEL,70);*/
// Enable trigger cheat by default
//plr->triggerpass_cheat = HasGMPermissions();
// Make sure our name exists (for premade system)
PlayerInfo * info = objmgr.GetPlayerInfo(plr->GetLowGUID());
if(info == 0)
{
info = new PlayerInfo;
memset(info, 0, sizeof(PlayerInfo));
info->cl = plr->getClass();
info->gender = plr->getGender();
info->guid = plr->GetLowGUID();
info->name = strdup(plr->GetName());
info->lastLevel = plr->getLevel();
info->lastOnline = UNIXTIME;
info->lastZone = plr->GetZoneId();
info->race = plr->getRace();
info->team = plr->GetTeam();
objmgr.AddPlayerInfo(info);
}
plr->m_playerInfo = info;
if(plr->m_playerInfo->guild)
{
plr->m_uint32Values[PLAYER_GUILDID] = plr->m_playerInfo->guild->GetGuildId();
plr->m_uint32Values[PLAYER_GUILDRANK] = plr->m_playerInfo->guildRank->iId;
}
for(uint32 z = 0; z < NUM_ARENA_TEAM_TYPES; ++z)
{
if(_player->m_playerInfo->arenaTeam[z] != NULL)
{
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7), _player->m_playerInfo->arenaTeam[z]->m_id);
if(_player->m_playerInfo->arenaTeam[z]->m_leader == _player->GetLowGUID())
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 0);
else
_player->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 1);
}
}
info->m_loggedInPlayer = plr;
// account data == UI config
SendAccountDataTimes(PER_CHARACTER_CACHE_MASK);
_player->ResetTitansGrip();
// Set TIME OF LOGIN
//.........这里部分代码省略.........
示例9: FullLogin
void WorldSession::FullLogin(Player* plr)
{
Log.Debug("WorldSession", "Fully loading player %u", plr->GetLowGUID());
SetPlayer(plr);
m_MoverWoWGuid.Init(plr->GetGUID());
MapMgr* mgr = sInstanceMgr.GetInstance(plr);
if(mgr && mgr->m_battleground)
{
// Don't allow player to login into a bg that has ended or is full
if(mgr->m_battleground->HasEnded() == true ||
mgr->m_battleground->HasFreeSlots(plr->GetTeamInitial(), mgr->m_battleground->GetType() == false))
{
mgr = NULL;
}
}
// Trying to log to an instance that doesn't exists anymore?
if(!mgr)
{
if(!IS_INSTANCE(plr->m_bgEntryPointMap))
{
plr->m_position.x = plr->m_bgEntryPointX;
plr->m_position.y = plr->m_bgEntryPointY;
plr->m_position.z = plr->m_bgEntryPointZ;
plr->m_position.o = plr->m_bgEntryPointO;
plr->m_mapId = plr->m_bgEntryPointMap;
}
else
{
plr->m_position.x = plr->GetBindPositionX();
plr->m_position.y = plr->GetBindPositionY();
plr->m_position.z = plr->GetBindPositionZ();
plr->m_position.o = 0;
plr->m_mapId = plr->GetBindMapId();
}
}
// copy to movement array
movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask();
memcpy(&movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen());
// world preload
uint32 VMapId;
float VO;
float VX;
float VY;
float VZ;
// GMs should start on GM Island and be bound there
if(HasGMPermissions() && plr->m_FirstLogin && sWorld.gamemaster_startonGMIsland)
{
VMapId = 1;
VO = 0;
VX = 16222.6f;
VY = 16265.9f;
VZ = 14.2085f;
plr->m_position.x = VX;
plr->m_position.y = VY;
plr->m_position.z = VZ;
plr->m_position.o = VO;
plr->m_mapId = VMapId;
plr->SetBindPoint(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), plr->GetMapId(), plr->GetZoneId());
}
else
{
VMapId = plr->GetMapId();
VO = plr->GetOrientation();
VX = plr->GetPositionX();
VY = plr->GetPositionY();
VZ = plr->GetPositionZ();
}
plr->SendLoginVerifyWorld(VMapId, VX, VY, VZ, VO);
///////////////////////////////////////////////////////////////////////////////////////////////////////
// send voicechat state - active/inactive
//
// {SERVER} Packet: (0x03C7) UNKNOWN PacketSize = 2
// |------------------------------------------------|----------------|
// |00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |0123456789ABCDEF|
// |------------------------------------------------|----------------|
// |02 01 |.. |
// -------------------------------------------------------------------
//
//
// Old packetdump is OLD. This is probably from 2.2.0 (that was the patch when it was added to wow)!
//
//////////////////////////////////////////////////////////////////////////////////////////////////////
StackWorldPacket<20> datab(SMSG_FEATURE_SYSTEM_STATUS);
datab.Initialize(SMSG_FEATURE_SYSTEM_STATUS);
datab << uint8(2);
//.........这里部分代码省略.........