Files
Client/Server/RylServerProject/RylGameLibrary/Creature/Siege/BroadCastSiegeObjectData.h
LGram16 dd97ddec92 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>
2025-11-29 20:17:20 +09:00

212 lines
7.5 KiB
C++

#ifndef __BROADCAST_SIEGEOBJECT_DATA_H__
#define __BROADCAST_SIEGEOBJECT_DATA_H__
#include <winsock2.h>
#include <windows.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <Creature/Siege/SiegeConstants.h>
//! 본 파일은 서버/클라이언트가 전부 사용하는 파일이다.
//! 공성 오브젝트 데이터 중 클라이언트가 꼭 알아야 할 내용들을 담고 있다.
namespace BroadCastSiege
{
inline void COPY_AND_ADVANCE_SRC( void* dst, const char*& src, size_t size )
{
memcpy( dst, src, size ); src += size;
}
inline void COPY_AND_ADVANCE_DST( char*& dst, const void* src, size_t size )
{
memcpy( dst, src, size ); dst += size;
}
#define FLOAT_EPSILON 0.001
// Update Data Flag
enum SiegeDeltaInfo
{
DELTA_OWNERSHIP = 1 << 0, // dwCampOrCastleID, OwnerID, GID, cNation
DELTA_STATE = 1 << 1, // wObjectType, cState, cSubState, cUpgradeStep, cUpgradeType
DELTA_HP = 1 << 2, // HP 정보
DELTA_POS = 1 << 3, // fDir, Pos
DELTA_MATERIAL = 1 << 4, // cMaterial
DELTA_RIDER = 1 << 5, // dwRiderCID[]
};
enum Const
{
// UpdateFlag ( 4 byte )
// OwnerShipInfo ( 13 byte )
// StateInfo( 6 byte )
// HPInfo ( 8 byte )
// PosInfo ( 12 byte )
// MaterialInfo ( 1 byte )
// RiderInfo ( 40 byte )
// Total : 84 byte
MAX_SIEGEOBJECT_DATA_SIZE = 120,
MAX_SIEGEBROADCAST_BUFFER_SIZE = 160 // sizeof(PktNewSiegeBroadCast) + MAX_SIEGEOBJECT_DATA_SIZE
};
enum BroadCastType
{
BROADCAST_ALL_DATA = 1, // 모든 데이터 전송
BROADCAST_DELTA_DATA = 2, // 변경된 데이터 전송
BROADCAST_DELETE_DATA = 3 // 해당 크리쳐 삭제 데이터 전송
};
// 소유 정보 (성ID, 길드 요새ID, 소유자CID), 길드ID
struct sOwnerShipInfo
{
unsigned long m_dwCampOrCastleID;
unsigned long m_dwOwnerCID;
unsigned long m_dwGID;
unsigned char m_cNation;
};
// 공성 오브젝트 상태 정보
struct sStateInfo
{
unsigned short m_wObjectType;
unsigned char m_cState;
unsigned char m_cSubState;
unsigned char m_cUpgradeStep;
unsigned char m_cUpgradeType;
};
// HP 정보
struct sHPInfo
{
unsigned long m_dwNowHP;
unsigned long m_dwMaxHP;
};
// 위치 정보
struct sPosInfo
{
float m_fDefaultDir;
CNetworkPos m_NetworkPos;
};
// 자재 정보
struct sMaterialInfo
{
unsigned char m_cMaterial;
};
// 탑승자 정보
struct sRiderInfo
{
unsigned long m_dwRiderID[Siege::AIRSHIP_RIDER_NUM];
};
// =============================================================================================
// SiegeObject Data
class CSiegeObjectData
{
public:
CSiegeObjectData();
~CSiegeObjectData();
// ===================================================================================
// Get 함수
const unsigned long GetCID() const { return m_dwCID; }
const sOwnerShipInfo& GetOwnerShipInfo() const { return m_OwershipInfo; }
const unsigned long GetCastleID() const { return m_OwershipInfo.m_dwCampOrCastleID; }
const unsigned long GetCampID() const { return m_OwershipInfo.m_dwCampOrCastleID; }
const unsigned long GetOwnerCID() const { return m_OwershipInfo.m_dwOwnerCID; }
const unsigned long GetGID() const { return m_OwershipInfo.m_dwGID; }
const unsigned char GetNation() const { return m_OwershipInfo.m_cNation; }
const sStateInfo& GetStateInfo() const { return m_StateInfo; }
const unsigned short GetObjectType() const { return m_StateInfo.m_wObjectType; }
const unsigned char GetState() const { return m_StateInfo.m_cState; }
const unsigned char GetSubState() const { return m_StateInfo.m_cSubState; }
const unsigned char GetUpgradeType() const { return m_StateInfo.m_cUpgradeType; }
const unsigned char GetUpgradeStep() const { return m_StateInfo.m_cUpgradeStep; }
const sHPInfo& GetHPInfo() const { return m_HPInfo; }
const unsigned long GetNowHP() const { return m_HPInfo.m_dwNowHP; }
const unsigned long GetMaxHP() const { return m_HPInfo.m_dwMaxHP; }
const sPosInfo& GetPosInfo() const { return m_PosInfo; }
const float GetDefaultDir() const { return m_PosInfo.m_fDefaultDir; }
const CNetworkPos& GetNetworkPos() const { return m_PosInfo.m_NetworkPos; }
const sMaterialInfo& GetMaterialInfo() const { return m_MaterialInfo; }
const unsigned char GetMaterialNum() const { return m_MaterialInfo.m_cMaterial; }
const sRiderInfo& GetRiderInfo() const { return m_RiderInfo; }
const void GetRiders( unsigned long* pPassenger ) const;
const bool IsSameRiders( unsigned long * pPassenger ) const;
// ===================================================================================
// Set 함수
void SetOwnerShipInfo( const sOwnerShipInfo& info ) { m_OwershipInfo = info; }
void SetCastleID( unsigned long dwCastleID ) { m_OwershipInfo.m_dwCampOrCastleID = dwCastleID; }
void SetCampID( unsigned long dwCampID ) { m_OwershipInfo.m_dwCampOrCastleID = dwCampID; }
void SetOwnerCID( unsigned long dwOwnerCID ) { m_OwershipInfo.m_dwOwnerCID = dwOwnerCID; }
void SetGID( unsigned long dwGID ) { m_OwershipInfo.m_dwGID = dwGID; }
void SetNation( unsigned char cNation ) { m_OwershipInfo.m_cNation = cNation; }
void SetStateInfo( const sStateInfo& info ) { m_StateInfo = info; }
void SetObjectType( unsigned short wType ) { m_StateInfo.m_wObjectType = wType; }
void SetState( unsigned char cState ) { m_StateInfo.m_cState = cState; }
void SetSubState( unsigned char cSubState ) { m_StateInfo.m_cSubState = cSubState; }
void SetUpgradeType( unsigned char cType ) { m_StateInfo.m_cUpgradeType = cType; }
void SetUpgradeStep( unsigned char cStep ) { m_StateInfo.m_cUpgradeStep = cStep; }
void SetHPInfo( const sHPInfo& info ) { m_HPInfo = info; }
void SetNowHP( unsigned long dwNowHP ) { m_HPInfo.m_dwNowHP = dwNowHP; }
void SetMaxHP( unsigned long dwMaxHP ) { m_HPInfo.m_dwMaxHP = dwMaxHP; }
void SetPosInfo( const sPosInfo& info ) { m_PosInfo = info; }
void SetDefaultDir( float fDir ) { m_PosInfo.m_fDefaultDir = fDir; }
void SetNetworkPos( const CNetworkPos& pos) { m_PosInfo.m_NetworkPos = pos; }
void SetMaterialInfo( const sMaterialInfo& info ) { m_MaterialInfo = info; }
void SetMaterialNum( unsigned char cMaterial ) { m_MaterialInfo.m_cMaterial = cMaterial; }
void SetRiderInfo( const sRiderInfo& info ) { m_RiderInfo = info; }
void SetRiders( unsigned long* pPassenger );
void ClearRiders();
// ===================================================================================
// Data 처리 함수
void ClearData();
//! 버퍼와 버퍼 길이를 인자로 받아서 데이터를 업데이트한다.
//! 리턴시에 버퍼 길이에, 사용한 버퍼 길이를 넣어 준다.
//! 리턴값은 성공/실패 여부를 리턴한다.
bool UpdateData( unsigned long dwCID, const char* szData, int& iBufferSize_InOut );
static int EstimateBufferSize( unsigned long dwUpdateFlag );
// ===================================================================================
// Data Flag 관련 함수
void SetUpdateDataFlag( unsigned long dwFlag ) { m_dwUpdateDataFlag |= dwFlag; }
bool HasUpdateDataFlag( unsigned long dwFlag ) { return 0 != (m_dwUpdateDataFlag & dwFlag); }
void ResetUpdateDataFlag( unsigned long dwFlag ) { m_dwUpdateDataFlag &= ~dwFlag; }
void ClearUpdateDataFlag() { m_dwUpdateDataFlag = 0; }
unsigned long GetDataFlag() const { return m_dwUpdateDataFlag; }
private:
unsigned long m_dwCID;
sOwnerShipInfo m_OwershipInfo;
sStateInfo m_StateInfo;
sHPInfo m_HPInfo;
sPosInfo m_PosInfo;
sMaterialInfo m_MaterialInfo;
sRiderInfo m_RiderInfo;
unsigned long m_dwUpdateDataFlag;
};
}
#endif __BROADCAST_SIEGEOBJECT_DATA_H__