512 lines
35 KiB
C++
512 lines
35 KiB
C++
#ifndef _SOLAR_SLOT_SCSLOTSTRUCT_VERSION_H
|
||
#define _SOLAR_SLOT_SCSLOTSTRUCT_VERSION_H
|
||
#pragma once
|
||
|
||
//--------------------------------------------------------------------------------------------------
|
||
#define CREATE_ITEMSTREAMEX_VERSION(ver) \
|
||
typedef union { \
|
||
struct{ \
|
||
ITEMPART_VER##ver Part; \
|
||
OPTIONPART_VER##ver OptionPart; \
|
||
}; \
|
||
BYTE pStream[sizeof(ITEMPART_VER##ver) + sizeof(OPTIONPART_VER##ver)]; \
|
||
} ITEMSTREAMEX_VER##ver
|
||
|
||
|
||
#define TYPEDEF_ITEMSTREAMEX_VERSION(ver) \
|
||
typedef ITEMPART_VER##ver ITEMPART; \
|
||
typedef OPTIONPART_VER##ver OPTIONPART; \
|
||
typedef ITEMSTREAMEX_VER##ver ITEMSTREAMEX
|
||
//--------------------------------------------------------------------------------------------------
|
||
|
||
|
||
#pragma pack(push,1)
|
||
|
||
template<typename _type = BYTE>
|
||
struct minislot_struct
|
||
{
|
||
_type Random : 1; //是否随机
|
||
_type Exist : 1; //是否存在
|
||
_type Position : 4; //如果存在,那就是Script的部分索引。现在(1 ~ 8)
|
||
_type Reserve : 2;
|
||
};
|
||
|
||
template<typename _type = UINT64>
|
||
struct LottoStruct
|
||
{
|
||
//[UNK]16字节
|
||
// 8 BYTE
|
||
_type Index : 16; // 乐透脚本索引
|
||
_type Identity : 8; // 身份状态
|
||
_type Count : 16; // Item Count
|
||
_type Reserve : 32;
|
||
|
||
// 8 BYTE
|
||
minislot_struct<BYTE> minislot[MAX_PANDORA_SLOT_NUM];
|
||
};
|
||
|
||
//==================================================================================================
|
||
|
||
//-------------------------------------------------------------------------
|
||
// 最小单位
|
||
//项目信息显示基本单位
|
||
//-------------------------------------------------------------------------
|
||
// 8byte
|
||
struct ITEMPART_VER1
|
||
{
|
||
BYTE byType;
|
||
DWORD dwSerial;
|
||
WORD wCode;
|
||
DURATYPE byDura;
|
||
inline BOOL IsValid() { return (wCode != 0); } // (NOTE) unused, no change BOOL->bool and const
|
||
};
|
||
|
||
typedef ITEMPART_VER1 ITEMPART_VER2;
|
||
|
||
// 8 + 2 + 1 = 11Byte
|
||
struct ITEMPART_VER3
|
||
{
|
||
union {
|
||
struct {
|
||
DWORD64 dwSerial : 40;
|
||
DWORD64 byType : 8;
|
||
DWORD64 byReserved2 : 8;
|
||
DWORD64 byReserved1 : 8;
|
||
};
|
||
DWORD64 m_WorldSerial;
|
||
};
|
||
|
||
WORD wCode;
|
||
DURATYPE byDura;
|
||
inline bool IsValid() const { return (wCode != 0); }
|
||
};
|
||
|
||
|
||
typedef ITEMPART_VER3 ITEMPART_VER4;
|
||
typedef ITEMPART_VER3 ITEMPART_VER5;
|
||
typedef ITEMPART_VER5 ITEMPART_VER6; //_NA_20090925_ITEMSTREAM_INIT_RESERVED
|
||
typedef ITEMPART_VER6 ITEMPART_VER7; //__NA000000_090906_SOLAR_SLOT_CODE_ARRANGEMENT__
|
||
typedef ITEMPART_VER7 ITEMPART_VER8; //_NA002237_100802_EP2_SOCKET_SYSTEM_DB_
|
||
//typedef ITEMPART_VER7 ITEMPART_VERx; //_NA000109_100427_SOLAR_SLOT_UPDATE_TO_VER8_
|
||
//==================================================================================================
|
||
|
||
//======================================= OPTIONPART ===============================================
|
||
// Version 1 : 11byte
|
||
struct OPTIONPART_VER1
|
||
{
|
||
//------------------------------------------------------------------------------
|
||
// 11Byte
|
||
//------------------------------------------------------------------------------
|
||
// 8byte == 64bit
|
||
union {
|
||
struct
|
||
{ // 일반
|
||
UINT64 RankOption1 : 6;
|
||
UINT64 RankOption2 : 6;
|
||
UINT64 RankOption3 : 6;
|
||
UINT64 RankOption4 : 6;
|
||
UINT64 RankOption5 : 6;
|
||
UINT64 RankOption6 : 6;
|
||
UINT64 RankOption7 : 6;
|
||
UINT64 RankOption8 : 6;
|
||
UINT64 RankOption9 : 6; //54
|
||
UINT64 Rank : 4; //58
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
};
|
||
struct
|
||
{ // 기간
|
||
UINT64 bExpiredTime : 1; //是否过期
|
||
UINT64 bProgressTime : 1;
|
||
UINT64 NotUsed : 11; //13
|
||
UINT64 DateTime : 45; //58 :定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
};
|
||
struct
|
||
{ // 좌표
|
||
UINT64 MapCode : 16;
|
||
UINT64 X : 16; //32
|
||
UINT64 Y : 16; //48
|
||
UINT64 Z : 16; //64
|
||
//UINT64 Enchant : 4; //62
|
||
//UINT64 SocketNum : 2; //64
|
||
};
|
||
};
|
||
|
||
// 2byte
|
||
USHORT NOption : 3;
|
||
USHORT Block : 1;
|
||
USHORT SocketOption1 : 6;
|
||
USHORT SocketOption2 : 6;
|
||
|
||
// 1byte
|
||
BYTE SocketOption3 : 6;
|
||
BYTE Set : 2;
|
||
};
|
||
|
||
// Version 2 : 12byte
|
||
|
||
struct OPTIONPART_VER2
|
||
{
|
||
//--------------------------------------------------------------
|
||
// 12Byte
|
||
//-------------------------------------------------------------
|
||
// 8byte == 64bit
|
||
union
|
||
{
|
||
struct
|
||
{//一般
|
||
UINT64 RankOption1 : 6;
|
||
UINT64 RankOption2 : 6;
|
||
UINT64 RankOption3 : 6;
|
||
UINT64 RankOption4 : 6;
|
||
UINT64 RankOption5 : 6;
|
||
UINT64 RankOption6 : 6;
|
||
UINT64 RankOption7 : 6;
|
||
UINT64 RankOption8 : 6;
|
||
UINT64 RankOption9 : 6; //54
|
||
UINT64 Rank : 4; //58
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
};
|
||
struct
|
||
{//期间
|
||
UINT64 bExpiredTime : 1; //是否过期
|
||
UINT64 bProgressTime : 1;
|
||
UINT64 bExpiredWaitTime: 1;
|
||
UINT64 NotUsed : 10;
|
||
UINT64 DateTime : 45; //58 :定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
};
|
||
struct
|
||
{//坐标
|
||
UINT64 MapCode : 16;
|
||
UINT64 X : 16; //32
|
||
UINT64 Y : 16; //48
|
||
UINT64 Z : 16; //64
|
||
//UINT64 Enchant : 4; //62
|
||
//UINT64 SocketNum : 2; //64
|
||
};
|
||
};
|
||
|
||
// 4byte
|
||
UINT NOption : 3;
|
||
UINT Block : 1;
|
||
UINT SocketOption1 : 7;
|
||
UINT SocketOption2 : 7;
|
||
UINT SocketOption3 : 7;
|
||
UINT Set : 2;
|
||
UINT UserBlock : 1;
|
||
UINT Reserved : 4;
|
||
};
|
||
|
||
struct OPTIONPART_VER3 //< PC_ROOM_EXCLUSIVE_CONTENTS
|
||
{
|
||
//-------------------------------------------------------------
|
||
// 20Byte
|
||
//-------------------------------------------------------------
|
||
|
||
//16 byte
|
||
union
|
||
{
|
||
struct
|
||
{//期间
|
||
UINT64 RankOption1 : 7;
|
||
UINT64 RankOption2 : 7;
|
||
UINT64 RankOption3 : 7;
|
||
UINT64 RankOption4 : 7;
|
||
UINT64 RankOption5 : 7;
|
||
UINT64 RankOption6 : 7;
|
||
UINT64 RankOption7 : 7;
|
||
UINT64 RankOption8 : 7;
|
||
UINT64 RankOption9 : 7; //63
|
||
UINT64 Rank : 4; //4
|
||
UINT64 bExpiredTime : 1; //是否过期
|
||
UINT64 bProgressTime : 1;
|
||
UINT64 bExpiredWaitTime: 1;
|
||
UINT64 NotUsed : 6;
|
||
UINT64 DateTime : 45; //58 : 定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
|
||
};
|
||
struct
|
||
{//坐标
|
||
UINT64 MapCode : 16;
|
||
UINT64 X : 16; //32
|
||
UINT64 Y : 16;
|
||
UINT64 Z : 16; //64
|
||
};
|
||
struct
|
||
{//限量的
|
||
UINT64 LimitedIndex : 16; //16 //限定索引
|
||
UINT64 DuraMMax : 9; //25 //最大耐久度(最大耐久度恢复用)
|
||
UINT64 DuraMax : 9; //34 //最大耐久度(修理时切割)
|
||
UINT64 RepairCount : 4; //38 //修理次数
|
||
UINT64 DamageRatio : 9; //47 //攻击力比率(防具是防御力)
|
||
UINT64 LimitValueRatio : 9; //56 //限制数值比率
|
||
UINT64 L_Enchant : 4; //60
|
||
UINT64 L_SocketNum : 2; //62
|
||
UINT64 Reserve1 : 2; //64
|
||
|
||
UINT64 BasicOption1 : 7; //7 //默认选项1
|
||
UINT64 BasicOptValue1 : 6; //13 //默认选项1值
|
||
UINT64 BasicOption2 : 7; //20 //默认选项2
|
||
UINT64 BasicOptValue2 : 6; //26 //默认选项2值
|
||
UINT64 BasicOption3 : 7; //33 //默认选项3
|
||
UINT64 BasicOptValue3 : 6; //39 //默认选项3值
|
||
UINT64 Reserve2 : 25; //64 //默认选项3值
|
||
};
|
||
struct
|
||
{
|
||
UINT64 FateInfoIndex : 16; //16
|
||
UINT64 F_DateTime : 45; //61 :定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 F_bExpiredTime : 1; //62 :是否过期
|
||
UINT64 F_Identify : 1; //63
|
||
UINT64 F_bExpiredWaitTime : 1; //64
|
||
|
||
UINT64 F_AtkDefRatio : 9; //9
|
||
UINT64 F_DuraMax : 9; //18
|
||
UINT64 F_Enchant : 4; //22
|
||
UINT64 F_SocketNum : 2; //24
|
||
UINT64 F_Period : 14; //38
|
||
UINT64 F_Reserve3 : 26; //64
|
||
};
|
||
};
|
||
|
||
// 4byte
|
||
UINT NOption : 3;
|
||
UINT Block : 1; //4
|
||
UINT SocketOption1 : 8; //12
|
||
UINT SocketOption2 : 8; //20
|
||
UINT SocketOption3 : 8; //28
|
||
|
||
UINT Set : 2; //30
|
||
UINT UserBlock : 1; //31
|
||
UINT IsLimited : 1; //32 //是限量单品吗?
|
||
|
||
};
|
||
|
||
typedef OPTIONPART_VER3 OPTIONPART_VER4;
|
||
|
||
struct OPTIONPART_VER5
|
||
{
|
||
//-------------------------------------------------------------
|
||
// 24Byte
|
||
//-------------------------------------------------------------
|
||
|
||
//16 byte
|
||
union
|
||
{
|
||
struct
|
||
{// 기간
|
||
UINT64 RankOption1 : 7;
|
||
UINT64 RankOption2 : 7;
|
||
UINT64 RankOption3 : 7;
|
||
UINT64 RankOption4 : 7;
|
||
UINT64 RankOption5 : 7;
|
||
UINT64 RankOption6 : 7;
|
||
UINT64 RankOption7 : 7;
|
||
UINT64 RankOption8 : 7;
|
||
UINT64 RankOption9 : 7; //63
|
||
UINT64 Rank : 4; //4
|
||
UINT64 bExpiredTime : 1; //是否过期
|
||
UINT64 bProgressTime : 1;
|
||
UINT64 bExpiredWaitTime: 1;
|
||
UINT64 NotUsed : 6;
|
||
UINT64 DateTime : 45; //58 :定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 Enchant : 4; //62
|
||
UINT64 SocketNum : 2; //64
|
||
};
|
||
|
||
struct
|
||
{//坐标
|
||
UINT64 MapCode : 16;
|
||
UINT64 X : 16; //32
|
||
UINT64 Y : 16;
|
||
UINT64 Z : 16; //64
|
||
};
|
||
|
||
struct
|
||
{//限量的
|
||
UINT64 LimitedIndex : 16; //16 //限定索引
|
||
UINT64 DuraMMax : 9; //25 //最大耐久度(最大耐久度恢复用)
|
||
UINT64 DuraMax : 9; //34 //最大耐久度(修理时切割)
|
||
UINT64 RepairCount : 4; //38 //修理次数
|
||
UINT64 DamageRatio : 9; //47 //攻击力比率(防具是防御力)
|
||
UINT64 LimitValueRatio : 9; //56 //限制数值比率
|
||
UINT64 L_Enchant : 4; //60
|
||
UINT64 L_SocketNum : 2; //62
|
||
UINT64 Reserve1 : 2; //64
|
||
|
||
UINT64 BasicOption1 : 7; //7 //默认选项1
|
||
UINT64 BasicOptValue1 : 6; //13 //默认选项1 값
|
||
UINT64 BasicOption2 : 7; //20 //默认选项2
|
||
UINT64 BasicOptValue2 : 6; //26 //默认选项2 값
|
||
UINT64 BasicOption3 : 7; //33 //默认选项3
|
||
UINT64 BasicOptValue3 : 6; //39 //默认选项3 값
|
||
UINT64 Reserve2 : 25; //64 //默认选项3 값
|
||
};
|
||
|
||
struct
|
||
{
|
||
UINT64 FateInfoIndex : 16; //16
|
||
UINT64 F_DateTime : 45; //61 : 定额制[200511072606:10条],max[351843720882:35条],定量制10小时25分35秒
|
||
UINT64 F_bExpiredTime : 1; //62 :是否过期
|
||
UINT64 F_Identify : 1; //63
|
||
UINT64 F_bExpiredWaitTime : 1; //64
|
||
|
||
UINT64 F_AtkDefRatio : 9; //9
|
||
UINT64 F_DuraMax : 9; //18
|
||
UINT64 F_Enchant : 4; //22
|
||
UINT64 F_SocketNum : 2; //24
|
||
UINT64 F_Period : 14; //38
|
||
UINT64 F_Reserve3 : 26; //64
|
||
};
|
||
|
||
LottoStruct<UINT64> Lotto;
|
||
|
||
struct
|
||
{//具有坐标列表链接的项目功能的激活、非活动依据。
|
||
UINT64 WP_bExpiredTime : 1; //是否过期
|
||
UINT64 WP_bProgressTime : 1;
|
||
UINT64 WP_DateTime : 45; // 47
|
||
UINT64 WP_Reserve4 : 17; // 64
|
||
|
||
UINT64 WP_bDelExpiredTime : 1; //删除限制时间是否过期
|
||
UINT64 WP_DelDateTime : 45; // 46
|
||
UINT64 WP_Reserve5 : 18; // 64
|
||
};
|
||
};
|
||
|
||
// 4byte
|
||
UINT NOption : 3;
|
||
UINT Block : 1; //4
|
||
UINT SocketOption1 : 8; //12
|
||
UINT SocketOption2 : 8; //20
|
||
UINT SocketOption3 : 8; //28
|
||
|
||
UINT Set : 2; //30
|
||
UINT UserBlock : 1; //31
|
||
UINT IsLimited : 1; //32 //是限量单品吗?
|
||
|
||
// 4byte
|
||
UINT bIsEquipEtherDevice : 1; //1
|
||
UINT EtherBulletIndex : 4; //5
|
||
UINT PetName1 : 8; //13
|
||
UINT PetName2 : 8; //21
|
||
UINT bIdentifyPossession : 1;
|
||
UINT bDestroy : 1;
|
||
UINT Reserved : 9; //32
|
||
};
|
||
|
||
//_NA_20090925_ITEMSTREAM_INIT_RESERVED
|
||
typedef OPTIONPART_VER5 OPTIONPART_VER6;
|
||
|
||
//==================================================================================================
|
||
//
|
||
struct ItemParseType
|
||
{
|
||
enum Value
|
||
{
|
||
kEmpty = 0, //空信息
|
||
|
||
kDefault = 5, //普通物品
|
||
kDefaultTime = 6, //一般物品(有时间限制的)
|
||
//_NA_0_20100727_SOKET_SYSTEM_CONVERT
|
||
kExtendData = 7, //一般物品中需要保存简单信息(zard)
|
||
kEquip = 10, //装备道具(Weapon | Armor)
|
||
kEquipTime = 11, //存在时间设置的装备(Weapon | Armor)
|
||
kEquipEtcs = 16, //装备道具(Accessory | Special Accessory)
|
||
kEquipEtcsTime = 17, //存在时间设置的装备(Accessory | Special Accessory)
|
||
kLimited = 20, //限量道具(防具)
|
||
kFate = 22, //漆皮(Lucky)单品
|
||
kCoord = 30, //包含坐标信息的项目选项
|
||
kWayPoint = 31, //
|
||
kPet = 40, //
|
||
//__NA1390_1391_090915_RIDING_SYSTEM_ITEM_PART__
|
||
kRider = 42, //要乘坐的物品
|
||
kRiderParts = 43, //坐骑装备道具
|
||
kLottery = 45, //
|
||
|
||
kCanNotParse = 254, //只储存临时流媒体的形态(没有代码等等..。保存信息)
|
||
kCanNotParseOld = 255, //只储存临时流的形态(转换失败,信息保存)
|
||
kUpperbound = 256, //最后最大数值+1(Max:255)
|
||
};
|
||
typedef uint8_t ValueType;
|
||
};
|
||
|
||
//==================================================================================================
|
||
//
|
||
struct OPTIONPART_VER7
|
||
{
|
||
#ifdef _NA_003740_20111122_RANDOM_ITEM
|
||
#ifdef _NA_003740_20210624_ADDITEMRANDOM_ITEM6
|
||
enum { kBufferSize = 35 };
|
||
#else
|
||
enum { kBufferSize = 33 };
|
||
#endif //_NA_003740_20210624_ADDITEMRANDOM_ITEM6
|
||
#else
|
||
enum { kBufferSize = 23 };
|
||
#endif // _NA_003740_20111122_RANDOM_ITEM
|
||
|
||
//-------------------------------------------------------------
|
||
// 与24Byte-Ver 5大小相同,根据类型不同配置不同的结构
|
||
//-------------------------------------------------------------
|
||
ItemParseType::ValueType ParseType; // 1 Byte
|
||
BYTE Variable[kBufferSize];
|
||
|
||
BOOST_STATIC_ASSERT(sizeof(ItemParseType::ValueType) == 1);
|
||
};
|
||
BOOST_STATIC_ASSERT(sizeof(OPTIONPART_VER7) == (OPTIONPART_VER7::kBufferSize + 1));
|
||
#ifndef _NA_003740_20111122_RANDOM_ITEM
|
||
BOOST_STATIC_ASSERT(sizeof(OPTIONPART_VER7) == sizeof(OPTIONPART_VER6));
|
||
#endif // _NA_003740_20111122_RANDOM_ITEM
|
||
|
||
//==================================================================================================
|
||
// _NA000109_090906_SOLAR_SLOT_UPDATE_VER8_
|
||
/*
|
||
struct OPTIONPART_VERx
|
||
{
|
||
//-------------------------------------------------------------
|
||
// 26Byte - an extended version based on version 7
|
||
//-------------------------------------------------------------
|
||
// referenced by the SerializeItemOption
|
||
ItemParseType ParseType; // 1B
|
||
uint8_t Variable[23 + 2]; // option block for the version 8
|
||
BOOST_STATIC_ASSERT(sizeof(SLOTCODE) == 2 && sizeof(ItemParseType) == 1);
|
||
};
|
||
BOOST_STATIC_ASSERT(sizeof(OPTIONPART_VER8) == 26 &&
|
||
sizeof(OPTIONPART_VER8) == sizeof(OPTIONPART_VER7) + 2);
|
||
*/
|
||
//==================================================================================================
|
||
typedef OPTIONPART_VER7 OPTIONPART_VER8; //_NA002237_100802_EP2_SOCKET_SYSTEM_DB_
|
||
typedef OPTIONPART_VER8 OptionPartCurVer;
|
||
//==================================================================================================
|
||
|
||
//========================================== VERSION ===============================================
|
||
|
||
CREATE_ITEMSTREAMEX_VERSION(1);
|
||
CREATE_ITEMSTREAMEX_VERSION(2);
|
||
CREATE_ITEMSTREAMEX_VERSION(3);
|
||
CREATE_ITEMSTREAMEX_VERSION(4);
|
||
CREATE_ITEMSTREAMEX_VERSION(5);
|
||
CREATE_ITEMSTREAMEX_VERSION(6); //_NA_20090925_ITEMSTREAM_INIT_RESERVED
|
||
CREATE_ITEMSTREAMEX_VERSION(7); //__NA000000_090906_SOLAR_SLOT_UPDATE_VER6__
|
||
CREATE_ITEMSTREAMEX_VERSION(8); //_NA002237_100802_EP2_SOCKET_SYSTEM_DB_
|
||
//CREATE_ITEMSTREAMEX_VERSION(x); //_NA000109_100427_SOLAR_SLOT_UPDATE_TO_VER8_
|
||
|
||
//#if defined(_NA000109_100427_SOLAR_SLOT_UPDATE_TO_VER8_)
|
||
// TYPEDEF_ITEMSTREAMEX_VERSION(8);
|
||
#if defined(_NA002237_100802_EP2_SOCKET_SYSTEM_DB_)
|
||
TYPEDEF_ITEMSTREAMEX_VERSION(8);
|
||
#else
|
||
TYPEDEF_ITEMSTREAMEX_VERSION(7); //__NA000000_090906_SOLAR_SLOT_UPDATE_VER6__
|
||
#endif
|
||
|
||
#pragma pack(pop)
|
||
|
||
#endif //_SOLAR_SLOT_SCSLOTSTRUCT_VERSION_H
|