#pragma once #include "DNCommonDef.h" #include "../../GameCommon/DNNotifierCommon.h" /* ----------------------------------------------------------------------------- ¿©±â ±¸Á¶Ã¼´Â DBÀúÀå¿ë ±¸Á¶Ã¼ ÀúÀå¾ÈÇÏ´Â º¯¼ö´Â °¢ Ŭ·¡½º¿¡¼­ ¾Ë¾Æ¼­ »ý¼ºÇØÁÖ¼¼¿ë~ ----------------------------------------------------------------------------- */ #pragma pack(push, 1) struct TQuickSlot { BYTE cType; // eQuickSlotTypeÂüÁ¶ INT64 nID; }; #if !defined(PRE_DELETE_DUNGEONCLEAR) struct TDungeonClearData { int nMapIndex; // ¸Ê¾ÆÀ̵ð char cType; // Ŭ¸®¾î ŸÀÔ? (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; // ¿î¿µÀÚ, °³¹ßÀÚ µîµîÀÇ °èÁ¤·¹º§ WCHAR wszCharacterName[NAMELENMAX]; // ij¸¯¸í char cClass; // Ŭ·¡½º (¿ö¸®¾î, ¾ÆÃ³, ¼Ò¼­¸®½º, Ŭ·¡¸¯) bool IsCheckFirstVillage; // ij¸¯ »ý¼º ÈÄ ºô¸®Áö óÀ½ Á¢¼Ó üũ int nDefaultBody; // óÀ½ »ý¼º½Ã¿¡ ¼³Á¤ÇÑ equip (EQUIP_BODY, EQUIP_LEG, EQUIP_HAND, EQUIP_FOOT) int nDefaultLeg; int nDefaultHand; int nDefaultFoot; BYTE cLevel; // ·¹º§ int nExp; // °æÇèÄ¡ BYTE cJob; // Á÷¾÷ DWORD dwHairColor; // ¸Ó¸® »ö±ò DWORD dwEyeColor; // ´« »ö±ò DWORD dwSkinColor; // ÇǺΠ»ö±ò int nMapIndex; // ÇöÀç ¸Ê¹øÈ£ int nLastVillageMapIndex; // ¸¶Áö¸· ¸¶À» ¸Ê¹øÈ£ int nLastSubVillageMapIndex; // ¸¶Áö¸· Sub¸¶À» ¸Ê¹øÈ£ char cLastVillageGateNo; // ¸¶Áö¸· ¸¶À» °ÔÀÌÆ® ¹øÈ£ int nPosX; // ÇöÀç XÁÂÇ¥ int nPosY; // ÇöÀç YÁÂÇ¥ int nPosZ; // ÇöÀç ZÁÂÇ¥ float fRotate; // Rotate INT64 nCoin; // µ· INT64 nWarehouseCoin; // â°íµ· BYTE cRebirthCoin; // ÄÚÀÎÄ«¿îÆ® (CoinÀ̶ûÀº ´Ù¸¥°Í, Á×À¸¸é µÇ»ì¾Æ³¯¶§ ¾²´Â ÄÚÀÎ) BYTE cPCBangRebirthCoin; // ÇǾ¾¹æ ÄÚÀÎÄ«¿îÆ® (CoinÀ̶ûÀº ´Ù¸¥°Í, Á×À¸¸é µÇ»ì¾Æ³¯¶§ ¾²´Â ÄÚÀÎ) USHORT wCashRebirthCoin; // ij½¬·Î »ê ÄÚÀÎÄ«¿îÆ® (CoinÀ̶ûÀº ´Ù¸¥°Í, Á×À¸¸é µÇ»ì¾Æ³¯¶§ ¾²´Â ÄÚÀÎ) short wFatigue; // ÇǷεµ short wWeeklyFatigue; // ÁÖ°£ÇǷεµ short wPCBangFatigue; // ÇǾ¾¹æÇǷεµ short wEventFatigue; short wVIPFatigue; char cViewCashEquipBitmap[VIEWCASHEQUIPMAX_BITSIZE]; // 4 * 8 = 32°³ BYTE cJobArray[JOBMAX]; // Á÷¾÷ (0: ¸ÇóÀ½ Á÷¾÷, ³ª¸ÓÁö ÂßÂß~ ÀüÁ÷ Æ÷ÇÔ) DNNotifier::Data NotifierData[DNNotifier::RegisterCount::Total]; TQuickSlot QuickSlot[QUICKSLOTMAX]; // ´ÜÃà ½½·Ôâ (10°³¾¿ 2ÁÙ) #if !defined(PRE_DELETE_DUNGEONCLEAR) TDungeonClearData DungeonClear[DUNGEONCLEARMAX]; // ´øÀü Ŭ¸®¾î (120°³) #endif // #if !defined(PRE_DELETE_DUNGEONCLEAR) TNestClearData NestClear[NESTCLEARMAX]; // ³×½ºÆ® Ŭ¸®¾î int nDungeonClearCount; // ´øÁ¯ Ŭ¸®¾î ¼ö int nGlyphDelayTime; int nGlyphRemainTime; short wMarketRegisterCount; // ¸¶ÄÏ µî·Ï °¡´É Ƚ¼ö int nMarketSellSuccess; // ¸¶ÄÏ ÆÇ¸Å ¼º°ø Ƚ¼ö int nMarketSellFailure; // ¸¶ÄÏ ÆÇ¸Å ½ÇÆÐ Ƚ¼ö int nMarketRegisterTax; // ¸¶ÄÏ ´©Àû µî·Ï ¼ö¼ö·á int nMarketSellTax; // ¸¶ÄÏ ´©Àû ÆÇ¸Å ¼ö¼ö·á int nPetal; // Àû¸³±Ý (ÆäÅ») char cSkillPage; // ÇöÀç Ȱ¼ºÈ­ µÇ¾îÀÖ´Â ½ºÅ³ÆäÀÌÁö #if defined( PRE_PRIVATECHAT_CHANNEL ) INT64 nPrivateChatChannel; // ÇöÀç ¼Ò¼ÓµÇ¾îÀÖ´Â »ç¼³ äÆÃ ¹øÈ£ #endif #if defined( PRE_ADD_STAMPSYSTEM ) __time64_t tLastStampDate; // ¸¶Áö¸·À¸·Î ½ºÅÆÇÁ ½Ã½ºÅÛ¿¡ ±â·ÏÀ» ³²±ä ½Ã°£ #endif // #if defined( PRE_ADD_STAMPSYSTEM ) }; struct TDailyMission { int nMissionID; bool bAchieve; int nCounter; }; struct TMissionGroup { int nMissionScore; // ¹Ì¼ÇÁ¡¼ö short wLastMissionAchieve[LASTMISSIONACHIEVEMAX]; // ¸¶Áö¸· ¸ñÇ¥´Þ¼º(?) //¾Æ·¡ Ç÷¡±×µéÀº 8bit ´ÜÀ§·Î ²÷¾î¼­ ¿ÞÂÊ ºñÆ® ºÎÅÍ Ã³¸®ÇÔ (ex ¹Ì¼Ç ½ÃÀÛ°ª 0 : 1000 0000 ¿¡ Ç¥±â, 1 Àº 0100 0000 ) char MissionGain[MISSIONMAX_BITSIZE]; // ȹµæ¿©ºÎ char MissionAchieve[MISSIONMAX_BITSIZE]; // ¸ñÇ¥´Þ¼º(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; // ¼±ÅÃµÈ È£Äª int nCoverAppellation; // Ä¿¹ö ȣĪ char Appellation[APPELLATIONMAX_BITSIZE]; // ȣĪ }; struct TPvPGroup { BYTE cLevel; // ·¹º§ UINT uiXP; // XP UINT uiPlayTimeSec; // Ç÷¹ÀÌŸÀÓ(ÃÊ) UINT uiWin; // ½Â¸® UINT uiLose; // ÆÐ¹è UINT uiDraw; // ¹«½ÂºÎ UINT uiGiveUpCount; // Áß°£ÀÌÅ»¼ö UINT uiKOClassCount[PvPCommon::Common::MaxClass]; // °¢ Ŭ·¡½º¸¦ KO½ÃŲ Ƚ¼ö UINT uiKObyClassCount[PvPCommon::Common::MaxClass]; // °¢ Ŭ·¡½º¿¡°Ô KO´çÇÑ È¸¼ö INT64 biTotalKillPoint; INT64 biTotalAssistPoint; INT64 biTotalSupportPoint; int nExpAbsoluteRank; //»óÀ§ 101µî±îÁö¸¸ ·©Å©°ªÀÌ ³Ñ¾î¿Â´Ù. ½ÇÀç Ŭ¶óÀÌ¾ðÆ®¿¡ º¸¿©Áö´Â ·©Å©¿Í´Â º°°³ float fExpRateRank; //ƯÁ¤ expÀÌ»óÀÇ À¯ÀúµéÀº »óÀ§ ÀοøÁß ¸î ÆÛ¼¾Æ®¿¡ µå´Â À¯ÀúÀÎÁö ³Ñ¾î¿Â´Ù }; struct TItem { int nItemID; INT64 nSerial; // ½Ã¸®¾ó int nRandomSeed; USHORT wDur; // ³»±¸µµ short wCount; // °³¼ö int nCoolTime; // ³²Àº ÄðŸÀÓ char cLevel; // ·¹º§ char cPotential; // ÀáÀç·Â bool bSoulbound; // °³ºÀ¿©ºÎ (Âø¿ë ½Ã ±Í¼Ó) char cOption; char cSealCount; // ¹ÐºÀÄ«¿îÆ® bool bEternity; // ¿µ±¸¾ÆÀÌÅÛ __time64_t tExpireDate; int nLookItemID; int nLifespan; bool bExpireComplete; char cPotentialMoveCount; //À̵¿Ä«¿îÆ® 0À̸é À̵¿ÇÑÀû ¾øÀ½ 0ÀÌ»óÀ̸é À̵¿ÇÑ È¸¼ö char cDragonJewelType; }; struct TFarmWareHouseItem:public TItem { INT64 biUniqueID; __time64_t tMaterializeDate; }; struct TQuestItem { int nItemID; INT64 nSerial; // ½Ã¸®¾ó short wCount; // °³¼ö }; // Äù½ºÆ®¿¡¼­ ÇÊ¿äÇÑ ¾ÆÀÌÅÛ/¸ó½ºÅÍ Ä«¿îÆÃ Á¤º¸ 6¹ÙÀÌÆ® const int QUEST_EXTRACOUNT_MAX = 10; struct TCount { char cType; // cType ÀÌ ¸ó½ºÅÍ¸é ¸ó½ºÅÍ À妽º ¾ÆÀÌÅÛÀÌ¸é ¾ÆÀÌÅÛ À妽º (EnumCountingType) int nIndex; unsigned short nCnt; unsigned short nTargetCnt; }; const int ExtraSize = sizeof(TCount) * QUEST_EXTRACOUNT_MAX; struct TQuest { int nQuestID; // Äù½ºÆ® À妽º char cQuestState; // Äù½ºÆ® »óÅ (EnumQuestState) short nQuestStep; // ÇöÀç Äù½ºÆ® ½ºÅÜ char cQuestJournal; // ÇöÀç Äù½ºÆ® Àú³Î __time64_t tRegistDate; // µî·Ï½Ã°£ char Extra[ExtraSize]; // TCount cnt[QUEST_EXTRACOUNT_MAX] // ¿©ºÐ 210 bytes TP_QUESTMEMO nMemo[QUESTMEMOMAX]; // ¸Þ¸ð (À妽º 1~10, ±âȹÆÀ ¿äû»çÇ×) }; 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; // ½ºÅ³¾ÆÀ̵ð BYTE cSkillLevel; // ½ºÅ³·¹º§ int nCoolTime; // ÄðŸÀÓ bool bLock; // ±âº»ÀÌ true.. ÃßÈÄ¿¡ ÇÊ¿ä¾ø¾îÁú µí. }; struct TSkillGroup { bool bResetSkill; // ½ºÅ³ÃʱâÈ­ Çß´ÂÁö (±âº»Àº false ÇѹøÇϸé true) USHORT wSkillPoint; // ½ºÅ³Æ÷ÀÎÆ® TSkill SkillList[SKILLMAX]; // ½ºÅ³ }; #if defined( PRE_ADD_NAMEDITEM_SYSTEM ) struct TEffectSkillData { INT64 nItemSerial; int nItemID; int nSkillID; int nSkillLevel; __time64_t tExpireDate; int nRemainTime; bool bEternity; // false:±â°£Á¦, true:¿µ±¸ bool bApplySkill; }; #endif struct TGesture { int nGestureID; //Á¦½ºÃ³¾ÆÀ̵ð }; 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)