#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 struct minislot_struct { _type Random : 1; //是否随机 _type Exist : 1; //是否存在 _type Position : 4; //如果存在,那就是Script的部分索引。现在(1 ~ 8) _type Reserve : 2; }; template struct LottoStruct { //[UNK]16字节 // 8 BYTE _type Index : 16; // 乐透脚本索引 _type Identity : 8; // 身份状态 _type Count : 16; // Item Count _type Reserve : 32; // 8 BYTE minislot_struct 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 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