mxoemu/Reality/Source/MessageTypes.cpp
2010-02-13 14:32:04 +00:00

243 lines
No EOL
8.1 KiB
C++

#include "MessageTypes.h"
#include "PlayerObject.h"
#include "GameClient.h"
#include "GameServer.h"
#include "ObjectMgr.h"
ObjectUpdateMsg::ObjectUpdateMsg( uint32 objectId ):m_objectId(objectId),m_toWho(NULL)
{
}
ObjectUpdateMsg::~ObjectUpdateMsg()
{
}
void ObjectUpdateMsg::setReceiver( class GameClient *toWho )
{
m_toWho = toWho;
}
DeletePlayerMsg::DeletePlayerMsg( uint32 objectId ) :ObjectUpdateMsg(objectId)
{
}
DeletePlayerMsg::~DeletePlayerMsg()
{
}
const ByteBuffer& DeletePlayerMsg::toBuf()
{
return m_buf;
}
void DeletePlayerMsg::setReceiver( class GameClient *toWho )
{
m_toWho = toWho;
m_buf.clear();
PlayerObject *m_player = NULL;
try
{
m_player = sObjMgr.getGOPtr(m_objectId);
}
catch (ObjectMgr::ObjectNotAvailable)
{
throw PacketNoLongerValid();
}
uint16 m_viewId = 0;
try
{
m_viewId = sObjMgr.getViewForGO(m_toWho,m_objectId);
}
catch (ObjectMgr::ClientNotAvailable)
{
throw PacketNoLongerValid();
}
DEBUG_LOG(format("Player %1% delete packet serializing for client %2% with viewID %3%") % m_objectId % m_toWho->Address() % m_viewId);
//03 01 00 01 01 00 <OBJECT ID:2bytes>
const byte rawData[6] =
{
0x03, 0x01, 0x00, 0x01, 0x01, 0x00,
} ;
m_buf.append(rawData,sizeof(rawData));
m_buf << uint16(m_viewId);
}
PlayerSpawnMsg::PlayerSpawnMsg( uint32 objectId ) :ObjectUpdateMsg(objectId)
{
}
PlayerSpawnMsg::~PlayerSpawnMsg()
{
}
const ByteBuffer& PlayerSpawnMsg::toBuf()
{
byte spawnPlayerPacket[288] =
{
0x03, 0x01, 0x00, 0x0C, 0x0C, 0x00, 0x07, 0xCD, 0xAB, 0x27, 0x9B, 0x81, 0xFF, 0x78, 0x00, 0x00,
0x00, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A,
0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A,
0x3A, 0x0E, 0xF8, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
0x3B, 0x3B, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x9A, 0x99, 0x19, 0x3E, 0x85, 0x0A, 0xD7, 0x23,
0x40, 0x2A, 0xF8, 0x28, 0x0A, 0x0C, 0x00, 0x00, 0x87, 0x43, 0x00, 0x00, 0x08, 0x00, 0xD6, 0x81,
0xFF, 0xF7, 0x00, 0x5C, 0x8F, 0x42, 0x3F, 0x0A, 0xCF, 0xCA, 0x01, 0x00, 0x4E, 0x73, 0x00, 0x3C,
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x00,
0x00, 0x00, 0xC0, 0x5B, 0xFA, 0xD6, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x7F, 0xC0, 0x00,
0x00, 0x00, 0x60, 0xB5, 0x46, 0xDE, 0xC0, 0x28, 0x0A, 0xFD, 0x01, 0x01, 0x00, 0x00, 0x73, 0x00,
0x75, 0x26, 0x02, 0x00, 0xB0, 0x74, 0x00, 0x00, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A,
0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x00, 0x00, 0xF7, 0x00, 0xDD, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C,
0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x4E, 0x4E, 0x81, 0xFF, 0x32, 0x12, 0x19, 0x31, 0x46, 0x12, 0x90, 0x01, 0x00, 0x4F, 0x4F, 0x3A,
0xB7, 0x20, 0x1C, 0x01, 0x11, 0x00, 0x00, 0x00, 0x73, 0x00, 0x12, 0x00, 0x00, 0x33, 0x00, 0x01,
0x0C, 0x16, 0x22, 0xD6, 0x86, 0x46, 0x00, 0x80, 0xF7, 0x43, 0x3B, 0xE6, 0xE9, 0x44, 0x00, 0x00,
} ;
PlayerObject *m_player = NULL;
try
{
m_player = sObjMgr.getGOPtr(m_objectId);
}
catch (ObjectMgr::ObjectNotAvailable)
{
m_buf.clear();
throw PacketNoLongerValid();
}
byte *firstNamePos = &spawnPlayerPacket[0x11];
memset(firstNamePos,0,32);
memcpy(firstNamePos,m_player->getFirstName().c_str(),m_player->getFirstName().length());
byte *lastNamePos = &spawnPlayerPacket[0x33];
memset(lastNamePos,0,32);
memcpy(lastNamePos,m_player->getLastName().c_str(),m_player->getLastName().length());
byte *handlePos = &spawnPlayerPacket[0x7F];
memset(handlePos,0,32);
memcpy(handlePos,m_player->getHandle().c_str(),m_player->getHandle().length());
byte *rsiDataPos = &spawnPlayerPacket[0xC8];
memset(rsiDataPos,0,15);
m_player->getRsiData(rsiDataPos,15);
byte *positionPos = &spawnPlayerPacket[0xDA];
m_player->getPosition().toDoubleBuf(positionPos,sizeof(double)*3);
byte *viewIdPos = &spawnPlayerPacket[0xFD];
uint16 m_viewId = 0;
try
{
m_viewId = sObjMgr.getViewForGO(m_toWho,m_objectId);
}
catch (ObjectMgr::ClientNotAvailable)
{
m_buf.clear();
throw PacketNoLongerValid();
}
memcpy(viewIdPos,&m_viewId,sizeof(m_viewId));
DEBUG_LOG(format("Player %1% spawn packet serializing for client %2% with viewID %3%") % m_objectId % m_toWho->Address() % m_viewId);
m_buf.clear();
m_buf.append(spawnPlayerPacket,sizeof(spawnPlayerPacket));
return m_buf;
}
SelfSpawnMsg::SelfSpawnMsg( uint32 objectId ) :ObjectUpdateMsg(objectId)
{
}
SelfSpawnMsg::~SelfSpawnMsg()
{
}
const ByteBuffer& SelfSpawnMsg::toBuf()
{
byte sampleSpawnPacket[202] =
{
0x03, 0x01, 0x00, 0x0C, 0x0C, 0x00, 0x2F, 0xCD, 0xAB, 0x18, 0x8B, 0xEC, 0xFF, 0x05, 0x00, 0x00,
0x00, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A,
0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A,
0x3A, 0x90, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
0x3B, 0x3B, 0x80, 0x98, 0x5A, 0x5A, 0x04, 0x86, 0x8C, 0xFF, 0x6A, 0x6A, 0xC6, 0xC5, 0xFF, 0x3C,
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x5B,
0x5B, 0xED, 0x7A, 0x00, 0x00, 0x00, 0xC5, 0xFF, 0x75, 0xD4, 0x01, 0x00, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x00, 0x00, 0x6B, 0x6B, 0x9D, 0x4A, 0x4A,
0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4C, 0x4C,
0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x8C, 0xFF, 0x7B, 0x22, 0x80, 0x88, 0x17, 0x1C, 0x7C, 0x00,
0x10, 0x00, 0x00, 0xC5, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
} ;
PlayerObject *m_player = NULL;
try
{
m_player = sObjMgr.getGOPtr(m_objectId);
}
catch (ObjectMgr::ObjectNotAvailable)
{
m_buf.clear();
throw PacketNoLongerValid();
}
byte *firstNamePos = &sampleSpawnPacket[0x11];
memset(firstNamePos,0,32);
memcpy(firstNamePos,m_player->getFirstName().c_str(),m_player->getFirstName().length());
byte *lastNamePos = &sampleSpawnPacket[0x32];
memset(lastNamePos,0,32);
memcpy(lastNamePos,m_player->getLastName().c_str(),m_player->getLastName().length());
byte *handlePos = &sampleSpawnPacket[0x5F];
memset(handlePos,0,32);
memcpy(handlePos,m_player->getHandle().c_str(),m_player->getHandle().length());
byte *rsiDataPos = &sampleSpawnPacket[0x8C];
memset(rsiDataPos,0,15);
m_player->getRsiData(rsiDataPos,15);
byte *positionPos = &sampleSpawnPacket[0x9E];
m_player->getPosition().toDoubleBuf(positionPos,sizeof(double)*3);
uint16 temp16;
uint8 temp8;
byte *healthCpos = &sampleSpawnPacket[0x54];
temp16 = m_player->getCurrentHealth();
memcpy(healthCpos,&temp16,sizeof(temp16));
byte *healthMpos = &sampleSpawnPacket[0x7F];
temp16 = m_player->getMaximumHealth();
memcpy(healthMpos,&temp16,sizeof(temp16));
byte *innerStrCpos = &sampleSpawnPacket[0x5A];
temp16 = m_player->getCurrentIS();
memcpy(innerStrCpos,&temp16,sizeof(temp16));
byte *innerStrMpos = &sampleSpawnPacket[0x9B];
temp16 = m_player->getMaximumIS();
memcpy(innerStrMpos,&temp16,sizeof(temp16));
byte *professionPos = &sampleSpawnPacket[0x82];
temp8 = m_player->getProfession();
memcpy(professionPos,&temp8,sizeof(temp8));
byte *levelPos = &sampleSpawnPacket[0xB8];
temp8 = m_player->getLevel();
memcpy(levelPos,&temp8,sizeof(temp8));
byte *alignmentPos = &sampleSpawnPacket[0xBE];
temp8 = m_player->getAlignment();
memcpy(alignmentPos,&temp8,sizeof(temp8));
m_buf.clear();
m_buf.append(sampleSpawnPacket,sizeof(sampleSpawnPacket));
return m_buf;
}