DragonNest/Common/Protocol/DNUserData.h

360 lines
9.1 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#include "DNCommonDef.h"
#include "../../GameCommon/DNNotifierCommon.h"
/* -----------------------------------------------------------------------------
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> DB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>˾Ƽ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD>~
----------------------------------------------------------------------------- */
#pragma pack(push, 1)
struct TQuickSlot
{
BYTE cType; // eQuickSlotType<70><65><EFBFBD><EFBFBD>
INT64 nID;
};
#if !defined(PRE_DELETE_DUNGEONCLEAR)
struct TDungeonClearData
{
int nMapIndex; // <20>ʾ<EFBFBD><CABE>̵<EFBFBD>
char cType; // Ŭ<><C5AC><EFBFBD><EFBFBD> Ÿ<><C5B8>? (eDungeonClearType)
};
#endif // #if defined(PRE_DELETE_DUNGEONCLEAR)
struct TNestClearData
{
int nMapIndex;
char cClearCount;
char cPCBangClearCount;
};
struct TCharacterStatus
{
__time64_t tLastFatigueDate;
__time64_t tLastEventFatigueDate;
__time64_t tLastRebirthCoinDate;
__time64_t tLastConnectDate;
__time64_t tLastTimeEventDate;
__time64_t tLastPeriodQuestDate[PERIODQUEST_RESET_MAX];
char cAccountLevel; // <20><EFBFBD><EEBFB5>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WCHAR wszCharacterName[NAMELENMAX]; // ij<><C4B3><EFBFBD><EFBFBD>
char cClass; // Ŭ<><C5AC><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ó, <20>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD>)
bool IsCheckFirstVillage; // ij<><C4B3> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> üũ
int nDefaultBody; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> equip (EQUIP_BODY, EQUIP_LEG, EQUIP_HAND, EQUIP_FOOT)
int nDefaultLeg;
int nDefaultHand;
int nDefaultFoot;
BYTE cLevel; // <20><><EFBFBD><EFBFBD>
int nExp; // <20><><EFBFBD><EFBFBD>ġ
BYTE cJob; // <20><><EFBFBD><EFBFBD>
DWORD dwHairColor; // <20>Ӹ<EFBFBD> <20><><EFBFBD><EFBFBD>
DWORD dwEyeColor; // <20><> <20><><EFBFBD><EFBFBD>
DWORD dwSkinColor; // <20>Ǻ<EFBFBD> <20><><EFBFBD><EFBFBD>
int nMapIndex; // <20><><EFBFBD><EFBFBD> <20>ʹ<EFBFBD>ȣ
int nLastVillageMapIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʹ<EFBFBD>ȣ
int nLastSubVillageMapIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Sub<75><62><EFBFBD><EFBFBD> <20>ʹ<EFBFBD>ȣ
char cLastVillageGateNo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>ȣ
int nPosX; // <20><><EFBFBD><EFBFBD> X<><58>ǥ
int nPosY; // <20><><EFBFBD><EFBFBD> Y<><59>ǥ
int nPosZ; // <20><><EFBFBD><EFBFBD> Z<><5A>ǥ
float fRotate; // Rotate
INT64 nCoin; // <20><>
INT64 nWarehouseCoin; // â<><C3A2><EFBFBD><EFBFBD>
BYTE cRebirthCoin; // <20><><EFBFBD><EFBFBD>ī<EFBFBD><C4AB>Ʈ (Coin<69>̶<EFBFBD><CCB6><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǻ<EFBFBD><C7BB>Ƴ<EFBFBD><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
BYTE cPCBangRebirthCoin; // <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD>ī<EFBFBD><C4AB>Ʈ (Coin<69>̶<EFBFBD><CCB6><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǻ<EFBFBD><C7BB>Ƴ<EFBFBD><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
USHORT wCashRebirthCoin; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ī<EFBFBD><C4AB>Ʈ (Coin<69>̶<EFBFBD><CCB6><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǻ<EFBFBD><C7BB>Ƴ<EFBFBD><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
short wFatigue; // <20>Ƿε<C7B7>
short wWeeklyFatigue; // <20>ְ<EFBFBD><D6B0>Ƿε<C7B7>
short wPCBangFatigue; // <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>Ƿε<C7B7>
short wEventFatigue;
short wVIPFatigue;
char cViewCashEquipBitmap[VIEWCASHEQUIPMAX_BITSIZE]; // 4 * 8 = 32<33><32>
BYTE cJobArray[JOBMAX]; // <20><><EFBFBD><EFBFBD> (0: <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>~ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
DNNotifier::Data NotifierData[DNNotifier::RegisterCount::Total];
TQuickSlot QuickSlot[QUICKSLOTMAX]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>â (10<31><30><EFBFBD><EFBFBD> 2<><32>)
#if !defined(PRE_DELETE_DUNGEONCLEAR)
TDungeonClearData DungeonClear[DUNGEONCLEARMAX]; // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> (120<32><30>)
#endif // #if !defined(PRE_DELETE_DUNGEONCLEAR)
TNestClearData NestClear[NESTCLEARMAX]; // <20>׽<EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD>
int nDungeonClearCount; // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>
int nGlyphDelayTime;
int nGlyphRemainTime;
short wMarketRegisterCount; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD>
int nMarketSellSuccess; // <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD>
int nMarketSellFailure; // <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD>
int nMarketRegisterTax; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nMarketSellTax; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nPetal; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ż)
char cSkillPage; // <20><><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ <20>Ǿ<EFBFBD><C7BE>ִ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if defined( PRE_PRIVATECHAT_CHANNEL )
INT64 nPrivateChatChannel; // <20><><EFBFBD><EFBFBD> <20>ҼӵǾ<D3B5><C7BE>ִ<EFBFBD> <20>缳 ä<><C3A4> <20><>ȣ
#endif
#if defined( PRE_ADD_STAMPSYSTEM )
__time64_t tLastStampDate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
};
struct TDailyMission
{
int nMissionID;
bool bAchieve;
int nCounter;
};
struct TMissionGroup
{
int nMissionScore; // <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
short wLastMissionAchieve[LASTMISSIONACHIEVEMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD>޼<EFBFBD>(?)
//<2F>Ʒ<EFBFBD> <20>÷<EFBFBD><C3B7>׵<EFBFBD><D7B5><EFBFBD> 8bit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><>Ʈ <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> (ex <20>̼<EFBFBD> <20><><EFBFBD>۰<EFBFBD> 0 : 1000 0000 <20><> ǥ<><C7A5>, 1 <20><> 0100 0000 )
char MissionGain[MISSIONMAX_BITSIZE]; // ȹ<><EFBFBD><E6BFA9>
char MissionAchieve[MISSIONMAX_BITSIZE]; // <20><>ǥ<EFBFBD>޼<EFBFBD>(on/off)
TDailyMission DailyMission[DAILYMISSIONMAX];
TDailyMission WeeklyMission[WEEKLYMISSIONMAX];
TDailyMission WeekendEventMission[WEEKENDEVENTMISSIONMAX];
TDailyMission GuildWarMission[GUILDWARMISSIONMAX];
TDailyMission PCBangMission[PCBangMissionMax];
TDailyMission GuildCommonMission[GUILDCOMMONMISSIONMAX];
TDailyMission WeekendRepeatMission[WEEKENDREPEATMISSIONMAX];
#if defined(PRE_ADD_MONTHLY_MISSION)
TDailyMission MonthlyMission[MONTHLYMISSIONMAX];
#endif // #if defined(PRE_ADD_MONTHLY_MISSION)
__time64_t tDailyMissionDate;
__time64_t tWeeklyMissionDate;
#if defined(PRE_ADD_MONTHLY_MISSION)
__time64_t tMonthlyMissionDate;
#endif // #if defined(PRE_ADD_MONTHLY_MISSION)
};
struct TAppellationGroup
{
int nSelectAppellation; // <20><><EFBFBD>õ<EFBFBD> ȣĪ
int nCoverAppellation; // Ŀ<><C4BF> ȣĪ
char Appellation[APPELLATIONMAX_BITSIZE]; // ȣĪ
};
struct TPvPGroup
{
BYTE cLevel; // <20><><EFBFBD><EFBFBD>
UINT uiXP; // XP
UINT uiPlayTimeSec; // <20>÷<EFBFBD><C3B7><EFBFBD>Ÿ<EFBFBD><C5B8>(<28><>)
UINT uiWin; // <20>¸<EFBFBD>
UINT uiLose; // <20>й<EFBFBD>
UINT uiDraw; // <20><><EFBFBD>º<EFBFBD>
UINT uiGiveUpCount; // <20>߰<EFBFBD><DFB0><EFBFBD>Ż<EFBFBD><C5BB>
UINT uiKOClassCount[PvPCommon::Common::MaxClass]; // <20><> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KO<4B><4F>Ų Ƚ<><C8BD>
UINT uiKObyClassCount[PvPCommon::Common::MaxClass]; // <20><> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KO<4B><4F><EFBFBD><EFBFBD> ȸ<><C8B8>
INT64 biTotalKillPoint;
INT64 biTotalAssistPoint;
INT64 biTotalSupportPoint;
int nExpAbsoluteRank; //<2F><><EFBFBD><EFBFBD> 101<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20>Ѿ<EFBFBD><D1BE>´<EFBFBD>. <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD>
float fExpRateRank; //Ư<><C6AF> exp<78>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><> <20>ۼ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<EFBFBD><D1BE>´<EFBFBD>
};
struct TItem
{
int nItemID;
INT64 nSerial; // <20>ø<EFBFBD><C3B8><EFBFBD>
int nRandomSeed;
USHORT wDur; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short wCount; // <20><><EFBFBD><EFBFBD>
int nCoolTime; // <20><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8>
char cLevel; // <20><><EFBFBD><EFBFBD>
char cPotential; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bSoulbound; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><> <20>ͼ<EFBFBD>)
char cOption;
char cSealCount; // <20>к<EFBFBD>ī<EFBFBD><C4AB>Ʈ
bool bEternity; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__time64_t tExpireDate;
int nLookItemID;
int nLifespan;
bool bExpireComplete;
char cPotentialMoveCount; //<2F>̵<EFBFBD>ī<EFBFBD><C4AB>Ʈ 0<≯<EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0<>̻<EFBFBD><CCBB≯<EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> ȸ<><C8B8>
char cDragonJewelType;
};
struct TFarmWareHouseItem:public TItem
{
INT64 biUniqueID;
__time64_t tMaterializeDate;
};
struct TQuestItem
{
int nItemID;
INT64 nSerial; // <20>ø<EFBFBD><C3B8><EFBFBD>
short wCount; // <20><><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 6<><36><EFBFBD><EFBFBD>Ʈ
const int QUEST_EXTRACOUNT_MAX = 10;
struct TCount
{
char cType; // cType <20><> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> (EnumCountingType)
int nIndex;
unsigned short nCnt;
unsigned short nTargetCnt;
};
const int ExtraSize = sizeof(TCount) * QUEST_EXTRACOUNT_MAX;
struct TQuest
{
int nQuestID; // <20><><EFBFBD><EFBFBD>Ʈ <20>ε<EFBFBD><CEB5><EFBFBD>
char cQuestState; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (EnumQuestState)
short nQuestStep; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
char cQuestJournal; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
__time64_t tRegistDate; // <20><><EFBFBD>Ͻð<CFBD>
char Extra[ExtraSize]; // TCount cnt[QUEST_EXTRACOUNT_MAX] // <20><><EFBFBD><EFBFBD> 210 bytes
TP_QUESTMEMO nMemo[QUESTMEMOMAX]; // <20>޸<EFBFBD> (<28>ε<EFBFBD><CEB5><EFBFBD> 1~10, <20><>ȹ<EFBFBD><C8B9> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD>)
};
const int MAX_QUEST_INDEX = 10000;
const int COMPLETEQUEST_BITSIZE = (MAX_QUEST_INDEX / CHAR_BIT);
#if defined(PRE_FIX_QUESTCOUNT)
const int MAX_PLAY_QUEST = 40;
#else // #if defined(PRE_FIX_QUESTCOUNT)
const int MAX_PLAY_QUEST = 25;
#endif // #if defined(PRE_FIX_QUESTCOUNT)
const int MAX_BROWSER_URL = 64;
struct TQuestGroup
{
TQuest Quest[MAX_PLAY_QUEST];
char CompleteQuest[COMPLETEQUEST_BITSIZE];
};
struct TSkill
{
int nSkillID; // <20><>ų<EFBFBD><C5B3><EFBFBD>̵<EFBFBD>
BYTE cSkillLevel; // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>
int nCoolTime; // <20><>Ÿ<EFBFBD><C5B8>
bool bLock; // <20><EFBFBD><E2BABB> true.. <20><><EFBFBD>Ŀ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
};
struct TSkillGroup
{
bool bResetSkill; // <20><>ų<EFBFBD>ʱ<EFBFBD>ȭ <20>ߴ<EFBFBD><DFB4><EFBFBD> (<28><EFBFBD><E2BABB> false <20>ѹ<EFBFBD><D1B9>ϸ<EFBFBD> true)
USHORT wSkillPoint; // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ
TSkill SkillList[SKILLMAX]; // <20><>ų
};
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
struct TEffectSkillData
{
INT64 nItemSerial;
int nItemID;
int nSkillID;
int nSkillLevel;
__time64_t tExpireDate;
int nRemainTime;
bool bEternity; // false:<3A><EFBFBD><E2B0A3>, true:<3A><><EFBFBD><EFBFBD>
bool bApplySkill;
};
#endif
struct TGesture
{
int nGestureID; //<2F><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>̵<EFBFBD>
};
struct TTimeEvent
{
int nItemID;
INT64 nRemainTime;
bool bCheckFlag;
};
struct TTimeEventGroup
{
TTimeEvent Event[TIMEEVENTMAX];
};
struct TUserData
{
TCharacterStatus Status;
TPvPGroup PvP;
TSkillGroup Skill[DualSkill::Type::MAX];
TQuestGroup Quest;
TAppellationGroup Appellation;
TMissionGroup Mission;
TTimeEventGroup TimeEvent;
};
struct TMasterSystemOppositeInfo
{
INT64 CharacterDBID;
WCHAR wszCharName[NAMELENMAX];
int nFavorPoint;
};
struct TMasterSystemSimpleInfo
{
int iMasterCount;
int iPupilCount;
int iGraduateCount;
__time64_t BlockDate;
BYTE cCharacterDBIDCount;
TMasterSystemOppositeInfo OppositeInfo[MasterSystem::Max::OppositeCount];
};
struct TMasterSystemData
{
TMasterSystemSimpleInfo SimpleInfo;
};
struct TRestraint
{
UINT nRestraintKey;
int nRestraintType; //eRestraintType
__time64_t _tBegineTime;
__time64_t _tEndTime;
WCHAR wszRestraintReason[RESTRAINTREASONMAX];
};
struct TRestraintData
{
TRestraint Restraint[RESTRAINTMAX];
};
struct TChracterLevel
{
INT64 biCharacterDBID;
BYTE cLevel;
};
struct TUnionMembership
{
BYTE cType;
int nItemID;
__time64_t tExpireDate;
};
struct ItemCount
{
int id;
int count;
};
#pragma pack(pop)