#ifndef __STRUCT_IN_QUERY_H__ #define __STRUCT_IN_QUERY_H__ #pragma once #include #include #include #include #include "QueryStringBuffer.h" //================================================================================================== // (NOTE) ... template struct DBResultConvert { //TODO : °¡º¯ÀÎÀÚ °¡´ÉÇϵµ·Ï ÇØ¾ßÇÔ static const int ErrorCode[]; int GetGuildResult(int result_by_db) { return QueryT::ErrorCode[result_by_db]; } }; class QueryForUser : public QueryResult { public: void SetUserKey(DWORD user_guid) { user_guid_ = user_guid; } DWORD GetUserKey() const { return user_guid_; } void SetProtocol(BYTE c, BYTE p) { SetIndex(MAKEDWORD(WORD(c), WORD(p))); } private: DWORD user_guid_; }; class QueryForCharTransaction : public QueryForUser { public: void set_char_guid(DWORD char_guid) { char_guid_ = char_guid; }; DWORD char_guid() const { return char_guid_; } virtual const nsQuery::ProxyTransaction::eTransaction transaction_type() const = 0; private: DWORD char_guid_; // }; //================================================================================================== // r101007.3L struct sQUERY_CHARACTER { USERGUID m_UserGuid; short m_bySlot; // uint8_t short m_byClass; // uint8_t CHARGUID m_CharGuid; // short m_byHeight; // uint8_t short m_byFace; // uint8_t short m_byHair; // uint8_t // short m_LV; // LEVELTYPE(WORD) // short m_sStrength; short m_sDexterity; short m_sVitality; short m_sInteligence; short m_sSpirit; // short m_sSkillStat1; short m_sSkillStat2; int m_UserPoint; // UPTYPE(int) // int64 m_i64Exp; // EXPTYPE(__int64) // int m_iMaxHP; int m_iHP; int m_iMaxMP; int m_iMP; // int64 m_Money; // MONEY(ULONGLONG) // int m_iRemainStat; int m_iRemainSkill; // NOTE: DB¿¡¼­´Â int·Î °¡Áø´Ù : ½ºÅ¸ÀÏ Äڵ尡 6¸¸¹øºÎÅÍ ½ÃÀÛÇϱ⠶§¹®¿¡ »ç¿ëÇÒ¶§´Â WORD·Î ij½ºÆÃÇØ¼­ »ç¿ëÇÑ´Ù. int m_iSelectStyleCode; // short m_byPKState; // uint8_t:3bit short m_byCharState; // uint8_t:7bit int64 m_StateTime; // int m_iRegion; short m_sX; short m_sY; short m_sZ; int m_iPreRegion; // int64 m_TitleTime; // short m_byInvisibleOpt; // uint8_t // uint8_t m_bInventoryLock; // short m_iCHuntingDisCount; short m_iCHuntingVCount; short m_iCHuntingLCount; short m_iCHuntingTotCount; // short m_byChaoState; // uint8_t 'ChaoGrade' int64 m_i64ChaoTime; // int m_iPlayLimitedTime; //---------------------------------------------------------------------------------------------- // NOTE: reference table = { T_PVP } int m_iPVPPoint; int m_iPVPScore; short m_byPVPGrade; // uint8_t int m_iPVPDraw; int m_iPVPSeries; int m_iPVPKill; int m_iPVPDie; int m_iPVPMaxKill; int m_iPVPMaxDie; //---------------------------------------------------------------------------------------------- // NOTE: reference table = { T_GuildInfo, T_GuildMember } GUILDGUID m_GuildGuid; short m_eGuildDuty; // uint8_t eGUILD_DUTY //---------------------------------------------------------------------------------------------- // NOTE: reference table = { T_CharUseTime } int m_EventUseTime; // accumulated value of playing time in pc room // NOTE: reference table = { T_CharUseTime_General } int m_EventUseTimeNormal; //__NA000000_090506_EVENT_TYPE_MODIFICATION__ // short m_byDelChk; // uint8_t // short m_byExtraInventoryTabCount; // uint8_t // short m_ExtraEquipCashSlotCount; // uint8_t // uint8_t m_bTradeFlag; uint8_t m_bWhisperFlag; short m_byFreeInitCount; // uint8_t short m_ChangeOfClassStep; // uint8_t m_bSummonedPet; uint8_t m_bMAXIntimacy; short m_PetItemPos; // POSTYPE int m_bMAXOptionRemainTime; // ? // uint8_t m_bActiveEther; //__NA_1165_ETHER_DEVICE_SAVE_DB short m_byEtherBulletPos; // POSTYPE //{__NA_001290_20090525_SHIELD_SYSTEM int m_iMaxSD; int m_iSD; //} #ifdef _NA_1419_20100121_ACCUMULATE_POINT short m_wAccumulateYear; // WORD: Ç÷¹ÀÌ ½Ã°£ Àû¸³ ³âµµ. int m_dwAccumulateTime; // DWORD: Àû¸³ ½Ã°£ (°ª:0000000ÃÊ) short m_wAccumulatePoint; // WORD: Àû¸³ Æ÷ÀÎÆ® #endif // #ifdef _NA_002050_20110216_ADD_GENDER uint8_t gender; // ¼ºº° #endif #ifdef _NA_003027_20111013_HONOR_SYSTEM short honor_title; #endif //_NA_003027_20111013_HONOR_SYSTEM //_NA_004035_20120227_COSTUME_ITEM uint8_t is_equipped_costume; // ÄÚ½ºÆ¬ Ȱ¼ºÈ­ ¿©ºÎ short costume_item_pos; // ÄÚ½ºÆ¬ Àκ¥Å丮 À§Ä¡ int costume_item_code; // ÄÚ½ºÆ¬ ¾ÆÀÌÅÛ ¹øÈ£ #ifdef _NA_008610_20160104_ADD_DECORATECOSTUME uint8_t is_equipped_deco_costume; // µ¥ÄÚ ÄÚ½ºÆ¬ Ȱ¼ºÈ­ ¿©ºÎ short deco_costume_item_pos; // µ¥ÄÚ ÄÚ½ºÆ¬ Àκ¥Å丮 À§Ä¡ int deco_costume_item_code; // µ¥ÄÚ ÄÚ½ºÆ¬ ¾ÆÀÌÅÛ ¹øÈ£ #endif //_NA_008610_20160104_ADD_DECORATECOSTUME //{_NA000023_090323_ENHANCED_INVENTORY_SLOT_FUNCTIONALITY_DB_ uint8_t config_version; // tiny int short config01; // smallint short config02; // smallint short config03; // smallint short config04; // smallint short config05; // smallint short config06; // smallint short config07; // smallint short config08; // smallint short config09; // smallint short config10; // smallint //} #pragma pack(push, 1) #pragma warning(push) #pragma warning(disable: 4201) union { struct { char param_info_char_name_[MAX_CHARNAME_LENGTH]; char param_info_char_name_null_terminate_[1]; char param_info_title_id_[MAX_TITLEID_LENGTH]; char param_info_title_id_null_terminate_[1]; char param_info_guild_name_[MAX_GUILDNAME_LENGTH]; char param_info_guild_name_null_terminate_[1]; char param_info_guild_nick_name_[14]; char param_info_guild_nick_name_null_terminate_[1]; char param_info_create_time_[MAX_TIMEDATA_SIZE]; char param_info_create_time_null_terminate_[1]; char param_info_del_date_[MAX_TIMEDATA_SIZE]; char param_info_del_date_null_terminate_[1]; char param_info_password_[MAX_WAREHOUSE_INVENTORY_PWD_LENGTH]; char param_info_password_null_terminate_[1]; }; struct { char result_info_char_name_[MAX_CHARNAME_LENGTH + 1]; char result_info_title_id_[MAX_TITLEID_LENGTH + 1]; char result_info_guild_name_[MAX_GUILDNAME_LENGTH + 1]; char result_info_guild_nick_name_[14 + 1]; char result_info_create_time_[MAX_TIMEDATA_SIZE + 1]; char result_info_del_date_[MAX_TIMEDATA_SIZE + 1]; char result_info_password_[MAX_WAREHOUSE_INVENTORY_PWD_LENGTH + 1]; }; }; #pragma warning(pop) #pragma pack(pop) //---------------------------------------------------------------------------------------------- // CHANGES: f101007.4L, add forced boundary checker void SetSafeBound() { assert(param_info_char_name_ == result_info_char_name_ && param_info_title_id_ == result_info_title_id_ && param_info_guild_name_ == result_info_guild_name_ && param_info_guild_nick_name_ == result_info_guild_nick_name_ && param_info_create_time_ == result_info_create_time_ && param_info_del_date_ == result_info_del_date_ && param_info_password_ == result_info_password_); param_info_char_name_null_terminate_[0] = 0; param_info_title_id_null_terminate_[0] = 0; param_info_guild_name_null_terminate_[0] = 0; param_info_guild_nick_name_null_terminate_[0] = 0; param_info_create_time_null_terminate_[0] = 0; param_info_del_date_null_terminate_[0] = 0; param_info_password_null_terminate_[0] = 0; } /* // CHANGES: remove boundary modifier inline void SetSafeBound() { m_tszCharName[_countof(m_tszCharName) - 1] = _T('\0'); m_tszTitleID[_countof(m_tszTitleID) - 1] = _T('\0'); m_tszGuildName[_countof(m_tszGuildName) - 1] = _T('\0'); m_tszGuildNickName[_countof(m_tszGuildNickName) - 1] = _T('\0'); m_tszCreateTime[_countof(m_tszCreateTime) - 1] = _T('\0'); m_tszDelDate[_countof(m_tszDelDate) - 1] = _T('\0'); } */ // (WAVERIX) (090513) (CHANGES) ¹öÆÛ ÃʱâÈ­ °ü·Ã // (CHANGES) (f100414.1L) removed because of use the pool is supported cleared stream node //inline void Clear() //{ // no virtual, // ZeroMemory(this, sizeof(*this)); //} }; //================================================================================================== // (CHANGES) (NOTE) changes by __NA001374_090708_CACHE_ITEM_BUFF_EXTENTION__ // |target=m_AbilityIndex|reference=SkillOption in the GameServer/Skill_Info.h| struct sQUERY_CHARSTATE { CHARGUID m_CharGuid; SHORT m_StateCode; // »óÅÂÄÚµå WORD m_SkillCode; // ½ºÅ³ÄÚµå BYTE m_AbilityIndex; // ¾îºô¸®Æ¼ À妽º int m_RemainTime; // ³²Àº½Ã°£ SHORT m_Interval; // ÁÖ±â }; //================================================================================================== //= namespace nsQuery ============================================================================== //================================================================================================== namespace nsQuery { ; #pragma warning(push) #pragma warning(disable:4201) //================================================================================================== struct PerkResultRecord { int group_code_; short level_; short link_code_; int64 exp_; }; struct ItemSlotResultRecord { // reference = SI_INVENTORY, SI_EQUIPMENT, reserve = { SI_WAREHOUSE, SI_GUILDWAREHOUSE } // read sequence = { slot_type_, pos_, serial_, code_, dura_or_num_, version_, option_stream_ } // uint8_t slot_type_; uint8_t version_; short pos_; // POSTYPE short dura_or_num_; // DURATYPE int code_; __int64 serial_; uint8_t option_stream_[sizeof(OPTIONPART)]; }; struct SlotResultRecord { static const int kMaxNumberOfSlots = 8; // short slot_index_; // reference : SI_SKILL, SI_QUICK, and that. short tab_order_; union { int slot_array_[kMaxNumberOfSlots]; struct { int slot01_; int slot02_; int slot03_; int slot04_; int slot05_; int slot06_; int slot07_; int slot08_; }; }; }; struct QuestResultRecord { int quest_version_; BYTE quest_stream_progress_[MAX_PROGR_QUESTSTREAM_SIZE]; BYTE quest_stream_complete_[MAX_COMPL_QUESTSTREAM_SIZE]; }; struct BattleRecordsResultRecord { // PVP int pvp_point_; int pvp_score_; short pvp_grade_; // uint8_t int pvp_max_series_; int pvp_max_kills_; int pvp_max_die_; int pvp_number_of_kills_; int pvp_number_of_dead_; int pvp_number_of_draws_; // °æÀïÇåÆÃ ÀüÀû int hunting_number_of_fails_; //< °æÀïÇåÆÃ Dis Ƚ¼ö int hunting_number_of_victories_; //< °æÀïÇåÆÃ ½Â¸®È½¼ö int hunting_number_of_defeats_; //< °æÀïÇåÆÃ ÆÐ¹èȽ¼ö int hunting_number_of_joins_; //< °æÀïÇåÆÃ Âü¿©È½¼ö }; // reference: STATE_DETAIL_INFO struct CharStateResultRecord { short state_code_; int skill_code_; // bit spec. idx|option // 000|00000 short ability_index_with_option_; // uint8_t int remained_time_; // seconds, infinite time = '-1' short interval_; }; struct GuildWarehouseResultRecord { int64_t money_; //uint8_t number_of_slot_tabs_; }; // //C_NA_0_20100520_ACSYSTEM_CHANGED struct CharAchievementResultRecord : public Character_Achievement { }; // CHANGES: f101112.5L, change query data types, // you should be use long or short type if a sql data type is smallint on push c-types struct CharAchievementInputParam //: public CharAchievement_Info { short index_number_; uint8_t is_reward_; short object_value_[MAX_ACHIEVEMENT_OBJECT]; }; struct MissionResultRecord { short code; // mission code ranges = (0, 255] short state; short point; short hidden; // not used, reserved field }; #pragma warning(pop) }; //end of namespace //================================================================================================== //= end of namespace nsQuery ======================================================================= //================================================================================================== #endif // __STRUCT_IN_QUERY_H__