Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,297 @@
|
||||
#include "stdafx.h"
|
||||
#include "SerializeSiegeObjectData.h"
|
||||
#include <Creature/Siege/SiegeObject.h>
|
||||
|
||||
|
||||
BroadCastSiege::CSerializeSiegeObjectData::CSerializeSiegeObjectData() :
|
||||
m_wBroadCastDataLen(0), m_wDeltaBroadCastDataLen(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BroadCastSiege::CSerializeSiegeObjectData::~CSerializeSiegeObjectData()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BroadCastSiege::CSerializeSiegeObjectData::Initialize( const CSiegeObject& siegeObject )
|
||||
{
|
||||
// Data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sOwnerShipInfo ownerShipInfo;
|
||||
ownerShipInfo.m_dwCampOrCastleID = siegeObject.GetCampID();
|
||||
ownerShipInfo.m_dwOwnerCID = siegeObject.GetOwnerID();
|
||||
ownerShipInfo.m_dwGID = siegeObject.GetGID();
|
||||
ownerShipInfo.m_cNation = siegeObject.GetNation();
|
||||
|
||||
sStateInfo stateInfo;
|
||||
stateInfo.m_wObjectType = siegeObject.GetObjectType();
|
||||
stateInfo.m_cState = siegeObject.GetState();
|
||||
stateInfo.m_cSubState = siegeObject.GetSubState();
|
||||
stateInfo.m_cUpgradeStep = siegeObject.GetUpgradeStep();
|
||||
stateInfo.m_cUpgradeType = siegeObject.GetUpgradeType();
|
||||
|
||||
sHPInfo hpInfo;
|
||||
hpInfo.m_dwNowHP = siegeObject.GetNowHP();
|
||||
hpInfo.m_dwMaxHP = siegeObject.GetMaxHP();
|
||||
|
||||
sPosInfo posInfo;
|
||||
const Position& pos = siegeObject.GetPosition();
|
||||
const MotionInfo& motionInfo = siegeObject.GetMotionInfo();
|
||||
posInfo.m_fDefaultDir = siegeObject.GetDefaultDir();
|
||||
posInfo.m_NetworkPos = CNetworkPos( pos.m_fPointX, pos.m_fPointY, pos.m_fPointZ, motionInfo.m_fDirection,
|
||||
(0 == motionInfo.m_dwFrame) ? 0.0f : motionInfo.m_fVelocity / motionInfo.m_dwFrame );
|
||||
|
||||
sMaterialInfo materialInfo;
|
||||
materialInfo.m_cMaterial = siegeObject.GetMaterialNum();
|
||||
|
||||
sRiderInfo riderInfo;
|
||||
std::fill_n(&riderInfo.m_dwRiderID[0], int(Siege::AIRSHIP_RIDER_NUM), 0);
|
||||
siegeObject.GetRiders( riderInfo.m_dwRiderID );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Data <20><> <20>ʱ<EFBFBD>ȭ
|
||||
m_LastSiegeObjectData.SetOwnerShipInfo( ownerShipInfo );
|
||||
m_LastSiegeObjectData.SetStateInfo( stateInfo );
|
||||
m_LastSiegeObjectData.SetHPInfo( hpInfo );
|
||||
m_LastSiegeObjectData.SetPosInfo( posInfo );
|
||||
m_LastSiegeObjectData.SetMaterialInfo( materialInfo );
|
||||
m_LastSiegeObjectData.SetRiderInfo( riderInfo );
|
||||
|
||||
// BroadCast <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
PrepareData( siegeObject );
|
||||
}
|
||||
|
||||
|
||||
// ==================================================================================
|
||||
// Data <20><> <20><><EFBFBD><EFBFBD>
|
||||
void
|
||||
BroadCastSiege::CSerializeSiegeObjectData::PrepareData( const CSiegeObject& siegeObject )
|
||||
{
|
||||
PrepareBroadCastData( siegeObject );
|
||||
PrepareDeltaData( siegeObject );
|
||||
}
|
||||
|
||||
void
|
||||
BroadCastSiege::CSerializeSiegeObjectData::PrepareBroadCastData( const CSiegeObject& siegeObject )
|
||||
{
|
||||
assert( CSiegeObjectData::EstimateBufferSize(0xFFFFFFFF) < MAX_SIEGEOBJECT_DATA_SIZE && "MAX_SIEGEOBJECT_DATA_SIZE <20><> <20>÷<EFBFBD><C3B7>ּ<EFBFBD><D6BC><EFBFBD>!" );
|
||||
|
||||
m_wBroadCastDataLen = 0;
|
||||
char* szDataPos = m_aryBroadCastData;
|
||||
|
||||
// UpdateDataFlag <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> Data <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.)
|
||||
unsigned long dwUpdateFlag = 0xFFFFFFFF;
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &dwUpdateFlag, sizeof(unsigned long) );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sOwnerShipInfo ownerShipInfo;
|
||||
ownerShipInfo.m_dwCampOrCastleID = siegeObject.GetCampID();
|
||||
ownerShipInfo.m_dwOwnerCID = siegeObject.GetOwnerID();
|
||||
ownerShipInfo.m_dwGID = siegeObject.GetGID();
|
||||
ownerShipInfo.m_cNation = siegeObject.GetNation();
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &ownerShipInfo, sizeof(sOwnerShipInfo) );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sStateInfo stateInfo;
|
||||
stateInfo.m_wObjectType = siegeObject.GetObjectType();
|
||||
stateInfo.m_cState = siegeObject.GetState();
|
||||
stateInfo.m_cSubState = siegeObject.GetSubState();
|
||||
stateInfo.m_cUpgradeStep = siegeObject.GetUpgradeStep();
|
||||
stateInfo.m_cUpgradeType = siegeObject.GetUpgradeType();
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &stateInfo, sizeof(sStateInfo) );
|
||||
|
||||
// HP <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sHPInfo hpInfo;
|
||||
hpInfo.m_dwNowHP = siegeObject.GetNowHP();
|
||||
hpInfo.m_dwMaxHP = siegeObject.GetMaxHP();
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &hpInfo, sizeof(sHPInfo) );
|
||||
|
||||
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sPosInfo posInfo;
|
||||
const Position& pos = siegeObject.GetPosition();
|
||||
const MotionInfo& motionInfo = siegeObject.GetMotionInfo();
|
||||
|
||||
/*float fY = pos.m_fPointY;
|
||||
if ( siegeObject.IsSiegeArms() && Siege::AIRSHIP != siegeObject.GetObjectType() )
|
||||
{
|
||||
fY = 0.0f;
|
||||
}*/
|
||||
|
||||
posInfo.m_fDefaultDir = siegeObject.GetDefaultDir();
|
||||
posInfo.m_NetworkPos = CNetworkPos( pos.m_fPointX, pos.m_fPointY, pos.m_fPointZ, motionInfo.m_fDirection,
|
||||
(0 == motionInfo.m_dwFrame) ? 0.0f : motionInfo.m_fVelocity / motionInfo.m_dwFrame );
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &posInfo, sizeof(sPosInfo) );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sMaterialInfo materialInfo;
|
||||
materialInfo.m_cMaterial = siegeObject.GetMaterialNum();
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &materialInfo, sizeof(sMaterialInfo) );
|
||||
|
||||
// ž<><C5BE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sRiderInfo riderInfo;
|
||||
std::fill_n(&riderInfo.m_dwRiderID[0], int(Siege::AIRSHIP_RIDER_NUM), 0);
|
||||
siegeObject.GetRiders( riderInfo.m_dwRiderID );
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &riderInfo, sizeof(sRiderInfo) );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
m_wBroadCastDataLen = static_cast<unsigned short>( szDataPos - m_aryBroadCastData );
|
||||
}
|
||||
|
||||
void
|
||||
BroadCastSiege::CSerializeSiegeObjectData::PrepareDeltaData( const CSiegeObject& siegeObject )
|
||||
{
|
||||
assert( CSiegeObjectData::EstimateBufferSize(0xFFFFFFFF) < MAX_SIEGEOBJECT_DATA_SIZE && "MAX_SIEGEOBJECT_DATA_SIZE <20><> <20>÷<EFBFBD><C3B7>ּ<EFBFBD><D6BC><EFBFBD>!" );
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> Delta<74><61> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
m_wDeltaBroadCastDataLen = 0;
|
||||
char* szDataPos = m_aryDeltaBroadCastData;
|
||||
|
||||
// UpdateFlag <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>صΰ<D8B5>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
unsigned long dwDeltaUpdateFlag = 0;
|
||||
char* szUpdateFlagCopyPos = szDataPos;
|
||||
szDataPos += sizeof(unsigned long);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
if ( m_LastSiegeObjectData.GetCampID() != siegeObject.GetCampID() ||
|
||||
m_LastSiegeObjectData.GetOwnerCID() != siegeObject.GetOwnerID() ||
|
||||
m_LastSiegeObjectData.GetGID() != siegeObject.GetGID() ||
|
||||
m_LastSiegeObjectData.GetNation() != siegeObject.GetNation() )
|
||||
{
|
||||
sOwnerShipInfo ownerShipInfo;
|
||||
ownerShipInfo.m_dwCampOrCastleID = siegeObject.GetCampID();
|
||||
ownerShipInfo.m_dwOwnerCID = siegeObject.GetOwnerID();
|
||||
ownerShipInfo.m_dwGID = siegeObject.GetGID();
|
||||
ownerShipInfo.m_cNation = siegeObject.GetNation();
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &ownerShipInfo, sizeof(sOwnerShipInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_OWNERSHIP;
|
||||
|
||||
m_LastSiegeObjectData.SetOwnerShipInfo( ownerShipInfo );
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
if ( m_LastSiegeObjectData.GetObjectType() != siegeObject.GetObjectType() ||
|
||||
m_LastSiegeObjectData.GetState() != siegeObject.GetState() ||
|
||||
m_LastSiegeObjectData.GetSubState() != siegeObject.GetSubState() ||
|
||||
m_LastSiegeObjectData.GetUpgradeStep() != siegeObject.GetUpgradeStep() ||
|
||||
m_LastSiegeObjectData.GetUpgradeType() != siegeObject.GetUpgradeType() )
|
||||
{
|
||||
sStateInfo stateInfo;
|
||||
stateInfo.m_wObjectType = siegeObject.GetObjectType();
|
||||
stateInfo.m_cState = siegeObject.GetState();
|
||||
stateInfo.m_cSubState = siegeObject.GetSubState();
|
||||
stateInfo.m_cUpgradeStep = siegeObject.GetUpgradeStep();
|
||||
stateInfo.m_cUpgradeType = siegeObject.GetUpgradeType();
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &stateInfo, sizeof(sStateInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_STATE;
|
||||
|
||||
m_LastSiegeObjectData.SetStateInfo( stateInfo );
|
||||
}
|
||||
|
||||
// HP <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
if ( m_LastSiegeObjectData.GetNowHP() != siegeObject.GetNowHP() ||
|
||||
m_LastSiegeObjectData.GetMaxHP() != siegeObject.GetMaxHP() )
|
||||
{
|
||||
sHPInfo hpInfo;
|
||||
hpInfo.m_dwNowHP = siegeObject.GetNowHP();
|
||||
hpInfo.m_dwMaxHP = siegeObject.GetMaxHP();
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &hpInfo, sizeof(sHPInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_HP;
|
||||
|
||||
m_LastSiegeObjectData.SetHPInfo( hpInfo );
|
||||
}
|
||||
|
||||
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
const MotionInfo& motionInfo = siegeObject.GetMotionInfo();
|
||||
CNetworkPos netPos = CNetworkPos( siegeObject.GetCurrentPos().m_fPointX, siegeObject.GetCurrentPos().m_fPointY,
|
||||
siegeObject.GetCurrentPos().m_fPointZ, motionInfo.m_fDirection,
|
||||
(0 == motionInfo.m_dwFrame) ? 0.0f : motionInfo.m_fVelocity / motionInfo.m_dwFrame );
|
||||
|
||||
// Code by By Minbobo
|
||||
if( (netPos!=m_LastSiegeObjectData.GetNetworkPos()) ||
|
||||
(m_LastSiegeObjectData.GetDefaultDir()!=siegeObject.GetDefaultDir()) )
|
||||
{
|
||||
sPosInfo posInfo;
|
||||
const Position& pos = siegeObject.GetPosition();
|
||||
float fY = pos.m_fPointY;
|
||||
|
||||
if ( siegeObject.IsSiegeArms() && Siege::AIRSHIP != siegeObject.GetObjectType() )
|
||||
{
|
||||
fY = 0.0f;
|
||||
}
|
||||
|
||||
posInfo.m_fDefaultDir = siegeObject.GetDefaultDir();
|
||||
posInfo.m_NetworkPos = CNetworkPos( pos.m_fPointX, fY, pos.m_fPointZ, motionInfo.m_fDirection,
|
||||
(0 == motionInfo.m_dwFrame) ? 0.0f : motionInfo.m_fVelocity / motionInfo.m_dwFrame );
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &posInfo, sizeof(sPosInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_POS;
|
||||
|
||||
posInfo.m_NetworkPos = netPos;
|
||||
m_LastSiegeObjectData.SetPosInfo( posInfo );
|
||||
}
|
||||
|
||||
/*if ( (m_LastSiegeObjectData.GetDefaultDir() - siegeObject.GetDefaultDir()) > FLOAT_EPSILON ||
|
||||
(m_LastSiegeObjectData.GetNetworkPos().GetXPos() - netPos.GetXPos()) > FLOAT_EPSILON ||
|
||||
(m_LastSiegeObjectData.GetNetworkPos().GetYPos() - netPos.GetYPos()) > FLOAT_EPSILON ||
|
||||
(m_LastSiegeObjectData.GetNetworkPos().GetZPos() - netPos.GetZPos()) > FLOAT_EPSILON )
|
||||
{
|
||||
sPosInfo posInfo;
|
||||
const Position& pos = siegeObject.GetPosition();
|
||||
float fY = pos.m_fPointY;
|
||||
if ( siegeObject.IsSiegeArms() && Siege::AIRSHIP != siegeObject.GetObjectType() )
|
||||
{
|
||||
fY = 0.0f;
|
||||
}
|
||||
posInfo.m_fDefaultDir = siegeObject.GetDefaultDir();
|
||||
posInfo.m_NetworkPos = CNetworkPos( pos.m_fPointX, fY, pos.m_fPointZ, motionInfo.m_fDirection,
|
||||
(0 == motionInfo.m_dwFrame) ? 0.0f : motionInfo.m_fVelocity / motionInfo.m_dwFrame );
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &posInfo, sizeof(sPosInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_POS;
|
||||
|
||||
posInfo.m_NetworkPos = netPos;
|
||||
m_LastSiegeObjectData.SetPosInfo( posInfo );
|
||||
}*/
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
if ( m_LastSiegeObjectData.GetMaterialNum() != siegeObject.GetMaterialNum() )
|
||||
{
|
||||
sMaterialInfo materialInfo;
|
||||
materialInfo.m_cMaterial = siegeObject.GetMaterialNum();
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &materialInfo, sizeof(sMaterialInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_MATERIAL;
|
||||
|
||||
m_LastSiegeObjectData.SetMaterialInfo( materialInfo );
|
||||
}
|
||||
|
||||
// ž<><C5BE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long dwRiders[ Siege::AIRSHIP_RIDER_NUM ];
|
||||
std::fill_n(dwRiders, int(Siege::AIRSHIP_RIDER_NUM), 0);
|
||||
siegeObject.GetRiders( dwRiders );
|
||||
if ( !m_LastSiegeObjectData.IsSameRiders( dwRiders ) )
|
||||
{
|
||||
sRiderInfo riderInfo;
|
||||
std::fill_n(&riderInfo.m_dwRiderID[0], int(Siege::AIRSHIP_RIDER_NUM), 0);
|
||||
siegeObject.GetRiders( riderInfo.m_dwRiderID );
|
||||
|
||||
COPY_AND_ADVANCE_DST( szDataPos, &riderInfo, sizeof(sRiderInfo) );
|
||||
dwDeltaUpdateFlag |= DELTA_RIDER;
|
||||
|
||||
m_LastSiegeObjectData.SetRiders( riderInfo.m_dwRiderID );
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
memcpy( szUpdateFlagCopyPos, &dwDeltaUpdateFlag, sizeof(unsigned long) );
|
||||
m_wDeltaBroadCastDataLen = static_cast<unsigned short>( szDataPos - m_aryDeltaBroadCastData);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>,
|
||||
if ( 0 == dwDeltaUpdateFlag )
|
||||
{
|
||||
m_wDeltaBroadCastDataLen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user