本文整理汇总了C++中WorldPacket::append方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldPacket::append方法的具体用法?C++ WorldPacket::append怎么用?C++ WorldPacket::append使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldPacket
的用法示例。
在下文中一共展示了WorldPacket::append方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AppendPublicKey
bool AddonMgr::AppendPublicKey(WorldPacket & data, std::string & AddonName, uint32 CRC)
{
if(CRC == 0x4C1C776D)
{
// Open public key file with that addon
AddonDataItr itr = mAddonData.find(AddonName);
if(itr != mAddonData.end())
data.append(itr->second);
else
{
// open the file
char path[500];
snprintf(path, 500, "addons\\%s.pub", AddonName.c_str());
FILE* f = fopen(path, "rb");
if(f != 0)
{
// read the file into a bytebuffer
ByteBuffer buf;
fseek(f, 0, SEEK_END);
uint32 length = 264/*ftell(f)*/;
fseek(f, 0, SEEK_SET);
buf.resize(length);
fread((void*)buf.contents(), length, 1, f);
fclose(f);
mAddonData[AddonName] = buf;
data.append(buf);
}
else
{
ByteBuffer buf;
buf.append(PublicKey, 264);
mAddonData[AddonName] = buf;
data.append(buf);
}
}
return true;
}
return false;
}
示例2: SendGMTicketGetTicket
void WorldSession::SendGMTicketGetTicket(uint32 status, char const* text)
{
int len = text ? strlen(text) : 0;
WorldPacket data;
data.Initialize( SMSG_GMTICKET_GETTICKET, (4+len+4) );
data << uint32(6);
if(len > 0)
data.append((uint8 *)text,len+1);
else
data << uint32(0);
SendPacket( &data );
}
示例3: HandleGameObjectQueryOpcode
/// Only _static_ data is sent in this packet !!!
void WorldSession::HandleGameObjectQueryOpcode(WorldPacket& recvData)
{
uint32 entry;
recvData >> entry;
ObjectGuid guid;
recvData >> guid;
const GameObjectTemplate* info = sObjectMgr->GetGameObjectTemplate(entry);
if (info)
{
std::string Name;
std::string IconName;
std::string CastBarCaption;
Name = info->name;
IconName = info->IconName;
CastBarCaption = info->castBarCaption;
LocaleConstant localeConstant = GetSessionDbLocaleIndex();
if (localeConstant >= LOCALE_enUS)
if (GameObjectLocale const* gameObjectLocale = sObjectMgr->GetGameObjectLocale(entry))
{
ObjectMgr::GetLocaleString(gameObjectLocale->Name, localeConstant, Name);
ObjectMgr::GetLocaleString(gameObjectLocale->CastBarCaption, localeConstant, CastBarCaption);
}
TC_LOG_DEBUG("network", "WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u. ", info->name.c_str(), entry);
WorldPacket data (SMSG_GAMEOBJECT_QUERY_RESPONSE, 150);
data << uint32(entry);
data << uint32(info->type);
data << uint32(info->displayId);
data << Name;
data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4
data << IconName; // 2.0.3, string. Icon name to use instead of default icon for go's (ex: "Attack" makes sword)
data << CastBarCaption; // 2.0.3, string. Text will appear in Cast Bar when using GO (ex: "Collecting")
data << info->unk1; // 2.0.3, string
data.append(info->raw.data, MAX_GAMEOBJECT_DATA);
data << float(info->size); // go size
data << int32(info->unkInt32); // 4.x, unknown
SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE");
}
else
{
TC_LOG_DEBUG("network", "WORLD: CMSG_GAMEOBJECT_QUERY - Missing gameobject info for (%s, ENTRY: %u)",
guid.ToString().c_str(), entry);
WorldPacket data (SMSG_GAMEOBJECT_QUERY_RESPONSE, 4);
data << uint32(entry | 0x80000000);
SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE");
}
}
示例4: HandleWhoOpcode
void WorldSession::HandleWhoOpcode( WorldPacket & recv_data )
{
uint64 clientcount = 0;
int datalen = 8;
int countcheck = 0;
WorldPacket data;
Log::getSingleton( ).outDebug( "WORLD: Recvd CMSG_WHO Message" );
#ifndef ENABLE_GRID_SYSTEM
ObjectMgr::PlayerMap::const_iterator itr;
for (itr = objmgr.Begin<Player>(); itr != objmgr.End<Player>(); itr++)
#else
ObjectAccessor::PlayerMapType &m(ObjectAccessor::Instance().GetPlayers());
for(ObjectAccessor::PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
#endif
{
if ( itr->second->GetName() )
{
clientcount++;
datalen = datalen + strlen(itr->second->GetName()) + 1 + 21;
}
}
data.Initialize( SMSG_WHO );
data << uint64( clientcount );
#ifndef ENABLE_GRID_SYSTEM
for (itr = objmgr.Begin<Player>(); itr != objmgr.End<Player>(); itr++)
#else
for(ObjectAccessor::PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
#endif
{
if ( itr->second->GetName() && (countcheck < clientcount))
{
countcheck++;
data.append(itr->second->GetName() , strlen(itr->second->GetName()) + 1);
data << uint8( 0x00 );
data << uint32( itr->second->getLevel() );
data << uint32( itr->second->getClass() );
data << uint32( itr->second->getRace() );
data << uint32( itr->second->GetZoneId() );
data << uint32( 0x00000000 ); // this is the guild id...once we have guilds working it'll go here.
}
}
WPAssert(data.size() == datalen);
SendPacket(&data);
}
示例5: HandlePetitionShowListOpcode
void WorldSession::HandlePetitionShowListOpcode( WorldPacket & recv_data )
{
WorldPacket data;
uint64 guid;
unsigned char tdata[21] =
{
0x01, 0x01, 0x00, 0x00, 0x00, 0xe7, 0x16, 0x00, 0x00, 0xef, 0x23, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
};
recv_data >> guid;
data.Initialize( SMSG_PETITION_SHOWLIST );
data << guid;
data.append( tdata, sizeof(tdata) );
SendPacket( &data );
}
示例6: operator
void operator()(WorldPacket& data, int32 loc_idx)
{
char const* nam = i_target ? i_target->GetNameForLocaleIdx(loc_idx) : NULL;
uint32 namlen = (nam ? strlen(nam) : 0) + 1;
data.Initialize(SMSG_TEXT_EMOTE, (20 + namlen));
data << ObjectGuid(i_player.GetObjectGuid());
data << uint32(i_text_emote);
data << uint32(i_emote_num);
data << uint32(namlen);
if (namlen > 1)
data.append(nam, namlen);
else
data << uint8(0x00);
}
示例7: HandleGameObjectQueryOpcode
/// Only _static_ data send in this packet !!!
void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data )
{
uint32 entryID;
recv_data >> entryID;
recv_data.read_skip<uint64>(); // guid
const GameObjectInfo *info = ObjectMgr::GetGameObjectInfo(entryID);
if(info)
{
std::string Name = info->name;
int loc_idx = GetSessionDbLocaleIndex();
if (loc_idx >= 0)
{
GameObjectLocale const *gl = sObjectMgr.GetGameObjectLocale(entryID);
if (gl)
{
if (gl->Name.size() > size_t(loc_idx) && !gl->Name[loc_idx].empty())
Name = gl->Name[loc_idx];
}
}
sLog.outDetail("WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u. ", info->name, entryID);
WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 150 );
data << uint32(entryID);
data << uint32(info->type);
data << uint32(info->displayId);
data << Name;
data << uint16(0) << uint8(0) << uint8(0); // name2, name3, name4
data.append(info->raw.data, 24);
//data << float(info->size); // go size , to check
SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" );
}
else
{
uint64 guid;
recv_data >> guid;
sLog.outDebug( "WORLD: CMSG_GAMEOBJECT_QUERY - Missing gameobject info for (GUID: %u, ENTRY: %u)",
GUID_LOPART(guid), entryID );
WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 4 );
data << uint32(entryID | 0x80000000);
SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" );
}
}
示例8: buildPacket
bool UpdateData::buildPacket(WorldPacket& packet, bool hasTransport)
{
ByteBuffer buf(m_data.size() + 10 + m_guidList.size() * 8);
buf << (u_int)(!m_guidList.empty() ? m_blockCount + 1 : m_blockCount);
buf << (u_char)(hasTransport ? 1 : 0);
if (!m_guidList.empty())
{
buf << (u_char)UPDATETYPE_OUT_OF_RANGE_OBJECTS;
buf << (u_int)m_guidList.size();
for (IDList::const_iterator itr = m_guidList.begin(); itr != m_guidList.end(); ++itr)
{
buf << (u_char)0xFF;
buf << (u_int64)*itr;
}
}
buf.append(m_data);
packet.clear();
// 大小超过50字节的数据包要压缩
if (m_data.size() > 50)
{
u_int destSize = (u_int)buf.size() + buf.size() / 10 + 16;
packet.resize(destSize);
packet.put(0, (u_int)buf.size());
compress(const_cast<u_char*>(packet.contents()) + sizeof(u_int), &destSize,
(void*)buf.contents(), (u_int)buf.size());
if (destSize == 0)
return false;
packet.resize(destSize + sizeof(u_int));
packet.setOpcode(SMSG_COMPRESSED_UPDATE_OBJECT);
}
else
{
packet.append(buf);
packet.setOpcode(SMSG_UPDATE_OBJECT);
}
return true;
}
示例9: BuildBlackMarketAuctionsPacket
void BlackMarketMgr::BuildBlackMarketAuctionsPacket(WorldPacket& data, uint32 guidLow)
{
uint32 count = 0;
data << uint32(time(NULL));
for (auto const &kvPair : m_bmAuctionsMap)
if (kvPair.second->IsActive())
++count;
data.WriteBits(count, 18);
ByteBuffer datas;
for (auto const &kvPair : m_bmAuctionsMap)
{
auto const auction = kvPair.second;
if (!auction->IsActive())
continue;
// Is owner
data.WriteBit(guidLow == auction->bidder);
uint64 currentBid = auction->bidder ? auction->bid : 0;
uint64 nextBidPrice = auction->bidder ? auction->bid + GetAuctionOutBid(auction->bid) : auction->bid;
uint64 upPrice = auction->bidder ? nextBidPrice - currentBid : 1;
datas << uint32(auction->bmTemplate->itemEntry);
datas << uint32(auction->bmTemplate->seller);
datas << uint32(auction->id);
datas << uint32(auction->bidderCount);
datas << uint32(auction->TimeLeft());
datas << uint64(currentBid);
datas << uint32(auction->bmTemplate->itemCount);
datas << uint32(0); // Unk
datas << uint64(nextBidPrice);
datas << uint64(upPrice);
}
data.FlushBits();
if (datas.size())
data.append(datas);
TC_LOG_DEBUG("network", ">> Sent %u BlackMarket Auctions", count);
}
示例10: HandleGMTicketGetTicketOpcode
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & recv_data )
{
WorldPacket data;
uint64 guid;
std::stringstream query,query1;
Field *fields;
guid = GetPlayer()->GetGUID();
query << "SELECT COUNT(*) FROM `gmtickets` where guid='" << guid << "'";
QueryResult *result = sDatabase.Query( query.str().c_str() );
if (result)
{
int cnt;
fields = result->Fetch();
cnt = fields[0].GetUInt32();
if ( cnt > 0 )
{
data.Initialize( SMSG_GMTICKET_GETTICKET );
query1 << "SELECT * FROM `gmtickets` where guid='" << guid << "'";
QueryResult *result = sDatabase.Query( query1.str().c_str() );
fields = result->Fetch();
printf( "query=%s\n", query1.str().c_str() );
char tickettext[255];
strcpy( tickettext,fields[2].GetString() );
data << uint32(6); // means we have open tickets
data.append((uint8 *)tickettext,strlen(tickettext)+1);
data << uint8(0); // ??
data << uint8(3); // ??
SendPacket( &data );
}
else
{
data << uint32(1); // all !6 means we have no open tickets
data << uint32(0);
data << uint8(0);
data << uint8(0);
SendPacket( &data );
}
}
delete result;
}
示例11: BuildBlackMarketAuctionsPacket
void BlackMarketMgr::BuildBlackMarketAuctionsPacket(WorldPacket& data, uint32 guidLow)
{
uint32 count = 0;
ByteBuffer datas;
data << uint32(time(NULL));
for (BMAuctionEntryMap::const_iterator itr = GetAuctionsBegin(); itr != GetAuctionsEnd(); ++itr)
if (itr->second->IsActive())
++count;
data.WriteBits(count, 18);
for (BMAuctionEntryMap::const_iterator itr = GetAuctionsBegin(); itr != GetAuctionsEnd(); ++itr)
{
BMAuctionEntry* auction = itr->second;
if (!auction->IsActive())
continue;
data.WriteBit(guidLow == auction->bidder); // Is owner
uint64 currentBid = auction->bidder ? auction->bid : 0;
uint64 nextBidPrice = auction->bidder ? auction->bid + GetAuctionOutBid(auction->bid) : auction->bid;
uint64 upPrice = auction->bidder ? nextBidPrice - currentBid : 1;
datas << uint32(auction->bm_template->itemEntry);
datas << uint64(nextBidPrice);
datas << uint64(currentBid);
datas << uint32(0); // Unk
datas << uint32(auction->id);
datas << uint32(auction->bm_template->seller);
datas << uint64(upPrice);
datas << uint32(auction->TimeLeft());
datas << uint32(auction->bidderCount);
datas << uint32(auction->bm_template->itemCount);
}
data.FlushBits();
if (datas.size())
data.append(datas);
sLog->outInfo(LOG_FILTER_NETWORKIO, ">> Sent %u BlackMarket Auctions", count);
}
示例12: HandleGameObjectQueryOpcode
/// Only _static_ data send in this packet !!!
void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data )
{
uint32 entryID;
recv_data >> entryID;
ObjectGuid guid;
recv_data >> guid;
const GameObjectInfo *info = ObjectMgr::GetGameObjectInfo(entryID);
if(info)
{
std::string Name = info->name;
int loc_idx = GetSessionDbLocaleIndex();
if (loc_idx >= 0)
{
GameObjectLocale const *gl = sObjectMgr.GetGameObjectLocale(entryID);
if (gl)
{
if (gl->Name.size() > size_t(loc_idx) && !gl->Name[loc_idx].empty())
Name = gl->Name[loc_idx];
}
}
DETAIL_LOG("WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u. ", info->name, entryID);
WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 150 );
data << uint32(entryID);
data << uint32(info->type);
data << uint32(info->displayId);
data << Name;
data << uint16(0) << uint8(0) << uint8(0); // name2, name3, name4
data.append(info->raw.data, 24);
//data << float(info->size); // go size , to check
SendPacket( &data );
DEBUG_LOG( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" );
}
else
{
DEBUG_LOG("WORLD: CMSG_GAMEOBJECT_QUERY - Guid: %s Entry: %u Missing gameobject info!",
guid.GetString().c_str(), entryID);
WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 4 );
data << uint32(entryID | 0x80000000);
SendPacket( &data );
DEBUG_LOG( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" );
}
}
示例13: RemoveGravityLapse
void RemoveGravityLapse()
{
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (i = me->getThreatManager().getThreatList().begin(); i!= me->getThreatManager().getThreatList().end(); ++i)
{
Unit* unit = Unit::GetUnit((*me), (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
unit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY);
unit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DOT);
WorldPacket data;
data.SetOpcode(SMSG_MOVE_UNSET_CAN_FLY);
data.append(unit->GetPackGUID());
data << uint32(0);
unit->SendMessageToSet(&data, true);
}
}
}
示例14: CastGravityLapseFly
void CastGravityLapseFly() // Use Fly Packet hack for now as players can't cast "fly" spells unless in map 530. Has to be done a while after they get knocked into the air...
{
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (i = me->getThreatManager().getThreatList().begin(); i!= me->getThreatManager().getThreatList().end(); ++i)
{
Unit* unit = Unit::GetUnit((*me), (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
// Also needs an exception in spell system.
unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_FLY, true, 0, 0, me->GetGUID());
// Use packet hack
WorldPacket data;
data.SetOpcode(SMSG_MOVE_SET_CAN_FLY);
data.append(unit->GetPackGUID());
data << uint32(0);
unit->SendMessageToSet(&data, true);
}
}
}
示例15: _HandleCompressedUpdateObjectOpcode
void WorldSession::_HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket)
{
uint32 realsize;
recvPacket >> realsize;
ZCompressor z;
z.append(recvPacket.contents() + sizeof(uint32),recvPacket.size() - sizeof(uint32));
z.Compressed(true);
z.RealSize(realsize);
z.Inflate();
if(z.Compressed())
{
logerror("_HandleCompressedUpdateObjectOpcode(): Inflate() failed! size=%u realsize=%u",z.size(),realsize);
return;
}
WorldPacket wp;
wp.SetOpcode(recvPacket.GetOpcode());
wp.append(z.contents(),z.size());
_HandleUpdateObjectOpcode(wp);
}