Files
Sun1602/SolarSlot/SCSlotStruct_Version.h
T
2022-10-26 12:25:11 +08:00

512 lines
35 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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, //最后最大数值+1Max: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