|
|
手上有一套完整的游戏C++ 的源码 结构合理.完善不过只是国外为这有些写的模拟器.我为学习提供而研究此源码不知道有没有人一起研究呢
下面是一源码
#include "StdAfx.h"
void WorldSession::HandleTaxiNodeStatusQueryOpcode( WorldPacket & recv_data )
{
if(!_player->IsInWorld()) return;
sLog.outDebug( "WORLD: Received CMSG_TAXINODE_STATUS_QUERY" );
uint64 guid;
uint32 curloc;
uint8 field;
uint32 submask;
recv_data >> guid;
curloc = sTaxiMgr.GetNearestTaxiNode( GetPlayer( )->GetPositionX( ), GetPlayer( )->GetPositionY( ), GetPlayer( )->GetPositionZ( ), GetPlayer( )->GetMapId( ) );
field = (uint8)((curloc - 1) / 32);
submask = 1<<((curloc-1)%32);
WorldPacket data(9);
data.Initialize( SMSG_TAXINODE_STATUS );
data << guid;
// Check for known nodes
if ( (GetPlayer( )->GetTaximask(field) & submask) != submask )
{
data << uint8( 0 );
}
else
{
data << uint8( 1 );
}
SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_TAXINODE_STATUS" );
}
void WorldSession::HandleTaxiQueryAvaibleNodesOpcode( WorldPacket & recv_data )
{
if(!_player->IsInWorld()) return;
sLog.outDebug( "WORLD: Received CMSG_TAXIQUERYAVAILABLENODES" );
uint64 guid;
recv_data >> guid;
Creature *pCreature = _player->GetMapMgr()->GetCreature(GET_LOWGUID_PART(guid));
if(!pCreature) return;
SendTaxiList(pCreature);
}
void WorldSession::SendTaxiList(Creature* pCreature)
{
uint32 curloc;
uint8 field;
uint32 TaxiMask[12];
uint32 submask;
uint64 guid = pCreature->GetGUID();
curloc = pCreature->m_TaxiNode;
if (!curloc)
return;
field = (uint8)((curloc - 1) / 32);
submask = 1<<((curloc-1)%32);
// Check for known nodes
if (!(GetPlayer( )->GetTaximask(field) & submask))
{
GetPlayer()->SetTaximask(field, (submask | GetPlayer( )->GetTaximask(field)) );
OutPacket(SMSG_NEW_TAXI_PATH);
//Send packet
WorldPacket update(SMSG_TAXINODE_STATUS, 9);
update << guid << uint8( 1 );
SendPacket( &update );
}
//Set Mask
memset(TaxiMask, 0, sizeof(uint32)*8);
sTaxiMgr.GetGlobalTaxiNodeMask(curloc, TaxiMask);
TaxiMask[field] |= 1 << ((curloc-1)%32);
//Remove nodes unknown to player
for(uint8 i = 0; i < 12; i++)
{
TaxiMask &= GetPlayer( )->GetTaximask(i);
}
WorldPacket data(48);
data.Initialize( SMSG_SHOWTAXINODES );
data << uint32( 1 ) << guid;
data << uint32( curloc );
for(int i = 0; i < 12; i++)
{
data << TaxiMask;
}
SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_SHOWTAXINODES" );
}
不知道有没有人有兴趣 最好是在线大学生 |
|