#pragma once #include "DNPacket.h" #include "MemPool.h" /*-------------------------------------------------------------------------- ServerÂÊ¿¡¼­ ¾²´Â ¸ðµç°Íµé(?) --------------------------------------------------------------------------*/ // const ---------------------------------------------------------------------------------------------- #if defined(_CH) const WCHAR* const SQLPASSWORD = L"4795CEA6409d492"; const WCHAR* const SQLHOSTNAME = L"A2A375E23370f8a"; const WCHAR* const SQLAPPNAME = L"C98D23990E1119a"; #elif defined(_JP) const WCHAR* const SQLPASSWORD = L"945C437D6632718"; //const WCHAR* const SQLPASSWORD = L"A443131C-2988-4C3E-9974-37033B2A0A33"; const WCHAR* const SQLHOSTNAME = L"E4C874F3D920ced"; const WCHAR* const SQLAPPNAME = L"2001C72210299d0"; #elif defined(_TW) const WCHAR* const SQLPASSWORD = L"3A6A7D31A8c6415"; const WCHAR* const SQLHOSTNAME = L"3B74FB5B269bf5d"; const WCHAR* const SQLAPPNAME = L"4A54A42ED0381e3"; #elif defined(_US) const WCHAR* const SQLPASSWORD = L"BACF8969BB00b2d"; const WCHAR* const SQLHOSTNAME = L"04B3944622a7c5b"; const WCHAR* const SQLAPPNAME = L"33518A83865e269"; #elif defined(_SG) const WCHAR* const SQLPASSWORD = L"4708A804794d233"; const WCHAR* const SQLHOSTNAME = L"D3B8367356e19d7"; const WCHAR* const SQLAPPNAME = L"3A222498E96c63f"; #elif defined(_TH) const WCHAR* const SQLPASSWORD = L"gozjtoRldi!*"; const WCHAR* const SQLHOSTNAME = L"rjfflausenlwlsek@#@"; const WCHAR* const SQLAPPNAME = L"roshatlRl!#"; #elif defined(_ID) const WCHAR* const SQLPASSWORD = L"skQmsgozj!*sha"; const WCHAR* const SQLHOSTNAME = L"rhdqntlzlsi)*^"; const WCHAR* const SQLAPPNAME = L"rotoRjwuqjfu!#"; #elif defined(_RU) const WCHAR* const SQLPASSWORD = L"3A6A7D31A8c6415"; const WCHAR* const SQLHOSTNAME = L"3B74FB5B269bf5d"; const WCHAR* const SQLAPPNAME = L"4A54A42ED0381e3"; #elif defined(_KAMO) //[OK_Cash] const WCHAR* const SQLPASSWORD = L"3A6A7D31A8c6415"; const WCHAR* const SQLHOSTNAME = L"3B74FB5B269bf5d"; const WCHAR* const SQLAPPNAME = L"4A54A42ED0381e3"; #elif defined(_EU) const WCHAR* const SQLPASSWORD = L"110C37F5B9fb934"; const WCHAR* const SQLHOSTNAME = L"D8FA71CD6Ee2479"; const WCHAR* const SQLAPPNAME = L"518BD8D722e2f6b"; #else const WCHAR* const SQLPASSWORD = L"428A44DC4Eebd12"; const WCHAR* const SQLHOSTNAME = L"CF0EEDCEF386298"; const WCHAR* const SQLAPPNAME = L"D121240B6419392"; #endif // #if defined( _US ) const WCHAR* const SQLActozMembershipDBPassword = L"dnaccount$dnest7h.o.t.44_2"; const WCHAR* const SQLActozWorldDBPassword = L"dndb$dnest50h.o.t.44_2"; const WCHAR* const SQLActozCommonDBPassword_Test = L"devdb$game9mingi44_2"; const WCHAR* const SQLActozCommonDBPassword = L"dncomdb$game60mingi44_2"; #if defined( PRE_ADD_DWC ) const WCHAR* const DWCPREFIX = L"DWCGM_"; const int DWCPREFIXLEN = 6; #endif // #if defined( PRE_ADD_DWC ) const char DBSERVERMAX = 16; const char THREADMAX = 8; // DB THREAD const char LOGINTIMELENMAX = 20; // last login time length max const char TIMELENMAX = 20; // µ¥ÀÌÆ®Å¸ÀÓ Å¸ÀÔ const int LOGINCOUNTMAX = 64; // ÃÑ ·Î±×ÀÎ ¼­¹ö °³¼ö const int LOGINCONCOUNTINFOTERM = (1*30*1000); // ·Î±×ÀÎ ¼­¹ö ÇöÀç µ¿½ÃÁ¢¼ÓÀÚ Á¤º¸ ¸¶½ºÅÍ ¼­¹ö¿¡ º¸°í Á¦ÇѰ£°Ý (´ÜÀ§:ms) const int LOGINSERVERLISTSORTTERM = (1*3*1000); // ·Î±×ÀÎ ¼­¹ö ¼¼¼Ç Á¤·Ä Á¦ÇѰ£°Ý (´ÜÀ§:ms) const int MASTERCOUNTMAX = 10; // ÃÑ ¸¶½ºÅÍ ¼­¹ö °³¼ö const int DELETECHAR_WAITTIME_MINUTE = 7*24*60; // 7ÀÏ const BYTE PROCESSCOUNT = 40; // ÃÊ´ç ¿ÀºêÁ§Æ® 󸮰³¼ö const int INTERNALBUFFERLENMAX = 51200; const UINT PROCESSBUFFERLENMAX = 1024 * 64; const UINT WORKERBUFFERLENMAX = 1024 * 64; const int QUESTSIZEINFO = 2775; const int QUERYOVERTIME = 1000; const int QUERYNAMESIZE = 200; // Äõ¸® ÃÖ´ë Å©±â const int GAMEDELAYSIZE = 200; // °ÔÀÓµô·¹ÀÌ ·Î±× ÃÖ´ë Å©±â const int SERVERDETACHPACKETSIZE = 1024*40; // ÆÐŶÀü¼Û½Ã ¹öÆÛ»çÀÌÁîÅ©±â //const variable. #ifdef _FINAL_BUILD const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_PARTY = 120 * 1000; //ÃÖÃÊ °ÔÀÓ¼­¹ö ÄÁ³ØÆ® ´ë±â ½Ã°£ const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_SINGLE = 120 * 1000; const unsigned long WAIT_FOR_ANOTHER_USER_TIME_LIMIT = 15 * 1000; //ÃÖÃÊÀοøÀÌ ÄÁ³ØÀ» ÇÏ°í ´Ù¸¥ÀοøÀ» ±â´Ù¸®´Â ½Ã°£ const unsigned long WAIT_FOR_LOAD_TIME_LIMIT = 60 * 1000; //µ¥ÀÌŸº£À̽ºÀÇ ·ÎµùÀ» ±â´Ù¸®´Â ½Ã°£ const unsigned long GOGO_SING_TO_PLAY_FOR_WAIT_TIME_LIMIT = 2 * 60 * 1000; //Ŭ¶óÀÌ¾ðÆ® ·Îµù°ú ½ÌÅ©¸¦ ±â´Ù¸®´Â ½Ã°£ const unsigned long GOGO_SING_TO_FARMPLAY_FOR_WAIT_TIME_LIMIT = 5 * 60 * 1000; //³óÀå·Îµù ½Ã°£Àº ÃÊÅ­ º°°³·Î #else const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_PARTY = 60 * 1000; //ÃÖÃÊ °ÔÀÓ¼­¹ö ÄÁ³ØÆ® ´ë±â ½Ã°£ const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_SINGLE = 120 * 1000; const unsigned long WAIT_FOR_ANOTHER_USER_TIME_LIMIT = 60 * 1000; // const unsigned long WAIT_FOR_LOAD_TIME_LIMIT = 150 * 1000; // const unsigned long GOGO_SING_TO_PLAY_FOR_WAIT_TIME_LIMIT = 5 * 60 * 1000; // const unsigned long GOGO_SING_TO_FARMPLAY_FOR_WAIT_TIME_LIMIT = 5 * 60 * 1000; //³óÀå·Îµù ½Ã°£Àº ÃÊÅ­ º°°³·Î #endif const int EACH_GAMESERVER_MAX_ROOM_COUNT = 20; const int EACH_GAMESERVER_MAX_USER_COUNT = 100; const int INTERVALDELETE_TIMINGTICK = 1000 * 60; //1ºÐÂë??...-_-; const int CHECK_ZOMBIE_DISCONNECT_TICK = 1000 * 60 * 5; const int DISTRIBUTE_IDLE_TICK = 1000 * 5; const int DELAYED_PRCESS_CHECKTICK = 1000 * 10; const int DELAYED_PRCESS_LOG_COUNT = 10; const int FRAMEDEADLINE = 17; const int EVENTMAPSTRMAX = 50; const int CHECKLIVETICK = 60000 * 2;// * 5; // ÇÙ½¯µå 5ºÐ ¸¶´Ù üũ -> 1ºÐÀ¸·Î ¹Ù²Ù¶ó°í ÇØ¼­ ¹Ù²Þ -> 2ºÐÀ¸·Î ´Ã¸² const int CHECKRESPONSETICK = 60000 * 3; // ÇÙ½¯µå ÀÀ´ä ½Ã°£ (3ºÐÁ¤µµ?) const int CHECKGPKFIRSTTICK = 1000 * 60 * 2; // ÃÖÃÊ °Ë»çŸÀÌ¹Ö const int CHECKGPKTICK = 60000; const int MANAGEDMAX = 20; #if !defined(_FINAL_BUILD) const DWORD CHECK_TCP_PING_TICK = 1000*30*1; // 1ºÐ const DWORD CHECK_UDP_PING_TICK = 1000*30*1; // 1ºÐ #else //#if !defined(_FINAL_BUILD) const DWORD CHECK_TCP_PING_TICK = 1000*60*1; // 1ºÐ const DWORD CHECK_UDP_PING_TICK = 1000*60*1; // 1ºÐ #endif //#if !defined(_FINAL_BUILD) #if defined(_CH) const int CHECKLOGINUSERKICKTICK = 30 * 60 * 1000; // ·Î±×ÀÎ ¼­¹ö¿¡ 30ºÐ µ¿¾È ¸Ó¹°¸é °­Åð!(Áß±¹¸¸) #else const int CHECKLOGINUSERKICKTICK = 15 * 60 * 1000; // ·Î±×ÀÎ ¼­¹ö¿¡ 15ºÐ µ¿¾È ¸Ó¹°¸é °­Åð! #endif //#if defined(_CH) const int CHECKNOTAUTHLOGINUSERKICKTICK = 5 * 60 * 1000; // ·Î±×ÀÎ ¼­¹ö¿¡ ÀÎÁõµÇÁö ¾ÊÀºÃ¼ 5ºÐ µ¿¾È ¸Ó¹°¸é °­Åð! const unsigned int DEFAULTUSERSESSIONID = 10000; const unsigned int CASHDELUSERDELAY_LIMITTICK = (4*30*1000); // DB ´©ÀûÀÛ¾÷ °ü·Ã °³¼ö const int DBQUERYSTREAMDATAMAX = (36*1024); // DB ´©ÀûÀÛ¾÷ µ¥ÀÌÅÍ ÃÖ´ë Å©±â : DB ¼­¹ö¿¡ ¹Ù·Î ¼Û½ÅµÇ´Â ´ë½Å Å¥¿¡ ´©Àû ÈÄ Àϰý󸮰¡ ÇÊ¿äÇÑ µ¥ÀÌÅÍ ±¸Á¶Ã¼ Áß °¡Àå Å« °ÍÀ» ±âÁØÀ¸·Î ¼³Á¤ ¡æ Å©±â°¡ ºÎÁ·ÇÒ °æ¿ì Áö¼ÓÀûÀÎ ÀçÁ¶Á¤ ÇÊ¿ä ¿¹»ó const unsigned int DBQUERYAUTOCHKSUM = 0xE41C723F; // DB Äõ¸® Á÷·ÄÈ­ ó¸® ½Ã üũ°ª const int QUESTINVENBLANKCHECKMIN = 2; // Äù½ºÆ® Àκ¥Å丮 üũ ½Ã ¸Þ½ÃÁö ¹ß¼ÛÀÌ µÇ´Â ÃÖ¼Ò °³¼ö const float MAX_ITEMPRICE_RATE = 0.5f; #if defined(_FINAL_BUILD) const int BEGINAUTHLIMITSEC = (9*10); // ÃÖÃÊ ÀÎÁõ Á¦Çѽð£ (´ÜÀ§:ÃÊ, 0 ÀÌÇÏ´Â ¹«Á¦ÇÑ ´ë±â ?) const int CHECKAUTHLIMITSEC = (6*10); // ÀÏ¹Ý ÀÎÁõ Á¦Çѽð£ (´ÜÀ§:ÃÊ) const int BEGINAUTHLIMITTERM = (BEGINAUTHLIMITSEC*1000); // ÃÖÃÊ ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) //const int CHECKAUTHLIMITTERM = (CHECKAUTHLIMITSEC*1000); // ÀÏ¹Ý ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) const int CHECKAUTHLIMITTERM = (1*30*1000); // ÀÏ¹Ý ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) // P.S.> ´øÀü, PVP µî ÄÁÅÙÃ÷ Âü¿©ÀÚµéÀÇ ºÒÆí»çÇ×À» °í·ÁÇÏ¿© ±âÁ¸ ½Ã°£º¸´Ù ª°Ô Á¤ÇÔ #else // _FINAL_BUILD const int BEGINAUTHLIMITSEC = (6*10); // ÃÖÃÊ ÀÎÁõ Á¦Çѽð£ (´ÜÀ§:ÃÊ, 0 ÀÌÇÏ´Â ¹«Á¦ÇÑ ´ë±â ?) const int CHECKAUTHLIMITSEC = (4*10); // ÀÏ¹Ý ÀÎÁõ Á¦Çѽð£ (´ÜÀ§:ÃÊ) const int BEGINAUTHLIMITTERM = (BEGINAUTHLIMITSEC*1000); // ÃÖÃÊ ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) //const int CHECKAUTHLIMITTERM = (CHECKAUTHLIMITSEC*1000); // ÀÏ¹Ý ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) const int CHECKAUTHLIMITTERM = (1*20*1000); // ÀÏ¹Ý ÀÎÁõ Á¦ÇѰ£°Ý (´ÜÀ§:ms) // P.S.> ´øÀü, PVP µî ÄÁÅÙÃ÷ Âü¿©ÀÚµéÀÇ ºÒÆí»çÇ×À» °í·ÁÇÏ¿© ±âÁ¸ ½Ã°£º¸´Ù ª°Ô Á¤ÇÔ #endif // _FINAL_BUILD const int RESETAUTHLISTMAX = (1000); // ÀÎÁõÁ¤º¸ ¸ñ·Ï ÃʱâÈ­ Å©±â (ÁÖÀÇ!!! - º» Àü¿ª»ó¼ö¸¦ »ç¿ëÇÏ´Â ÆÐŶµéÀÌ ¼Û½Å/¼ö½Å ÆÐŶ Å©±â¸¦ ³ÑÁö ¾Ê¾Æ¾ß ÇÔ) const int RESETAUTHLISTTERM = (1*1000); // ÀÎÁõÁ¤º¸ ¸ñ·Ï ÃʱâÈ­ ÀÛ¾÷ÁÖ±â (´ÜÀ§:ms) const int RESETAUTHSERVERTERM = (5*1000); // ÀÎÁõÁ¤º¸ ¼­¹ö ÃʱâÈ­ ÀÛ¾÷ÁÖ±â (´ÜÀ§:ms) const int RESETAUTHWORLDCHECKTERM = (5*1000); // ÀÎÁõÁ¤º¸ ¿ùµå ÃʱâÈ­ ÀÛ¾÷ÁÖ±â (´ÜÀ§:ms) const int RESETAUTHWORLDLIMITTERM = (2*30*1000); // ÀÎÁõÁ¤º¸ ¿ùµå ÃʱâÈ­ Á¦Çѽð£ (´ÜÀ§:ms) const int GETAUTHUSERCOUNT = 1000 * 10; // ÀÎÁõ¿ùµåÀ¯Àú Ä«¿îÆ® ȹµæÁÖ±â const int GUILDMGRCHKTERM = (5*1000); // ±æµå °ü¸®ÀÚ Ã¼Å© ÁÖ±â const int GUILDMGRUPDTERM = (10*1000); // ±æµå °ü¸®ÀÚ °»½Å ÁÖ±â const int GUILDCHKMEMBTERM = (30*1000); // ±æµå ¸â¹öÁ¤º¸ üũ ÁÖ±â const int GUILDCHKRESCTERM = (30*1000); // ±æµå ÀÚ¿ø¹Ý³³ üũ ÁÖ±â const int GUILDREQINFOTERM = (60*1000); // ±æµå Á¤º¸¿äû üũ ÁÖ±â const int GUILDRFSVIEWTERM = (10*1000); // ±æµå ½Ã°¢Á¤º¸ °»½Å ÁÖ±â const int GUILDAPLPOINTTERM = (10*1000); // ±æµå ÀϹÝ/·¡´õ Æ÷ÀÎÆ® DB Àû¿ë ÁÖ±â const int GUILDCHKRESCLIMIT = (2*30*1000); // ±æµå ÀÚ¿ø¹Ý³³ üũ Á¦ÇÑ const int PERIODQUESTTERM = (60*1000); // ±â°£Á¦ Äù½ºÆ® °»½Å ÁÖ±â const int PERIODGUILDWARTERM = (60*1000); // ±æµåÀü °»½Å ÁÖ±â const int GUILDWARMISSION_MAXGROUP = 4; const int SERVICEMANAGER_SERVERDEALY_SIZE = 1000; const int SERVICEMANAGER_REPORT_SIZE = 4096; #define SWAP16(x) (((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))) #define SWAP32(x) (((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))) #define SWAP64(x) (((((x) & 0xFF00000000000000ULL) >> 56) | (((x) & 0x00FF000000000000ULL) >> 40) | (((x) & 0x0000FF0000000000ULL) >> 24) | (((x) & 0x000000FF00000000ULL) >> 8) | \ (((x) & 0x00000000FF000000ULL) << 8) | (((x) & 0x0000000000FF0000ULL) << 24) | (((x) & 0x000000000000FF00ULL) << 40) | (((x) & 0x00000000000000FFULL) << 56))) struct DNProcessCheck { enum eDNProcessCheck { Key = 0x00000001, DisconnectInterval = 60*1000*2, UpdateInterval = 10*1000, HeartbeatKey = 0x00000002, SQLHeartbeatInterval = 60*1000*10, SelectIPMagicInterval = 60*1000*60, }; }; // enum ---------------------------------------------------------------------------------------------- enum eServerType { SERVERTYPE_LOGIN, // ·Î±×ÀÎ ¼­¹ö SERVERTYPE_DB, // DB ¼­¹ö SERVERTYPE_VILLAGE, // ºô¸®Áö ¼­¹ö SERVERTYPE_GAME, // °ÔÀÓ ¼­¹ö SERVERTYPE_MASTER, // ¸¶½ºÅÍ ¼­¹ö SERVERTYPE_LOG, // ·Î±× ¼­¹ö SERVERTYPE_MAX, }; enum ePatchType { PATCHTYPE_LOGIN, // ·Î±×ÀÎ ¼­¹ö PATCHTYPE_DB, // DB ¼­¹ö PATCHTYPE_VILLAGE, // ºô¸®Áö ¼­¹ö PATCHTYPE_GAME, // °ÔÀÓ ¼­¹ö PATCHTYPE_MASTER, // ¸¶½ºÅÍ ¼­¹ö PATCHTYPE_LOG, // ·Î±× ¼­¹ö PATCHTYPE_PATCHER, // ESM PATCHTYPE_CASH, // ij½¬ ¼­¹ö }; enum eConnectionKey { CONNECTIONKEY_DEFAULT = 0, CONNECTIONKEY_USER, CONNECTIONKEY_LOGIN, CONNECTIONKEY_DB, CONNECTIONKEY_VILLAGE, CONNECTIONKEY_GAME, CONNECTIONKEY_MASTER, CONNECTIONKEY_LOG, CONNECTIONKEY_LAUNCHER, CONNECTIONKEY_SERVICEMANAGER, CONNECTIONKEY_AUTH, // ÀÎÁõ¼·(³Ø½¼) CONNECTIONKEY_CASH, CONNECTIONKEY_BILLING, // ºô¸µ¼·(ÆÛºí¸®¼Å) CONNECTIONKEY_SERVICEPATCHER, CONNECTIONKEY_SERVERMONITOR, CONNECTIONKEY_TW_AUTHLOGIN, // ÀÎÁõ¼·(°¨¸¶´Ï¾Æ 1 - Authorization : »ç¿ëÀÚ °èÁ¤ ÀÎÁõ ó¸®, »óÅ (ºí·Ï ¿©ºÎ, ij½¬ ÀÜ¿© Æ÷ÀÎÆ® ?) üũ) CONNECTIONKEY_TW_AUTHLOGOUT, // ÀÎÁõ¼·(°¨¸¶´Ï¾Æ 2 - Logout : »ç¿ëÀÚ ·Î±×¾Æ¿ô ó¸®) CONNECTIONKEY_TW_QUERY, CONNECTIONKEY_TW_SHOPITEM, CONNECTIONKEY_TW_COUPON, // °¨¸¶´Ï¾Æ ÄíÆù¼­¹ö CONNECTIONKEY_TW_COUPON_ROLLBACK, // °¨¸¶´Ï¾Æ ÄíÆù·Ñ¹é..¡±×·¯¿î°Íµé ¼­¹ö¸¦ Æ÷Æ®º°·Î ¸¸µé´Ù´Ï..¤Ð CONNECTIONKEY_TH_AUTH, CONNECTIONKEY_TH_OTP, CONNECTIONKEY_TH_QUERY, CONNECTIONKEY_TH_SHOPITEM, CONNECTIONKEY_DOORS, }; enum eAcceptOpenVerifyType { ACCEPTOPEN_VERIFY_TYPE_APPINITCOMPLETE = 0, ACCEPTOPEN_VERIFY_TYPE_MASTERCONNECTION, ACCEPTOPEN_VERIFY_TYPE_RESETAUTH, ACCEPTOPEN_VERIFY_TYPE_MAX, }; enum eServerLogLevel { ServerLogLevel_1 = 1, ServerLogLevel_2 = 2, ServerLogLevel_3 = 3, }; enum eUserState // login¿¡¼­ ¾²´Â »óŰª { STATE_NONE, // login STATE_CHECKVERSION, STATE_CHECKLOGIN, // ¾ÆÀ̵ð ÆÐ½º¿öµå È®ÀλóÅ STATE_SERVERLIST, STATE_WAITUSER, // ´ë±âÀ¯Àú STATE_CHARLIST, // ij¸¯ÅÍ ¸®½ºÆ® »óÅ STATE_CHANNELLIST, STATE_CONNECTVILLAGE, // ºô¸®Áö ¼­¹ö¿¡ Á¢¼Ó°¡´É»óÅ STATE_CONNECTGAME, // °× ¼­¹ö¿¡ Á¢¼Ó°¡´É»óÅ STATE_RECONNECTLOGIN, // ¸®Ä¿³ØÆ® »óÅ // master STATE_CHECKVILLAGE, //ºô¸®Áö·Î ³Ñ¾î°¡±âÀüÀÇ »óÅÂÀÔ´Ï´Ù. À¯Àú°¡ ²÷±æ°æ¿ì °í¾Æ°¡ µÇ¹Ç·Î ÀÌ ½ºÅ×ÀÌÆ®¸¦ ÅëÇØ¼­ °ü¸®µË´Ï´Ù. STATE_CHECKGAME, //°ÔÀÓÀ¸·Î ³Ñ¾î°¡±â ÀüÀÇ »óÅÂÀÔ´Ï´Ù. »óµ¿ STATE_CHECKRECONNECTLOGIN, //ij¸¯Åͼ±ÅÃâÀ¸·Î ³Ñ¾î°¡±â ÀüÀÇ »óÅÂÀÔ´Ï´Ù. »óµ¿ STATE_VILLAGE, // village»óÅÂÀΰ¡ STATE_GAME, // game»óÅÂÀΰ¡ STATE_LOGIN, // login»óÅÂÀΰ¡ // village STATE_LOADUSERDATA, // À¯Àúµ¥ÀÌÅÍ DB¿¡¼­ ºÒ·¯¿Ô´ÂÁö STATE_READY, // ÇÊµå ³ª°¥ Áغñ ¿Ï·á STATE_READYTOVILLAGE, // village µý Àåºñ·Î ¿Å±æ¶§ (Áغñ´Ü°è) STATE_READYTOGAME, // gameÀ¸·Î ³Ñ¾î°¥¶§ (Áغñ´Ü°è) STATE_READYTOLOGIN, // loginÀ¸·Î ³Ñ¾î°¥¶§ (Áغñ´Ü°è) STATE_MOVETOVILLAGE, // village µý Àåºñ·Î ¿Å±æ¶§ STATE_MOVETOGAME, // gameÀ¸·Î ³Ñ¾î°¥¶§ STATE_MOVETOLOGIN, // loginÀ¸·Î ³Ñ¾î°¥¶§ STATE_MOVESAMECHANNEL, // °°Àº ä³Î À̵¿ #if defined(_HSHIELD) HSHIELD_NONE = 0, HSHIELD_RESPONSEVERSION = 1, // checkversion ÆÐŶ ¹ÞÀº »óÅ HSHIELD_RECONNECTLOGIN, // ÀçÁ¢¼Ó ÆÐŶ ¹ÞÀº »óÅ HSHIELD_LOADUSER, // µðºñ ·Îµå ³¡³½»óÅ HSHIELD_REQUEST, // _AhnHS_MakeRequest ¿äû»óÅ HSHIELD_RESPONSE, // ÀÀ´ä¿Â »óÅ #endif // _HSHIELD }; //enumulation //GameRoom enum eGameRoomState { _GAME_STATE_NONE, //»ý¼º! _GAME_STATE_READY2CONNECT, //ÃʱâÈ­ ¿Ï·á ÄÁ³Ø¼Ç ´ë±â! »óÅ _GAME_STATE_CONNECT2CHECKAUTH, //DB ¸¦ ÀÌ¿ëÇÑ ÀÎÁõÁ¤º¸ üũ _GAME_STATE_CONNECT2LOAD, //¿¬°á ¹× °ËÁõ ¿Ï·á! ·Îµå»óÅ·ΠÀüÀÌ _GAME_STATE_LOAD2SYNC, //Ŭ¶óÀÌ¾ðÆ® ¿¬°á¿Ï·á Áغñ»óÅ _GAME_STATE_SYNC2SYNC, _GAME_STATE_SYNC2PLAY, //Ç÷¹ÀÌ´ë±âÁß _GAME_STATE_PLAY, //°ÔÀÓÁß! _GAME_STATE_CANCEL_LOADING, //¹é±×¶ó¿îµå ·Î´õ¿Í ½ÌÅ© _GAME_STATE_DESTROYED, //¹æ±úÁ³»ï! _GAME_STATE_FARM_NONE, //³óÀå¿ë ½ºÅ×ÀÌÆ®ÀÔ´Ï´Ù. »ý¼º ·çƾÀÌ ´Þ¶ó ÀϹݰú ´Ù¸£°Ô Èê·¯°©´Ï´Ù _GAME_STATE_PLAYºÎÅÍ´Â µ¿ÀÏ _GAME_STATE_FARM_READY2LOAD, //µðºñ¿¡ ³óÀå°ü·Ã µ¥ÀÌŸ¸¦ ¿äûÇÑ »óÅ _GAME_STATE_FARM_LOAD2PLAY, //µðºñ¿¡¼­ ³óÀå°ü·Ã µ¥ÀÌŸ¸¦ ¹Þ¾Ò´Ù. ¼¼ÆÃÇÏ°í ¸¶½ºÅÍ¿¡ ¾Ë¸®ÀÚ _GAME_STATE_FARM_PAUSE, //³óÀå Æ÷¿ìÁî~ _GAME_STATE_PVP_SYNC2GAMEMODE, //ÇǺ÷ÇÇÀϰæ¿ì À¯Àú°¡ ¾ø´Â »óÅ¿¡¼­ ½ÃÀÛ½ÃÁ¡ÀÌ »ý±è(±æµåÀü) Á¢¼Ó½ºÅ×ÀÌÆ®¸¦ °Ç³Ê¶Ù°í ¸ðµå¹Þ°í ·Îµå·Î ³Ñ¾î°¡´Â Áß°£½ºÅ×ÀÌÆ® }; //GameSession enum eGameSessionState { SESSION_STATE_NONE, SESSION_STATE_READY, //°´Ã¼»ý¼º¸¸ µÇ¾î ÀÖÀ½! ¿¬°áÀº ¾ÈµÇ¾î ÀÖÀ½ SESSION_STATE_RUDP_CONNECTED, SESSION_STATE_CONNECTED, //¿¬°á µÇ¾úÀ½! SESSION_STATE_LOAD, //¿¬°á µÇ¸é µðºñ¿¡ ¿äûÇÕ´Ï´Ù. SESSION_STATE_LOADED, //°ÔÀӷεù¿Ï·á! SESSION_STATE_WAIT_TO_READY, //Ready »óÅ ±â´Ù¸² SESSION_STATE_READY_TO_SYNC, //Sync Áغñ ¿Ï·á! SESSION_STATE_SYNC_READY_2_DELAY, //¼­¹ö°¡ ¸Þ¼¼Áöó¸®Áغñ°¡ ¾ÈµÇ»óÅ¿¡¼­ ¸Þ¼¼Áö¸¦ ¹Þ¾Ò½À´Ï´Ù. SESSION_STATE_READY_TO_PLAY, //Sync 2 Play SESSION_STATE_GAME_PLAY, //°ÔÀÓÇ÷¹ÀÌÁß! SESSION_STATE_READY_TO_VILLAGE, //game -> village (Áغñ´Ü°è) SESSION_STATE_READY_TO_LOGIN, //game -> login char select (Áغñ´Ü°è) SESSION_STATE_RECONNECTLOGIN, //game -> login char select SESSION_STATE_SERVER_CHANGE, //¼­¹öÀ̵¿Áß! À̵¿¿Ï·áµÇ¸é ²÷±è SESSION_STATE_DISCONNECTED, //©¸°»óÅÂ! (tcp±îÁö ÀüºÎ ²÷±ä »óÅÂ) //SESSION_STATE_CRASH, //Å©·¡½¬! }; // GameServer Parse Type enum eGameMsgType { MSG_TYPE_MASTER, MSG_TYPE_DATABASE, }; enum eFieldMessage { FM_CREATE, FM_DESTROY, FM_SHOW, FM_HIDE, FM_MOVE, FM_ACTORMSG, FM_CHAT, FM_CHANGEEQUIP, FM_ADDEXP, FM_LEVELUP, FM_CHANGEAPPELLATION, FM_CHANGEHIDE, FM_CHANGECASHEQUIP, FM_CHANGEGUILDSELFVIEW, FM_CHANGEJOB, FM_EFFECT, FM_CHANGECOLOR, FM_CHANGEGLYPH, FM_CHATROOMVIEW, FM_CHATROOMUSER, FM_CHANGEVEHICLE, FM_CHANGEVEHICLECOLOR, FM_CHANGEPET, FM_CHANGEPETBODY, FM_RENAME_PET, FM_ENTERPARTY, FM_LEAVEPARTY, FM_CHARACTER_RENAME, FM_GUILDWARWINSKILL, FM_USE_SOURCE, FM_USE_EFFECTSKILL, FM_HAVE_NAMEDITEM, FM_CHANGE_TRANSFORM, FM_CHANGETALISMAN, FM_CHANGEDWCTEAM, }; enum eClass { CLASS_NONE = 0, CLASS_WARRIER = 1, CLASS_ARCHER, CLASS_SOCERESS, CLASS_CLERIC, #if defined( PRE_ADD_ACADEMIC ) CLASS_ACADEMIC, #endif // #if defined( PRE_ADD_ACADEMIC ) #if defined( PRE_ADD_KALI ) CLASS_KALI, #endif // #if defined( PRE_ADD_KALI ) // CLASS_ASSASSIN, // CLASS_LENCEA, // CLASS_MACHINA, CLASS_MAX, }; enum eJob { JOB_NONE, JOB_WARRIER = 1, JOB_ARCHER, JOB_SOCERESS, JOB_CLERIC, JOB_BLAZEWARRIER = 11, JOB_SWORDMAN, JOB_CHAINSOLDIER, JOB_RANGER = 21, JOB_HUNTER, JOB_KEEPER, JOB_WIZARD = 31, JOB_MAGICIAN, JOB_WITCH, JOB_PRIEST = 41, JOB_PALADIN, JOB_MONK, JOB_MAX = 47, }; enum eAppendItemString { Append_ItemSN, Append_Price, Append_Limit, Append_ItemID, Append_Option, Append_Refundable, #ifdef PRE_ADD_LIMITED_CASHITEM Append_QuantityLimited, #endif //#ifdef PRE_ADD_LIMITED_CASHITEM Append_Max, }; enum eModItemBitmap { ModItem_Durability = 1, ModItem_Level = (1<<1), ModItem_Potential = (1<<2), ModItem_SoulBound = (1<<3), ModItem_SealCount = (1<<4), ModItem_Option = (1<<5), ModItemAll = ModItem_Durability|ModItem_Level|ModItem_Potential|ModItem_SoulBound|ModItem_SealCount|ModItem_Option, }; enum eWeaponType { WEAPON_SWORD, // ´ë°Ë WEAPON_GAUNTLET, // °ÇƲ·¿ WEAPON_AXE, // µµ³¢ WEAPON_HAMMER, // ÇØ¸Ó WEAPON_SMALLBOW, // ¼Ò±Ã WEAPON_BIGBOW, // ´ë±Ã WEAPON_CROSSBOW, // ¼®±Ã WEAPON_STAFF, // ½ºÅ×ÇÁ WEAPON_BOOK, // ¸¶¹ý¼­ WEAPON_ORB, // ¼öÁ¤±¸ WEAPON_PUPPET, // ÁÖ¼úÀÎÇü WEAPON_MACE, // ¸ÞÀ̽º WEAPON_FLAIL, // ÇÁ·¹ÀÏ WEAPON_WAND, // ¿Ïµå WEAPON_SHIELD, // ¹æÆÐ WEAPON_ARROW, // È­»ì WEAPON_CANNON, // ij³í WEAPON_BUBBLEGUN, // ¹öºí°Ç WEAPON_GLOVE, // ±Û·¯ºê WEAPON_FAN, // ºÎä WEAPON_CHAKRAM, // Â÷Å©¶÷ WEAPON_CHARM, // Âü WEAPON_SCIMITER, // ½Ã¹ÌÅÍ WEAPON_DAGGER, // ´ë°Å WEAPON_CROOK, // Å©·è WEAPON_SPEAR, WEAPON_RESERVED1, WEAPON_BRACELET, WEAPON_KNUCKLE, WEAPON_RESERVED2, WEAPON_CLAW, }; enum eParts { PARTS_FACE, // PARTS_HAIR, PARTS_HELMET, // Åõ±¸ PARTS_BODY, // »óü PARTS_LEG, // ÇÏü PARTS_HAND, // ¼Õ PARTS_FOOT, // ¹ß PARTS_NECKLACE, PARTS_EARRING, PARTS_RING, PARTS_RING2, PARTS_CREST, PARTS_FULLSET, // Ç®¼¼Æ® }; enum eQuestDataType { QUESTDATA_STATE = 1, // Äù½ºÆ® »óÅ QUESTDATA_STEP, // ÇöÀç Äù½ºÆ® ½ºÅÜ QUESTDATA_JOURNAL, // ÇöÀç Äù½ºÆ® Àú³Î }; enum eEtcType // DNEtc table Type { ETC_NONE, ETC_QUICKSLOT, // TQuickSlot QuickSlot[QUICKSLOTMAX]; // ´ÜÃà ½½·Ôâ (10°³¾¿ 2ÁÙ) ETC_JOB, // USHORT wJobArray[JOBMAX]; // Á÷¾÷ (0: ¸ÇóÀ½ Á÷¾÷, ³ª¸ÓÁö ÂßÂß~ ÀüÁ÷ Æ÷ÇÔ) ETC_NOTIFIER, // int Notifier[Notifier_MaxCount]; // ¾Ë¸®¹Ì (quest, mission) ETC_DUNGEONCLEAR, // TDungeonClearData DungeonClear[DUNGEONCLEARMAX]; // ´øÀü Ŭ¸®¾î (120°³) ETC_ETERNITYITEM, // USHORT wEternityItem[ETERNITYITEMMAX]; // ¿µ±¸¾ÆÀÌÅÛ ETC_EQUIPDELAYTIME, // int nEquipDelayTime[EQUIPMAX]; // equip index¿¡ °ü·ÃµÈ cooltime ETC_EQUIPREMAINTIME, // int nEquipRemainTime[EQUIPMAX]; }; enum eAuthType { AUTHTYPE_BEGINAUTH, // ÀÎÁõ ½ÃÀÛ AUTHTYPE_STOREAUTH, // ÀÎÁõ ÀúÀå AUTHTYPE_CHECKAUTH, // ÀÎÁõ üũ AUTHTYPE_RESETAUTH, // ÀÎÁõ ¸®¼Â AUTHTYPE_CNT, }; enum eAbuseCode { ABUSE_NONE = 0, ABUSE_MOVE_SERVERS, // ¸¶À» <-> ´øÁ¯ ¿öÇÁ ABUSE_MOVE_INSKY, // °øÁßÀ̵¿ ABUSE_HACKSHIELD, // ÇÙ½¯µå¿¡¼­ ºÎÁ¤ÀÌ¿ëÀÚ ABUSE_TWN_EXTENDLOG, // ´ë¸¸¿ë Ãß°¡ ·Î±×°ª #48714 °ü°è ÀÖÀ½ #if defined( PRE_ADD_CHARACTERCHECKSUM ) ABUSE_CHARACTER_CHECKSUM, // #80315 ij¸¯ÅÍ Ã¼Å©¼¶ ÀÌ»ó ¹ß°ß #endif // #if defined( PRE_ADD_CHARACTERCHECKSUM ) }; struct WorldUserState { enum eCode { Add = 0, Delete, Modify, }; }; namespace DBDNMembership { struct OrderStatusCode { enum eOrderStatusCode { SuccessPayment = 1, // °áÁ¦¼º°ø & pickup ´ë±â Success = 2, // ±¸¸Å¿Ï·á FailPayment = 3, // °áÁ¦½ÇÆÐ }; }; }; namespace DBDNWorldDef { struct CharacterExpChangeCode { enum eCharacterExpChangeCode { Quest = 1, // : Äù½ºÆ® º¸»ó -> FKey = QuestID Dungeon = 2, // : ´øÀü º¸»ó -> FKey = PartyID or NULL Cheat = 3, // : ġƮ -> FKey = NULL Admin = 4, // : º¸Á¤ º¯°æ Eternity = 5, // ¿µ±¸¾ÆÀÌÅÛ -> FKey = ItemSerial PvP = 6, // : PvP ÇǷεµ º¸»ó -> FKey = NULL DungeonMonster = 7, // :´øÁ¯ ¸ó½ºÅÍ »ç³É °æÇèÄ¡ -> FKey = PartyID or NULL( ¼­¹ö¿¡¼­ ±¸ºÐÀÚ·Î ¾²ÀÓ..DB¿¡ ³Ñ¾î°¥¶§´Â Dungeon À¸·Î Convert µÈ´Ù. ) Item = 8, // : °æÇèÄ¡Áõ°¡ ¾ÆÀÌÅÛ -> FKey = ItemID }; }; struct CharacterLevelChangeCode { enum eCharacterLevelChangeCode { Normal = 1, // : ÀÏ¹Ý Cheat = 2, // : ġƮ Admin = 3, // : °ü¸®ÀÚ º¯°æ }; }; struct CoinChangeCode { enum eCoinChangeCode // ÁÖÀÇ : ´øÀü º¸»ó, ¿ìÆí÷ºÎ, â°í ÀÔÃâ±Ý, ¾ÆÀÌÅÛ µÇÆÈ±â, ±³È¯ ÀÔÃâ±Ý, ±³È¯ ¼ö¼ö·á, °­È­ ¼ö¼ö·á, ½ºÅ³ ¾ð¶ô, »óÁ¡ ±¸ÀÔ, ¿ìÆí ¼ö¼ö·á ÀÎ °æ¿ì °¢°¢ÀÇ SP¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. { DoNotDBSave = 0, QuestReward = 1, // : Äù½ºÆ® º¸»ó (FKey: QuestID) PickUp = 2, // : ÇȾ÷ (FKey: PartyID or NULL) Cheat = 3, // : ġƮ (FKey: NULL) Admin = 4, // : °ü¸®ÀÚ º¯°æ (FKey: AuditLogID) Use = 5, // : »ç¿ë (FKey: NULL) // 6: ¿ìÆí¼Û½Å÷ºÎ (FKey: MailID) // 7: ¿ìÆí¼ö½Å÷ºÎ (FKey: MailID) InvenToWare = 8, // : â°í ÀÔ±Ý (FKey: NULL) WareToInven = 9, // : â°í Ãâ±Ý (FKey: NULL) // 10: ¾ÆÀÌÅÛ µÇÆÈ±â (FKey: NpcID) // 11: ±³È¯ ÀÔ±Ý (FKey: CharacterID) // 12: ±³È¯ Ãâ±Ý (FKey: CharacterID) QuestSub = 13, // Äù½ºÆ® Â÷°¨ (FKey: QuestID) RepairItem = 14, // ¾ÆÀÌÅÛ ¼ö¸® (FKey: ItemSerial) // 15: ±³È¯ ¼ö¼ö·á (FKey: NULL) // 16: °­È­ ¼ö¼ö·á (FKey: ItemEnchantLogID) // 17: ½ºÅ³ ¾ð¶ô (FKey: SkillID) // 18: »óÁ¡ ±¸ÀÔ (FKey: ItemSerial) DisjointTax = 19, // ºÐÇØ¼ö¼ö·á (FKey: NULL) // 20: ¿ìÆí ¼ö¼ö·á (FKey: MailID) // 21: ¹«ÀλóÁ¡µî·Ï ¼ö¼ö·á (FKey: TradeID) // 22: ¹«ÀλóÁ¡ ¾ÆÀÌÅÛ ±¸ (FKey: TradeID)ÀÔ // 23: ¹«ÀλóÁ¡ ¾ÆÀÌÅÛ ÆÇ¸Å±Ý (FKey: TradeID) // 24: ¹«ÀλóÁ¡ °Å·¡ ¼º¸³ ¼ö¼ö·á (FKey: TradeID) CompoundTax = 25, // Á¶ÇÕ¼ö¼ö·á (FKey: NULL) // 26: ij¸¯ÅÍ »èÁ¦ (FKey: NULL) MaxLevelExperienceTransGold = 27, // ¸¸·¦ °æÇèÄ¡ °ñµå º¸»ó (FKey: NULL) Present = 28, // ¼±¹° (FKey: NpcID) // 29: ±æµå â¼³ (FKey: GuildID) GuildLevelup = 30, // 30: ±æµå ·¹º§ ¾÷ (FKey: GuildID) InvenToGuildWare = 31, // 31: ±æµå â°í ÀÔ±Ý (FKey: GuildID) GuildWareToInven = 32, // 32: ±æµå â°í Ãâ±Ý (FKey: GuildID) GuildRewardBuy = 33, // 33: ±æµå º¸»ó ±¸¸Å (FKey: GuildItemID) Donation = 34, // ±âºÎ // 35: (DOORS) µî·Ï¼ö¼ö·á // 36: (DOORS) ÀÔÂû¼ö¼ö·á // 37: (DOORS) ³«Âû¼ö¼ö·á // 38: (DOORS) ³«Âû°áÁ¦ // 39: (DOORS) ³«ÂûÁ¤»ê // 40: (DOORS) µî·Ï¼ö¼ö·áÃë¼Ò // 41: (DOORS) ÀÔÂû¼ö¼ö·áÃë¼Ò // 42: (DOORS) ³«Âû¼ö¼ö·áÃë¼Ò // 43: (DOORS) ³«Âû°áÁ¦Ãë¼Ò // 44: (DOORS) ³«ÂûÁ¤»êÃë¼Ò CharmItem = 45, // º¸¹°»óÀÚ (FKey: ItemID) ChaosItem = 46, // Ä«¿À½º Å¥ºê (FKey: ItemID) SpecialBox = 47, // Ư¼öº¸°üÇÔ (FKey: EventRewardID) // 48: ¿ùµåâ°í »ç¿ë ¼ö¼ö·á // 49: C2C º¸°ü // 50: C2C ȸ¼ö // 51: C2C °Å·¡ TalismanSlotOpen = 52, // 52: Å»¸®½º¸¸ ½½·Ô ¿ÀÇÂ(FKey: ½½·Ô À妽º) TalismanSlotChange = 53, // 53: Å»¸®½º¸¸ ½½·Ô ÀåÂø À§Ä¡ À̵¿ GamblePrice=55, // 55: µµ¹Ú¸ðµå Âü°¡ºñ GambleFirstWinner=56, // 56: µµ¹Ú¸ðµå 1µî °ñµå GambleSecondWinner=57, // 56: µµ¹Ú¸ðµå 2µî °ñµå DWC = 58, // 58: DWC ij¸¯ÅÍ ±âº» ¼ÒÀ¯ °ñµå }; enum ePetalChangeCode { GambleEnterPetal= 9, // 9: µµ¹Ú¸ðµå ÆäÅ» ÀÔÀå·á GambleFirstWinPetal= 12, // 12: µµ¹Ú¸ðµå 1µî ÆäÅ» »ó±Ý GambleSecondWinPetal= 13, // 13: µµ¹Ú¸ðµå 2µî ÆäÅ» »ó±Ý }; }; struct CoinTypeCode { enum eCoinTypeCode { Coin = 1, // : ÄÚÀÎ WarehouseCoin = 2, // : â°í ÄÚÀÎ RebirthCoin = 3, // : ºÎȰ ÄÚÀÎ PCBangRebirthCoin = 4, // : PC¹æ ºÎȰ ÄÚÀÎ }; }; struct EquipmentAttributeCode { enum eEquipmentAttributeCode { DelayTime = 1, // : µô·¹ÀÌ ½Ã°£ RemainTime = 2, // : Remain ½Ã°£ }; }; struct FatigueTypeCode { enum eFatigueTypeCode { PCBang = 1, // : PC¹æ ÇǷεµ Daily = 2, // : ÀÏÀÏ ÇǷεµ Weekly = 3, // : ÁÖ°£ ÇǷεµ Event = 4, // À̺¥Æ® ÇǷεµ VIP = 5, // VIPÇǷεµ }; }; struct PublisherCode { enum ePublisherCode { Studio = 0, KR = 1, CH = 2, JP = 3, TW = 4, US = 5, SG = 6, TH = 7, ID = 8, RU = 9, EU = 10, }; }; struct QuestStatusCode { enum eQuestStatusCode { Gain = 0, // : Äù½ºÆ®È¹µæ Progress = 1, // : Äù½ºÆ®ÁøÇà }; }; struct SkillPointCode { enum eSkillPointCode { LevelUp = 1, // ½ºÅ³·¹º§¾÷ EternityItem = 2, // ¿µ±¸Àû¿ë¾ÆÀÌÅÛ Repair = 10, // °Á °­Á¦·Î º¹±¸ ¼¼ÆÃ }; }; struct SkillChangeCode { enum eSkillChangeCode { Gain = 1, // : ½ºÅ³Æ÷ÀÎÆ® ȹµæ Use = 2, // : ½ºÅ³·¹º§¾÷ & ½ºÅ³Æ÷ÀÎÆ® »ç¿ë Reset = 3, // : ½ºÅ³Æ÷ÀÎÆ® ¸®¼Â GainByQuest = 4, // : ½ºÅ³ ȹµæ (Äù½ºÆ®) GainByDungeon = 5, // : ½ºÅ³ ȹµæ (´øÀü º¸»ó) GainByBook = 6, // : ½ºÅ³ ȹµæ (½ºÅ³ºÏ) GainByEvent = 7, // : ½ºÅ³ ȹµæ (À̺¥Æ®) GainByAdmin = 8, // : ½ºÅ³ ȹµæ (by °ü¸®ÀÚ) DelByDrop = 9, // : ½ºÅ³ »èÁ¦ (µå¶ø) DelByQuest = 10, // : ½ºÅ³ »èÁ¦ (Äù½ºÆ®) DelByEvent = 11, // : ½ºÅ³ »èÁ¦ (À̺¥Æ® ¸¸·á) DelByAdmin = 12, // : ½ºÅ³ »èÁ¦ (by °ü¸®ÀÚ) ModSkillLevelByAdmin = 13, // : ½ºÅ³·¹º§ Á¶Á¤ (by °ü¸®ÀÚ) GainByBuy = 14, // 14½ºÅ³È¹µæ(±¸ÀÔ) }; }; struct TradeStatusCode { enum eTradeStatusCode { Sell = 0, // : ÆÇ¸ÅÁß CompleteSellByItem = 1, // : ÆÇ¸Å¿Ï·á(¾ÆÀÌÅÛ ¼ö·É) CompleteSellByCoin = 2, // : ÆÇ¸Å¿Ï·á(ÆÇ¸Å±Ý ¼ö·É) CancelSell = 3, // : ÆÇ¸ÅÃë¼Ò Expire = 4, // : ±â°£¸¸·á }; }; struct AddMaterializedItem { enum eCode { Pick = 1, // 1=Áݱâ -> FKey: PartyID or NULL Mission = 2, // 2=¹Ì¼Ç -> FKey: MissionID QuestReward = 3, // 3=Äù½ºÆ®º¸»ó -> FKey: QuestID Present = 4, // 4=¼±¹° -> FKey: PurchaseID PointBuy = 5, // 5=ÀΰÔÀÓÆ÷ÀÎÆ® ±¸ÀÔ -> FKey: NPCID CashBuy = 6, // 6=ij½¬ ±¸ÀÔ -> FKey: PurchaseID ReserveMoneyBuy = 7, // 7=ÆäÅ» ±¸ÀÔ -> FKey: PurchaseID GetGachaResultCashItem_JP = 9, // 9=ÀϺ» °¡Ã­ µ¹·Á¼­ ³ª¿Â ij½¬ ¾ÆÀÌÅÛ. GMGive = 10, // 10=°ü¸®ÀÚ Áö±Þ -> FKey: AuditLogID ItemDecompose = 11, // 11=¾ÆÀÌÅÛ ºÐÇØ -> FKey: NPCID // ItemEnchantFail = 12, // 12=¾ÆÀÌÅÛ °­È­ ½ÇÆÐ -> FKey: ItemEnchantID ItemCompound = 13, // Á¶ÇÕ RandomItem = 14, // ·£´ý¾ÆÀÌÅÛ DungeonReward = 15, // ´øÁ¯º¸»ó PvPReward = 16, // pvpº¸»ó CharacterCreate = 17, // ±âº»Áö±Þ SystemMail = 18, // ½Ã½ºÅÛ¸ÞÀÏ (¹Ì¼Çº¸»ó) FixedItem = 19, // ij½¬ÅÛ (¾ó±¼, ¸Ó¸®) - ±âÁ¸¾ó±¼/¸Ó¸® Áö¿ì°í µ¤¾î¾²±â -> FKey: ij½¬ÅÛ »ç¿ë¾ÆÀÌÅ۽ø®¾ó (Àκ¥¿¡ Àִ¾Ö) CostumeMix = 21, // ÄÚ½ºÆ¬ ÇÕ¼º FishingReward = 22, // ³¬½Ãº¸»ó Harvest = 23, // ¼öÈ® Cheat = 24, // ġƮ PvPLadderPoint = 25, // ·¡´õÆ÷ÀÎÆ® UnionPoint = 26, // ¿¬ÇÕÆ÷ÀÎÆ® Trigger = 27, // Æ®¸®°Å GuildWarFestivalPoint = 28, // ±æµå ÃàÁ¦ Æ÷ÀÎÆ® Repurchase = 29, GuildReversionItem = 30, CostumeRandomMixItem = 31, BestFriendItem = 34, COMEBACKREWARD = 35, // º¹±ÍÀ¯Àúº¸»ó SpecialBoxReward = 36, NewbieGameQuitReward = 37, //½Å±Ô À¯Àú Á¢¼Ó Á¾·áÇÒ ¶§ º¸»ó NewbiewReConnectReward = 38, //½Å±Ô À¯Àú ÀçÁ¢¼Ó½Ã º¸»ó ComebackGameQuitReward = 39, //±ÍȯÀÚ Á¢¼Ó Á¾·áÇÒ ¶§ º¸»ó SeedPointBuy = 40, //½Ãµå·Î ±¸ÀÔ }; }; struct MailTypeCode { enum eCode { Normal = MailType::NormalMail, // ÀÏ¹Ý ¸ÞÀÏ Mission = MailType::MissionMail, // ¹Ì¼Ç º¸»ó Admin = MailType::AdminMail, // °ü¸®ÀÚ ¸ÞÀÏ EventMail = MailType::EventMail, // À̺¥Æ® ¸ÞÀÏ VIP = MailType::VIPMail, // VIP MasterSystem = MailType::MasterSystemMail, // »çÁ¦½Ã½ºÅÛ NpcReputaion = MailType::NpcReputationMail, // NPCÈ£°¨µµ½Ã½ºÅÛ Quest = MailType::Quest, // Äù½ºÆ® GuildWarReward = MailType::GuildWarReward, // ±æµåÀü º¸»ó SpecialBox_Account = MailType::SpecialBox_Account, // Ư¼öº¸°üÇÔ_°èÁ¤Å¸°Ù SpecialBox_Character = MailType::SpecialBox_Character, // Ư¼öº¸°üÇÔ_Çöij¸¯ÅÍŸ°Ù Cadge = MailType::Cadge, // Á¶¸£±â GuildMaxLevelReward = MailType::GuildMaxLevelReward,// ÃÖÃʱæµå°¡ÀÔ ¸¸·¦ ±æµå º¸»ó AppellationBookReward = MailType::AppellationBookReward, // Īȣ Ä÷º¼ÇºÏ ¿Ï·á º¸»ó }; }; struct UseItem { enum eUseItemCode { DoNotDBSave = 0, Use = 1, // 1=¼Ò¸ð¼º ¾ÆÀÌÅÛ »ç¿ë Destroy = 2, // 2=¹ö¸®±â DeCompose = 4, // 4=ºÐÇØ Present = 5, // 5=¼±¹° GuildReversionItem = 6, // 6=±æµåÅ»Å𳪠Ãß¹æÀ¸·Î ±æµå±Í¼Ó¾ÆÀÌÅÛ »èÁ¦ }; }; struct ItemLocation { enum eCode { Equip = 1, Inventory = 2, Warehouse = 3, QuestInventory = 4, CashInventory = 5, GiftRepository = 6, CashEquip = 7, Glyph = 8, VehicleInventory = 9, PetInventory = 10, HarvestDepot = 11, // ¼öȮâ°í ServerWare = 17, // ¼­¹ö ÀÏ¹Ý ¾ÆÀÌÅÛ Ã¢°í ServerWareCash = 18, // ¼­¹ö ij½¬ ¾ÆÀÌÅÛ Ã¢°í Talisman = 19, // Å»¸®½º¸¸ PeriodInventory = 20, PeriodWarehouse = 21, }; }; struct PetType { enum eCode { Vehicle = 1, Pet = 2, SATIETY_PET = 3, }; }; struct PayMethodCode { enum eCode { Coin = 1, // 1: ÄÚÀÎ Cash = 2, // 2: ij½¬ Petal = 3, // 3: Àû¸³±Ý Coupon = 4, // 4: ÄíÆù Admin = 5, // 5: °ü¸®ÀÚ Áö±Þ Quest = 6, // 6: Äù½ºÆ®º¸»ó Mission = 7, // 7: ¹Ì¼Çº¸»ó LevelupEvent = 8, // 8=ij¸¯ÅÍ ·¹º§ ¾÷ º¸»ó VIP = 9, // 9 : VIP ¼±¹° PvP = 10, // 10 : PVP ·¡´õ Æ÷ÀÎÆ® Union_Commerical = 11, // 11 : »óÀÎ ¿¬ÇÕ Æ÷ÀÎÆ® Union_Royal = 12, // 12 : ¿Õ¼º ¿¬ÇÕ Æ÷ÀÎÆ® Union_Liberty = 13, // 13 : ÀÚÀ¯ ¿¬ÇÕ Æ÷ÀÎÆ® Cash_NexonUSA = 14, // 14 : ³Ø½¼¾Æ¸Þ¸®Ä« ij½¬ Event = 15, // 15 : À̺¥Æ® GuildWar_Festival = 16, // 16 : ±æµåÀü ÃàÁ¦ Æ÷ÀÎÆ® GuildWar_Reward = 17, // 17 : ±æµåÀü º¸»ó Comeback = 19, // 18 : º¹±ÍÀ¯Àúº¸»ó BestFriend = 20, // 20 : ÀýÄ£ BeginnerGuild = 21, // 21 : Ãʺ¸ÀÚ±æµå ¼±¹° GuildSupport = 22, // 22 : ±æµåÁö¿øº¸»ó ActiveMission = 23, // 23 : ¾×Ƽºê¹Ì¼Ç º¸»ó #if defined( PRE_ADD_STAMPSYSTEM ) Stamp = 24, // 24 : ½ºÅÆÇÁ º¸»ó #endif // #if defined( PRE_ADD_STAMPSYSTEM ) #if defined( PRE_ADD_NEW_MONEY_SEED ) SeedPoint = 25, // 25 : ½Ãµå·Î ±¸ÀÔ #endif }; }; struct CashRebirthCode { enum eCode { Cash = 1, Petal = 2, Admin = 3, Item = 4, Seed = 5, }; }; struct EffectItemGetCode { enum eCode { Cash = 1, Petal = 2, Cooper = 3, Admin = 4, Union = 5, Item = 6, Guild = 7, BestFriend = 8, Seed = 9, }; }; struct EffectItemLifeSpanType { enum eCode { New = 0, Extend = 1, Update = 2, }; }; struct DifficultyCode { enum eCode { Easy = 1, Normal, Hard, Master, Abyss, }; }; struct ClearGradeCode { enum eCode { SSS = 10, SS, S, A, B, C, D, }; }; struct RewardBoxCode { enum eCode { Wood = 1, Bronze, Silver, Gold, }; }; struct WhereToGoCode { enum eCode { StageEntrance = 1, Village, }; }; struct PvPModeCode { enum eCode { Round = 1, Respawn, Captain, IndividualRespawn, Zombie, Ladder1vs1, Ladder2vs2, Ladder3vs3, Ladder4vs4, GuildWar, Occupation, AllKill, Racing, Tournament, #if defined( PRE_ADD_PVP_COMBOEXERCISE ) ComboExercise, #endif // #if defined( PRE_ADD_PVP_COMBOEXERCISE ) #if defined(PRE_ADD_DWC) DWCRegular, DWCPractice, #endif }; }; struct PvPTeamCode { enum eCode { A = 1, B, }; }; struct PvPResultCode { enum eCode { Win = 1, Lose, Draw, GiveUp, }; }; struct RestraintTargetCode { enum eCode { Account = 1, // °èÁ¤ Character, // ij¸¯ÅÍ }; }; struct RestraintTypeCode { enum eCode { ConnectRestraint = 1, ChatRestraint, TradeRestraint, }; }; struct RestraintDolisReasonCode { enum eCode { DefaultCode = 110, AbuseRestraintCode = 111, AbuseTradeRestraintCode = 112, }; }; struct TransactorCode { enum eCode { Master = 1, Pupil, }; }; struct GetMasterCharacterCode { enum eCode { MyInfo = 1, // ÀÚ½ÅÀÇ ½º½Â Á¤º¸ MyMasterInfo, // ³» ½º½Â Á¤º¸ OptionalMasterInfo, // ÀÓÀÇÀÇ Æ¯Á¤ ½º½Â Á¤º¸ }; }; #if defined( PRE_ADD_SECONDARY_SKILL ) struct SecondarySkillTypeCode { enum eCode { ProductionSkill = SecondarySkill::Type::ProductionSkill, // »ý»ê½ºÅ³ ManufactureSkill = SecondarySkill::Type::ManufactureSkill, // Á¦ÀÛ½ºÅ³ CommonSkill = SecondarySkill::Type::CommonSkill, // °ø¿ë½ºÅ³ }; }; #endif // #if defined( PRE_ADD_SECONDARY_SKILL ) struct AppellationKind { enum eAppellationKind { Select = 1, Cover = 2 }; }; struct EtcPointCode { enum eCode { None = 0, PvP = 1, Union_Commercial = 2, Union_Royal = 3, Union_Liberty = 4, GuildWar_Festival = 5, // ±æµåÀü ÃàÁ¦ Æ÷ÀÎÆ® SeedPoint = 6, // ½Ãµå ¸Ó´Ï Max, }; }; struct GuildWarRewardType { enum eGuildWarRewardType { GuildWarFestivalWin = 1, // ±æµåÃàÁ¦¿ì½Â GuildWarFestivalLose, // ±æµåÃàÁ¦ÆÐ¹è GuildWarFinalUnder4, // º»¼± 4°­¹Ì¸¸ GuildWarFinal4, // º»¼± 4°­º¸»ó GuildWarFinal2, // º»¼± 2À§º¸»ó GuildWarFinalWin, // º»¼± ¿ì½Âº¸»ó GuildWarFinalAbnormalLose, // º»¼± ºñÁ¤»óÆÐ¹è(µ¿Á¡¶§ ¿¹¼±Á¡¼ö?) }; }; struct EventRewardType { enum eEventRewardType { Admin = 1, System = 2, }; }; }; //Exception Report enum eExceptionRepert { _EXCEPTIONTYPE_NONE = 0, //for game _EXCEPTIONTYPE_ROOMCRASH, _EXCEPTIONTYPE_SESSIONCRASH, _EXCEPTIONTYPE_ROOMDESTRUCTOR, _EXCEPTIONTYPE_GAME_DELAYED, //for db _EXCEPTIONTYPE_DBMW_DELAYED, }; //GameServerAffinity Type enum eGameServerAffinityType { _GAMESERVER_AFFINITYTYPE_NORMAL = 0, //±×³É ÀÏ¹Ý ´øÀüÀÌ¹Ì ¸Ó´Ï ±×·±°Å _GAMESERVER_AFFINITYTYPE_HYBRYD, //ÇǺñÇǵµ ¹Þ°í ´Ù ¹Þ¾Æ¿ä _GAMESERVER_AFFINITYTYPE_PVP, //ÇǺñÇǸ¸ ¹Þ¾Æ¿ä _GAMESERVER_AFFINITYTYPE_FARM, //°ÔÀÓ¼­¹ö ¿ùµå ÅëÇÕó¸®¿ë ³óÀå Àü¿ë °×¼·! }; // Cash enum eCashEtc { Reason_GameClient = 1, Reason_Web = 2, Reason_PCBangGameClient = 3, Reason_PCBangWeb = 4, Category_Main = 1, Category_Costume = 2, Category_Item = 3, Category_Package = 4, CashItemState_None = 1, CashItemState_Hot = 2, CashItemState_New = 3, CashItemState_Normal = 4, CashItemState_Discount = 5, }; #if defined(_CH) enum eChSndaAuthFlag { eChSndaAuthFlag_UseEKey = (1 << 0), // EKey ±â´É »ç¿ë ¿©ºÎ eChSndaAuthFlag_UseECard = (1 << 1), // ECard ±â´É »ç¿ë ¿©ºÎ }; #endif // _CH // structure ----------------------------------------------------------------------------------------------- struct TChannelInfo { USHORT nChannelID; //ÇÒ´çµÈ ä³Î(Çʵå)¾ÆÀ̵ð USHORT nChannelIdx; USHORT nMapIdx; //´ã´çÇÏ´Â ¸ÊÀÇ ¾ÆÀ̵ð USHORT nChannelMaxUser; USHORT nCurrentUser; int nAttribute; //DirtyBit int nMeritBonusID; //Merit bonus bool bVisibility; WCHAR wszMapName[MAPNAMELENMAX]; int nLimitLevel; bool bShow; USHORT nDependentMapID; int nServerID; BYTE cThreadID; #if defined(PRE_ADD_CHANNELNAME) WCHAR wszLanguageName[CHANNELLANGUAGEMAX]; #endif //#if defined(PRE_ADD_CHANNELNAME) int GetUserPercentage() const { if( nChannelMaxUser > 0 ) return nCurrentUser*100/nChannelMaxUser; return -1; } }; struct TVillageInfo { BYTE cVillageID; int nManagedID; char szIP[IPLENMAX]; USHORT nPort; std::vector vOwnedChannelList; TVillageInfo() { cVillageID = 0; nManagedID = 0; memset(szIP, 0, sizeof(szIP)); nPort = 0; } }; struct TGameInfo { int nServerID; int nServerAttribute; ULONG nIP; USHORT nPort; USHORT nTcpPort; int nRoomCnt; int nUserCnt; bool bHasMargin; UINT nFrame; bool bComplete; UINT uiLastDelayReportTick; }; // Server Info struct TServerInfo { bool bMergedWorld; int nWorldSetID; // ÅëÇÕ ¿ùµå ¾ÆÀ̵ð char cWorldID; WCHAR wszWorldName[WORLDNAMELENMAX]; UINT nWorldMaxUser; //´ë±âÀÚ¿ë USHORT nDefaultMaxUser; bool bOnline; // online, offline »óÅÂÇ¥½Ã¿ë bool bOnTop; std::vector vOwnedVillageList; TServerInfo() { bMergedWorld = false; nWorldSetID = 0; cWorldID = 0; memset(wszWorldName, 0, sizeof(wszWorldName)); nWorldMaxUser = 0; nDefaultMaxUser = 0; bOnline = false; bOnTop = false; } }; // struct TChannelInfoEx { TChannelInfo Channel; BYTE cVillageID; char szIP[IPLENMAX]; USHORT nPort; }; typedef std::map TMapChannel; // ¼­¹ö¿¡¼­´Â float·Î ¹Ù·Î ¾²Áö¾Ê´Â´Ù. Ŭ¶ó¿¡¼­ ¹ÞÀº ÁÂÇ¥¿¡ *1000À» ÇØ¼­ »ç¿ëÇÔ struct TPosition { int nX; int nY; int nZ; }; struct TLocation { UINT nMapIndex; TPosition Pos; }; // npc, user object»ý¼º¿¡ ÇØ´ç. °øÅëµÈ ºÎºÐ¸¸ struct TBaseData { UINT nObjectID; WCHAR wszName[NAMELENMAX]; int nChannelID; TPosition CurPos, TargetPos; TPosition MoveDir; float fRotate; bool bBattleMode; }; struct TParamData { eChatType eChatType; int nChatSize; WCHAR wszChatMsg[CHATLENMAX]; char Buffer[128]; int nBufSize; USHORT wActorProtocol; TItemInfo ItemInfo; TItemInfo CashItemInfo; BYTE cLevel; UINT nExp; int nJob; int nSelectAppellation; int nCoverAppellation; bool bHide; bool bEncrypt; DNEncryptPacketSeq sEncrypt; char cType; char cState; DWORD dwColor; int nChatRoomParam; int nIndex; DWORD dwSendSessionID; // SendSessionID TItem Vehicle; TVehicleCompact PetInfo; char cPetPartsType; }; struct TDefaultCreateData { BYTE cClassID; // Ŭ·¡½º int cDarkClass; // rlkt_dark dark class :) int cDarkClassJobID; // rlkt_dark dark class :) int nCreateMapIndex; // óÀ½ »ý¼º½Ã ½ÃÀÛ ¸Ê À妽º int nCreateMapStartPositionX[DEFAULTPOSITIONMAX]; // óÀ½ »ý¼º½Ã ½ÃÀÛ À§Ä¡ X int nCreateMapStartPositionY[DEFAULTPOSITIONMAX]; // óÀ½ »ý¼º½Ã ½ÃÀÛ À§Ä¡ Y int nCreateMapStartRadius[DEFAULTPOSITIONMAX]; // ¹Ý°æ int nCreateTutorialMapIndex; // óÀ½ »ý¼º½Ã Æ©Å丮¾ó ¸Ê À妽º (GameServerÂÊ) int nCreateTutorialGateNo; // óÀ½ »ý¼º½Ã Æ©Å丮¾ó °ÔÀÌÆ® (GameServerÂÊ) int nDefaultBody; // ±âº»¸ö int nDefaultLeg; // ±âº»´Ù¸® int nDefaultHand; // ±âº»¼Õ int nDefaultFoot; // ±âº»¹ß int nFace[DEFAULTPARTSMAX]; // ¾ó±¼ int nHair[DEFAULTPARTSMAX]; // ¸Ó¸® int nHelmet[DEFAULTPARTSMAX]; // Çï¸ä int nBody[DEFAULTPARTSMAX]; // »óÀÇ int nLeg[DEFAULTPARTSMAX]; // ÇÏÀÇ int nHand[DEFAULTPARTSMAX]; // ¼Õ int nFoot[DEFAULTPARTSMAX]; // ¹ß int nWeapon[WEAPONMAX]; // ¹«±â DWORD dwHairColor[DEFAULTHAIRCOLORMAX]; DWORD dwSkinColor[DEFAULTSKINCOLORMAX]; DWORD dwEyeColor[DEFAULTEYECOLORMAX]; int nDefaultItemID[DEFAULTITEMMAX]; // ¼ÒÀ¯¾ÆÀÌÅÛ int nDefaultItemCount[DEFAULTITEMMAX]; // ¼ÒÀ¯¾ÆÀÌÅÛ °³¼ö int nDefaultSkillID[DEFAULTSKILLMAX]; // ¼ÒÀ¯½ºÅ³ TQuickSlot DefaultQuickSlot[DEFAULTQUICKSLOTMAX]; // Äü½½·Ô°³¼ö int nDefaultGestureID[DEFAULTGESTUREMAX]; // ¼ÒÀ¯ Á¦½ºÃ³ }; #if defined( PRE_ADD_DWC ) struct TDWCCreateData { BYTE cClassID; // ±âº» Ŭ·¡½º ID BYTE cJobCode1; // 1Â÷ ÀüÁ÷ Ŭ·¡½º ID BYTE cJobCode2; // 2Â÷ ÀüÁ÷ Ŭ·¡½º ID BYTE cLevel; int nExp; int nCreateMapIndex; // óÀ½ »ý¼º½Ã ½ÃÀÛ ¸Ê À妽º int nCreateMapStartPositionX[DEFAULTPOSITIONMAX]; // óÀ½ »ý¼º½Ã ½ÃÀÛ À§Ä¡ X int nCreateMapStartPositionY[DEFAULTPOSITIONMAX]; // óÀ½ »ý¼º½Ã ½ÃÀÛ À§Ä¡ Y int nCreateMapStartRadius[DEFAULTPOSITIONMAX]; // ¹Ý°æ int nDefaultBody; // ±âº»¸ö int nDefaultLeg; // ±âº»´Ù¸® int nDefaultHand; // ±âº»¼Õ int nDefaultFoot; // ±âº»¹ß int nEquipArray[EQUIPMAX]; // ÀåÂø Àåºñ DWORD dwHairColor; DWORD dwSkinColor; DWORD dwEyeColor; int nDefaultItemID[DEFAULTITEMMAX]; // ¼ÒÀ¯¾ÆÀÌÅÛ int nDefaultItemCount[DEFAULTITEMMAX]; // ¼ÒÀ¯¾ÆÀÌÅÛ °³¼ö int nDefaultSkillID[DEFAULTSKILLMAX]; // ¼ÒÀ¯½ºÅ³ TQuickSlot DefaultQuickSlot[DEFAULTQUICKSLOTMAX]; // Äü½½·Ô°³¼ö int nDefaultGestureID[DEFAULTGESTUREMAX]; // ¼ÒÀ¯ Á¦½ºÃ³ short nSkillPoint; // ½ºÅ³ Æ÷ÀÎÆ® int nGold; // °ñµå - ÇÊ¿ä ¾ø´Ù¸é Á¦°ÅÇÏÀÚ }; #endif // #if defined( PRE_ADD_DWC ) struct TMapInfo { int nMapID; char szMapName[10][256]; BYTE GateMapCount[WORLDMAP_GATECOUNT]; USHORT GateMapIndexs[WORLDMAP_GATECOUNT][WORLDMAP_GATECOUNT]; BYTE GateStartIndexs[WORLDMAP_GATECOUNT][WORLDMAP_GATECOUNT]; int nWorldLevel; GlobalEnum::eMapTypeEnum MapType; GlobalEnum::eMapSubTypeEnum MapSubType; int nMaxClearCount; int nAllowMapType; std::vector vMapAreaIndex; bool bExpandable; bool bUserReturnSystem; // À¯Àú º¹±Í½Ã½ºÅÛ bool bVehicleMode; bool bPetMode; bool bAllowFreePass; #if defined( PRE_PARTY_DB ) std::wstring wstrMapName; int iEnterConditionTable; #endif // #if defined( PRE_PARTY_DB ) #if defined( PRE_NORMALSTAGE_REGULATION ) char cRevisionNum; //º¸Á¤³Ñ¹ö #endif #if defined(PRE_ADD_VEHICLE_SPECIAL_ACTION) bool bVehicleSpecalActionMode; #endif }; struct TCoinCountData { BYTE cLevel; int nRebirthCoin[WORLDCOUNTMAX]; // ºÎȰÄÚÀÎ int nCashRebirthCoin[WORLDCOUNTMAX]; // ºÎȰij½¬ÄÚÀÎ int nRebirthCoinLimit; // ¹«·áÄÚÀμÒÁöÁ¦ÇѰ³¼ö int nCashRebirthCoinLimit; // À¯·áÄÚÀμÒÁöÁ¦ÇѰ³¼ö int nVIPRebirthCoin; // VIPºÎȰÄÚÀÎ }; struct TActorData { int nActorID; BYTE cClass; // À¯´Ö ŸÀÔ Á¾·ù }; const int QUEST_MAX_CNT = 20; struct TNpcData { int nNpcID; int nParam[2]; WCHAR wszName[EXTDATANAMELENMAX]; char szTalkFile[256]; // ´ë»çÆÄÀÏÀ̸§ char szScriptFile[256]; // script ÆÄÀÏÀ̸§ int QuestIndexArr[QUEST_MAX_CNT]; // Äù½ºÆ®À妽º TActorData ActorData; }; struct TItemData { int nItemID; WCHAR wszItemName[EXTDATANAMELENMAX]; int nType; // ŸÀÔ int nTypeParam[3]; // ŸÀÔÆÄ¶ó¹ÌÅÍ BYTE cLevelLimit; // ·¹º§Á¦ÇÑ BYTE cRank; // µî±Þ BYTE cReversion; // ±Í¼Ó¿©ºÎ bool IsCash; // ij½¬ÅÛÀΰ¡ bool IsDestruction; // ÆÄ±«¿©ºÎ bool IsAuthentication; // ÀÎÁõ¿©ºÎ int nAmount; // ±Ý¾× int nSellAmount; // ÆÇ¸Å±Ý¾× int nOverlapCount; // Áßø°³¼ö std::vector nNeedJobClassList; // Á÷¾÷Á¦ÇÑ int nSkillID; // ½ºÅ³ À妽º char cSkillLevel; // ½ºÅ³ ·¹º§ char cSkillUsingType; // ½ºÅ³ »ç¿ë ŸÀÔ int nMaxCoolTime; // ÃÖ´ë ÄðŸÀÓ (º¯ÇÏÁö ¾Ê´Â °ª) int nEnchantID; // ÀÎæƮ¾ÆÀ̵ð int nAllowMapType; // »ç¿ë°¡´ÉÇÑ ¸Ê ŸÀÔ char cSealCount; // ¹ÐºÀ Ƚ¼ö int nSealID; // SealCountTableID int nNeedBuyItemID; // »óÁ¡¿¡¼­ ±¸ÀÔÇÒ ¶§ ÇÊ¿äÇÑ ¾ÆÀÌÅÛID int nNeedBuyItemCount; // »óÁ¡¿¡¼­ ±¸ÀÔÇÒ ¶§ ÇÊ¿äÇÑ ¾ÆÀÌÅÛ°³¼ö int nNeedPvPRank; // ÀåÂøÇÒ ¶§ ÇÊ¿äÇÑ PvP ·©Å© bool IsSealed; // ȹµæ ½Ã ¹ÐºÀ¿©ºÎ int nCashTradeCount; // ij½Ã¾ÆÀÌÅÛ ±³È¯°³¼ö bool IsEnableCostumeMix; int nApplicableValue; bool IsCollectingEvent; // ¾ÆÀÌÅÛ ¼öÁý API¸¦ È£Ãâ¿©ºÎ int nExchangeCode; // ¾ÆÀÌÅÛ Ä«Å×°í¸® ID int iNeedBuyLadderPoint; int iUseLevelLimit; int iNeedBuyUnionPoint; int iNeedBuyGuildWarPoint; bool bRebuyable; int nPeriod; #if defined(PRE_ADD_SERVER_WAREHOUSE) bool IsWStorage; // ¼­¹ö â°í¿¡ ³ÖÀ» ¼ö ÀÖ´Â ¿¹¿Ü #endif int DragonJewelType; void Reset() { memset( wszItemName, 0, sizeof(wszItemName) ); memset( nTypeParam, 0, sizeof(nTypeParam) ); nNeedJobClassList.clear(); std::vector().swap(nNeedJobClassList); nItemID = 0; nType = 0; cLevelLimit = 0; cRank = 0; cReversion = 0; IsCash = 0; IsDestruction = 0; IsAuthentication= 0; nAmount = 0; nSellAmount = 0; nOverlapCount = 0; nSkillID = 0; cSkillLevel = 0; cSkillUsingType = 0; nMaxCoolTime = 0; nAllowMapType = 0; cSealCount = 0; nNeedBuyItemID = 0; nNeedBuyItemCount = 0; nNeedPvPRank = 0; IsSealed = 0; nCashTradeCount = 0; IsEnableCostumeMix = 0; nApplicableValue = 0; IsCollectingEvent = 0; nExchangeCode = 0; iNeedBuyUnionPoint = 0; iNeedBuyGuildWarPoint = 0; bRebuyable = false; nPeriod = 0; DragonJewelType = 0; } }; struct TWeaponData { int nWeaponIndex; char cEquipType; // ÀåÂøÅ¸ÀÔ int nLength; // ¹«±â ±æÀÌ int nDurability; // ³»±¸µµ int nDurabilityRepairCoin; // ¼ö¸®ºñ int nPermitJob[10]; bool bOneType; }; struct TPartData { int nPartIndex; int nParts; // ÆÄÃ÷ int nDurability; // ³»±¸µµ int nDurabilityRepairCoin; // ¼ö¸®ºñ int nPermitJob[10]; std::vector nSubPartsList; // ¼­ºêÆÄÃ÷ (Çѹú¿Ê) TPartData() { nPartIndex = 0; nParts = 0; nDurability = 0; nDurabilityRepairCoin = 0; memset(nPermitJob, 0, sizeof(nPermitJob)); } }; struct TVehiclePartsData { int nItemID; int nVehicleClassID; int nVehiclePartsType; std::string strSkinName; std::string strAniName; std::string strActName; int nSkinColor; TVehiclePartsData() { nItemID = 0; nVehicleClassID = 0; nVehiclePartsType = 0; nSkinColor = 0; } }; struct TVehicleData { int nItemID; int nVehicleClassID; int nVehicleActorID; int nDefaultBody; int nDefaultParts1; int nDefaultParts2; int nVehicleSummonTime; int nVehicleDefaultSpeed; int nPetLevelTypeID; // pet µî±Þ(?)°ª µî±ÞÀÌ ´Ù¸¥ ÆêÀ» ÂüÁ¶ÇϱâÀ§ÇÑ Å°°ª int nPetSkillID1; // int nPetSkillID2; int nRange; // ½ºÄµ ¹üÀ§°ª. À̸¦Å׸é Áݱ⠰°Àº°Å int nFoodID; }; const BYTE PetStateMax = 10; struct TPetLevelDetail { int nTableIndex; int nPetLevel; int nPetExp; int nState[PetStateMax]; char *szStateMin[PetStateMax]; char *szStateMax[PetStateMax]; int nVipExp; }; struct TPetLevelData { int nPetLevelType; std::vector VecPetLevel; }; struct TPetFoodData { int nItemID; int nTickTime; // ¼Ò¸ð ½Ã°£(second) int nFullTic; // ƽ´ç ¼Ò¸ð·® BYTE cFullTimeLogOut; // ·Î±×¾Æ¿ô½Ã ±âÁ¸ ¸¸º¹µµ ³ª´©±â°ª int nFullMaxCount; // ¸¸º¹µµ ÃÖ´ë max¼öÄ¡ int nUseExp[Pet::MAX_SATIETY_SELECTION]; int nUseState[Pet::MAX_SATIETY_SELECTION]; }; struct TPotentialJewelData { int nItemID; int nApplyApplicableValue; int nPotentialNo; bool bErasable; bool bCanApplySealedItem; #if defined(PRE_ADD_REMOVE_PREFIX) bool bSuffix; #endif // PRE_ADD_REMOVE_PREFIX #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL) int nRollbackAmount; // ÀáÀç·Â ºÎ¿© ·Ñ¹é ¼ö¼ö·á #endif // #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL) }; struct TEnchantJewelData { int nItemID; int nApplyApplicableValue; int nRequireMaxItemLevel; int nRequireEnchantLevel; int nEnchantLevel; bool bCanApplySealedItem; }; struct TItemDropData { int nItemDropID; bool bIsGroup[20]; int nIndex[20]; int nProb[20]; int nInfo[20]; }; struct TGlobalWeightData { int nID; float fValue; }; struct TGlobalWeightIntData { int nID; int nValue; }; struct TLevelData { int nIndex; short wStrength; // Èû short wAgility; // ¹Îø short wIntelligence; // Áö´É short wStamina; // °Ç°­ int nExperience; // °æÇèÄ¡ int nFatigue; // ÇǷεµ }; struct TStat { USHORT wStr; USHORT wDex; USHORT wInt; USHORT wHealth; USHORT wLuck; }; struct TSkillLevelData { char cSkillLevel; // ½ºÅ³ ·¹º§ char cLevelLimit; // Á¦ÇÑ ·¹º§ //int nNeedJobClass; // Á÷¾÷Á¦ÇÑ -> ½ºÅ³ Å×À̺í·Î ¿Å°ÜÁ³À½. int nDelayTime; // ½ºÅ³µô·¹ÀÌ(ms) int nAddRange; // Ãß°¡ »ç°Å¸®(cm) int nNeedItemID; // ¼Ò¸ð¾ÆÀÌÅÛ int nNeedItemDecreaseCount; // ¼Ò¸ð ¾ÆÀÌÅÛ °³¼ö int nDecreaseHP; // ¼Ò¸ðHP int nDecreaseSP; // ¼Ò¸ðSP int nNeedSkillPoint; int nEffectClassValue1Duration; float nMagicDamage; //rlkt_damage float nPhyDamage; //rlkt_damage }; struct TSkillData { int nSkillID; // ½ºÅ³id char cNeedWeaponType[ 2 ]; // Çʿ乫±â int nMaxLevel; // ÃÖ´ë·¹º§ char cSkillType; // ½ºÅ³Å¸ÀÔ char cDurationType; // Áö¼ÓŸÀÔ char cTargetType; // Ÿ°ÙŸÀÔ char cDissolvable; // ÇØÁ¦ °¡´É ¿©ºÎ int nNeedJobID; // Á÷¾÷ Á¦ÇÑ bool bDefaultLocked; // µðÆúÆ®·Î ¶ôÀÌ µÈ °ÇÁö ¿©ºÎ int nUnlockSkillBookItemID; // ¾ð¶ôÇÏ´Â ½ºÅ³ºÏÀÇ ¾ÆÀÌÅÛ ID int nUnlockPrice; // µ·À¸·Î ¾ð¶ôÇÒ ¶§ ºñ¿ë. int nExclusiveID; // ÀÌ ¾ÆÀ̵𰡠°°Àº °ªÀÎ ½ºÅ³Àº °°ÀÌ ¹è¿ï ¼ö ¾ø´Ù. int nGlobalCoolTime; // ±Û·Î¹ú ½ºÅ³ ÄðŸÀÓ (#36858) int nGlobalSkillGroup; // ±Û·Î¹ú ½ºÅ³ ±×·ì (#36858) std::vector vLevelDataList; TSkillData() { nSkillID =0; memset(cNeedWeaponType, 0, sizeof(cNeedWeaponType)); nMaxLevel = 0; cSkillType = 0; cDurationType = 0; cTargetType = 0; cDissolvable = 0; nNeedJobID = 0; bDefaultLocked = false; nUnlockSkillBookItemID = 0; nUnlockPrice = 0; nExclusiveID = 0; nGlobalCoolTime = 0; nGlobalSkillGroup = 0; } }; struct TSkillTreeData { int nSkillID; int nTreeSlotIndex; int nParentSkillID[ 3 ]; int nNeedParentSkillLevel[ 3 ]; #if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP) int nNeedBasicSP; int nNeedFirstSP; int nNeedSecondSP; #endif // #if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP) #if defined( PRE_ADD_ONLY_SKILLBOOK ) bool bNeedSkillBook; #endif // #if defined( PRE_ADD_ONLY_SKILLBOOK ) }; // npc ´ëÈ­ °ü·Ã ±¸Á¶Ã¼ struct TALK_QUESTION { std::wstring szQuestion; }; struct TALK_ANSWER { std::wstring szLinkTarget; std::wstring szLinkIndex; std::wstring szAnswer; bool bOtherTargetLink; // ´Ù¸¥ ÅäÅ©ÆÄÀÏ·Î ¸µÅ© ÇÏ´Â °æ¿ì true }; struct TALK_PARAGRAPH { std::wstring szIndex; TALK_QUESTION Question; std::vector Answers; }; // key - ¹®´Ü½ºÆ®¸µÀ妽º, second - ¹®´Ü typedef std::map TALK_PARAGRAPH_MAP; typedef TALK_PARAGRAPH_MAP::iterator TALK_PARAGRAPH_MAP_IT; // key - ´ë»çxml ÆÄÀÏ À̸§, second - ´ë»çÀüü typedef std::map TALK_MAP; typedef TALK_MAP::iterator TALK_MAP_IT; #include // key - ¹®´ÜÀÀ´ä½ºÆ®¸µÀ妽º (´ÜÁö Ŭ¶óÀÌ¾ðÆ® ´ë»ç¿äû ¹«°á¼º üũ ¿À·ù¸Þ½ÃÁö¸¦ ¸·´Â ¿ëµµ) typedef std::set TALK_ANSWER_SET; typedef TALK_ANSWER_SET::iterator TALK_ANSWER_SET_IT; // key - ´ë»çxml ÆÄÀÏ À̸§, second - ¹®´ÜÀÀ´ä½ºÆ®¸µÁýÇÕ (´ÜÁö Ŭ¶óÀÌ¾ðÆ® ´ë»ç¿äû ¹«°á¼º üũ ¿À·ù¸Þ½ÃÁö¸¦ ¸·´Â ¿ëµµ) typedef std::map TALK_ANSWER_MAP; typedef TALK_ANSWER_MAP::iterator TALK_ANSWER_MAP_IT; // Äù½ºÆ® º¸»ó ¾ÆÀÌÅÛ Å×À̺í Á¤º¸ // µ·°ú ¾ÆÀÌÅÛ 6Á¾·ù ±îÁö ¼¼ÆÃÇÒ ¼ö ÀÖ´Ù. nItemID °ú nItemCount´Â ¼¼Æ®ÀÌ´Ù. struct TQuestRewardBase { struct _ITEMSET { int nItemID; int nItemCount; int nItemOptionTableID; }; }; struct TQuestReward : public TQuestRewardBase { UINT nIndex; // º¸»óÅ×À̺í À妽º UINT nStringIndex; // º¸»óÅ×ÀÌºí ½ºÆ®¸µ char cType; // º¸»óŸÀÔ 1À̸é Àüüº¸»ó / 2¸é ¼±Åú¸»ó char cSelectMax; // ¼±Åú¸»óÀϰæ¿ì ¸î°³±îÁö ¼±ÅÃÇÒ°ÍÀÎÁö. UINT nCoin; // º¸»ó±Ý¾× int nExp; // º¸»ó °æÇèÄ¡ int nQuestID; // Äù½ºÆ® ID int nQuestStep; // Äù½ºÆ® ¿Ï·á ½Ã ½ºÅÜ BYTE nClass; // º¸»ó Ŭ·¡½º _ITEMSET ItemArray[QUESTREWARD_INVENTORYITEMMAX]; _ITEMSET LevelCapItemArray[MAX_QUEST_LEVEL_CAP_REWARD]; int nMailID; int nFatigue; }; struct TQuestLevelCapReward : public TQuestRewardBase { UINT uIndex; char cType; char cClassID; _ITEMSET Items[MAX_QUEST_LEVEL_CAP_REWARD]; }; struct TCompleteEventQuest { short wCompleteCount; int nScheduleID; }; // Shop struct TShopItem { int nItemID; // »óÁ¡ ¾ÆÀÌÅÛ ¾ÆÀ̵ð int nCount; // »óÁ¡ ¾ÆÀÌÅÛ ¼ö·® int nMaxCount; // ¾ÆÀÌÅÛ ÃÖ´ë¼ö·® int nPrice; // ¾ÆÀÌÅÛ °¡°Ý int buyLimitCount; #if defined (PRE_ADD_COMBINEDSHOP_PERIOD) int nPeriod; #endif #if defined( PRE_ADD_LIMITED_SHOP ) int nShopLimitReset; #endif }; struct TShopTabData { int nTabID; std::vector vShopItem; // SHOPTABMAX TShopTabData() { Clear(); } void Clear() { nTabID = 0; vShopItem.clear(); } }; struct TShopData { int nShopID; // ¼¥ ¾ÆÀ̵ð (npc°¡ °¡Áö°í ÀÖ´Â ¾ÆÀ̵ð¿Í ºñ±³Çؼ­ ¿¬°á) std::vector vShopTabData; // SHOPITEMMAX TShopData() { nShopID = 0; } }; // Skill Shop struct TSkillShopItem { int nSkillID; // ½ºÅ³¾ÆÀ̵ð int nPrice; // ½ºÅ³ °¡°Ý }; struct TSkillShopData { int nShopID; // ¼¥ ¾ÆÀ̵ð (npc°¡ °¡Áö°í ÀÖ´Â ¾ÆÀ̵ð¿Í ºñ±³Çؼ­ ¿¬°á) TSkillShopItem SkillShopItem[SKILLSHOPITEMMAX]; // ÃÖ´ë 10°³¹Û¿¡ ¾ÈµÈ´Ù }; // Enchant const int ENCHANTITEMMAX = 5; struct TEnchantLevelData { int nItemID; char cLevel; #ifdef PRE_FIX_MEMOPT_ENCHANT int nNeedItemTableID; int nStateTableID; int nNeedCoin; #else char cEnchantProb; char cBreakRatio; char cMinDownLevel; char cMaxDownLevel; int nNeedItemID[ENCHANTITEMMAX]; int nNeedItemCount[ENCHANTITEMMAX]; int nNeedCoin; int nFailResultItemID; int nPotentialID; char cPotentialProb; int nProtectItemCount; #if defined(PRE_ADD_ENCHANTSHIELD_CASHITEM) int nShieldItemCount; // »óÀ§°­È­º¸È£Á©¸®¿ë(´Ù¿î±×·¹À̵åx) #endif #endif // PRE_FIX_MEMOPT_ENCHANT }; struct TEnchantData { int nEnchantID; char cCount; std::map pMapLevelData; }; #ifdef PRE_FIX_MEMOPT_ENCHANT struct TEnchantNeedItemData { char cEnchantProb; char cBreakRatio; char cMinDownLevel; char cMaxDownLevel; int nNeedItemID[ENCHANTITEMMAX]; int nNeedItemCount[ENCHANTITEMMAX]; float fUpStateRatio; int nFailResultItemID; int nProtectItemCount; #if defined(PRE_ADD_ENCHANTSHIELD_CASHITEM) int nShieldItemCount; // »óÀ§°­È­º¸È£Á©¸®¿ë(´Ù¿î±×·¹À̵åx) #endif }; #endif // PRE_FIX_MEMOPT_ENCHANT struct TPotentialDataItem { int nItemID; int nPotentailOffset; int nPotentialNo; int nProb; int nSkillID; int nSkillLevel; int nSkillUsingType; }; struct TPotentialData { int nPotentialID; int nTotalProb; std::vector pVecItemData; }; // Exchange struct TExchangeData { int nInvenIndex; // Àκ¥ À妽º short wCount; // ¸î°³ ³Ö¾ú´ÂÁö INT64 biSerial; }; #ifdef PRE_ADD_GACHA_JAPAN // gachapon japan struct TGachaponShopInfoByJob_JP { int nGachaponTableID; // °¡Ã­Æù Å×À̺í ID int nGachaponIndex; // °¡Ã­Æù ¼¥ À妽º. int nJobClassID; // ÀÌ °¡Ã­Æù¿¡¼­ µå¶øÇØÁÖ´Â ¾ÆÀÌÅÛµéÀÇ Á÷¾÷ int nPartsLinkDropTableID[ CASHEQUIPMAX ]; }; struct TGachaponData_JP { int nGachaponIndex; // °¡Ã­Æù ¼¥ À妽º. npc Å×ÀÌºí¿¡ ¾²ÀÎ À妽º¸¦ À̰ɷΠãÀ½. Å×À̺í À妽º ¾Æ´Ô. TGachaponShopInfoByJob_JP GachaponShopInfo[ CLASSKINDMAX ]; }; #endif // PRE_ADD_GACHA_JAPAN struct TCostumeMix { int nMinScore; int nDropID; }; //community //getsimple characterdata patialy enum type enum eReqCharacterPartialy { _REQCHARACTERPARTIALY_FRIEND, }; //Friend struct TFriendGroup:public TBoostMemoryPool { UINT nGroupDBID; WCHAR wszGroupName[FRIEND_GROUP_NAMELENMAX]; }; struct TFriend:public TBoostMemoryPool { UINT nFriendAccountDBID; INT64 biFriendCharacterDBID; UINT nGroupDBID; TCommunityLocation Location; WCHAR wszCharacterName[NAMELENMAX]; WCHAR wszGroupName[FRIEND_GROUP_NAMELENMAX]; WCHAR wszFriendMemo[FRIEND_MEMO_LEN_MAX]; #ifdef PRE_ADD_DOORS bool bMobileAuthentication; #endif //#ifdef PRE_ADD_DOORS }; //UserState enum eCummunityState //ÃÊ´ë ¹Þ´Â´Ù ¾È¹Þ´Â´Ù ÂÊÁö ¹Þ°Ú´Ù ¾È¹Þ°Ú´Ù µîµî { _COMMUNITY_NONE = 0, _COMMUNITY_MSG_PERMIT, //¸ðµç ¸Þ¼¼Áö ¹Þ¾ÆÈ¿~ _COMMUNITY_MSG_NOTPERMIT,//¸Þ¼¼Áö ¾È¹Þ¾ÆÈ¿~ ³ªÁ» ³»¹ö·Á µÎ»ï! }; struct sWorldUserState { WCHAR wszCharacterName[NAMELENMAX]; INT64 biCharacterDBID; //ÀÏ´ÜÀº Ȥ½¬³ª ÇØ¼­ ÈÊÈÊ int nChannelID; // int nMapIdx; int nLocationState; //eLocationState int nCummunityState; //eCummunityState }; //ServiceManager NoticeType enum eSMNoticeType { _NOTICETYPE_ALL = 0, _NOTICETYPE_WORLD, _NOTICETYPE_EACHSERVER, _NOTICETYPE_CHANNEL, _NOTICETYPE_ZONE, }; //VoiceChannelReqType enum eVoiceChannelReqType { _VOICECHANNEL_REQTYPE_PARTY, _VOICECHANNEL_REQTYPE_PVP, //¸Ó ÀÌ·±½ÄÀ¸·Î »ý±âÁö ¾ÊÀ»±î³ª.. //_VOICECHANNELTYPE_GUILD, //_VOICECHANNELTYPE_PRIVATE, }; //Invite PartyInfo struct TInvitePartyInfo { TPARTYID PartyID; int nMapIdx; BYTE cLimitLevelMin; #if defined( PRE_PARTY_DB ) #else BYTE cLimitLevelMax; #endif // #if defined( PRE_PARTY_DB ) BYTE cPartyMemberMax; BYTE cPartyMemberCount; BYTE cPartyAvrLevel; WCHAR wszPartyName[PARTYNAMELENMAX]; }; // PvP struct TPvPMapTable { UINT uiGameType; // PvPCommon::GameType std::vector vGameModeTableID; // PvPGameModeTableID std::vector vNumOfPlayerOption; // Àοø¼ö ¿É¼Ç bool bIsBreakInto; // ³­ÀÔ°¡´ÉFlag UINT uiItemUsageType; // PvPCommon::ItemUsageType bool bIsAllowItemDrop; // ¾ÆÀÌÅÛµå·Ó Flag bool bIsGuildBattleGround; // ±æµåÀü¿¡¼­ »ç¿ëÇÒ¼ö ÀÖ´ÂÁö Flag bool bIsReleaseShow; // ¸±¸®Áî¹öÀü¿¡¼­³ëÃâ LadderSystem::MatchType::eCode MatchType; // Function bool CheckMaxUser( const BYTE cMaxUser ) const { for( UINT i=0 ; i vWinCondition; std::vector vPlayTimeSec; UINT uiRespawnTimeSec; UINT uiRespawnNoDamageTimeSec; UINT uiRespawnHPPercent; UINT uiRespawnMPPercent; UINT uiWinXPPerRound; UINT uiLoseXPPerRound; UINT uiItemDropTableID; bool bIsLevelRegulation; bool bIsReleaseShow; // ¸±¸®Áî¹öÀü¿¡¼­³ëÃâ UINT uiMedalExp; UINT uiNumOfPlayersMin; UINT uiNumOfPlayersMax; std::vector vVictoryExp; std::vector vVictoryBonusRate; std::vector vDefeatExp; std::vector vDefeatBonusRate; LadderSystem::MatchType::eCode LadderMatchType; int iRewardItemID; int nFatigueConTime; int nFatigueConValue; int nFatigueConExp; int nFatigueConMedal; int iNeedInven; int iSkillSetting; bool bIsSelectableRegulation; bool bIsDefaultRegulation; int nBattleGroundTableID; bool bAllowedUserCreateMode; #if defined( PRE_ADD_RACING_MODE ) || defined( PRE_ADD_PVP_TOURNAMENT ) int nDefaultRewardItem; int nDefaultRewardValue; std::vector vRankRewardItem; std::vector vRankRewardValue; #endif // #if defined( PRE_ADD_RACING_MODE ) || defined( PRE_ADD_PVP_TOURNAMENT ) // Function bool CheckWinCondition( const UINT uiWinCondition ) const { if( vWinCondition.empty() ) return true; for( UINT i=0 ; i= uiNumOfPlayersMin && uiMaxUser <= uiNumOfPlayersMax); } }; struct TPvPGameStartConditionTable { UINT uiMinTeamPlayerNum; // ÃÖ¼Ò ½ÃÀÛ ÆÀ Àοø UINT uiMaxTeamPlayerDiff; // ÃÖ´ë ¾çÆÀ Àοø Çã¿ë ¼ö short Check( const UINT uiATeam, const UINT uiBTeam, const bool bRandomTeam ) const { // ÃÖ¼Ò ½ÃÀÛ ÆÀ Àοø °Ë»ç if( uiATeam < uiMinTeamPlayerNum || uiBTeam < uiMinTeamPlayerNum ) return ERROR_PVP_CANTSTART_LESS_MINTEAMPLAYER; if (!bRandomTeam) // ·£´ýÆÀÀÌ ¾Æ´Ñ °æ¿ì ó¸®ÇÑ´Ù. { // ÃÖ´ë ¾çÆÀ Àοø Çã¿ë ¼ö °Ë»ç UINT uiDiff = ::abs( static_cast(uiATeam-uiBTeam) ); if( uiDiff > uiMaxTeamPlayerDiff ) return ERROR_PVP_CANTSTART_MORE_MAXDIFFTEAMPLAYER; } return ERROR_NONE; } }; struct TPvPRankTable { UINT uiXP; #ifdef PRE_MOD_PVPRANK BYTE cType; //PvPCommon::RankTable ÂüÁ¶ BYTE cMinRange; //rate or rank BYTE cMaxRange; //rate or rank TPvPRankTable() { uiXP = 0; cType = PvPCommon::RankTable::InitValue; cMinRange = 0; cMaxRange = 0; } #endif //#ifdef PRE_MOD_PVPRANK }; struct TAppellationData { int nAppellationID; int nArrayIndex; int nColor; int nLevelLimit; int nType; #if defined( PRE_ADD_NEWCOMEBACK ) int nSkillItemID; #endif #if defined( PRE_MOD_APPELLATIONBOOK_RENEWAL) std::vector nUseCollectionBookIndex; #endif // #if defined( PRE_MOD_APPELLATIONBOOK_RENEWAL) }; // ¹Ì¼Ç ½Ã½ºÅÛ °ü·Ã struct TEventCondition { char cEvent; char cType[5]; int nParam[5]; char cOperator[5]; bool bCheckType; }; struct TMissionData { bool bActivate; int nType; // ¹Ì¼ÇŸÀÔ(eMissionType) int nMailID; int nRewardAppellation; int nRewardPoint; bool bIsAchieveNotice; TEventCondition GainCondition; TEventCondition AchieveCondition; }; struct TDailyMissionData { int nMailID; int nRewardAppellation; int nRewardPoint; TEventCondition AchieveCondition; int nCounterParam; char cCounterOperator; int nItemID; int nType; int nTypeParam; __time64_t tStartDate; #if defined(PRE_ADD_WEEKLYEVENT_MISSION_ENDTIME) __time64_t tEndDate; #endif // #if defined(PRE_ADD_WEEKLYEVENT_MISSION_ENDTIME) }; #if defined(PRE_ADD_REMOTE_QUEST) struct TRemoteQuestData { bool bActivate; int nIndex; int nQuestID; bool bPreQuestCheckType; std::vector nVecPreQuestCondition; TEventCondition GainCondition; }; #endif #if defined(PRE_ADD_ACTIVEMISSION) struct TActiveMissionData { int nIndex; bool bActivate; int nMailID; TEventCondition AchieveCondition; }; #endif // Collection const char CollectionAppellationMax = 10; struct TCollectionBookData { int nID; std::vector nVecAppellationArrayIndex; int nRewardAppellationArrayIndex; #if defined(PRE_MOD_APPELLATIONBOOK_RENEWAL) int nMailID[2]; // 0 - 50% ³Ñ°åÀ» ¶§ º¸³»ÁÙ ¸ÞÀÏ ID, 1- Īȣ Ä÷º¼Ç ¿Ï¼º½Ã º¸»ó MailID #endif //#if defined(PRE_MOD_APPELLATIONBOOK_RENEWAL) }; // TaxTable struct TTaxData { char cTaxType; // ¼¼±ÝÁ¾·ù (TaxType_PostTax) int nLevelStart; // ½ÃÀÛ ·¹º§ int nLevelEnd; // ³¡ ·¹º§ int nAmountStart; // ½ÃÀÛ±Ý¾× (°ñµå´ÜÀ§) int nAmountEnd; // ³¡±Ý¾× float fRate; // ¼¼À² int nTaxAmount; // ¼¼¾× }; // Seal const BYTE SEALENCHANTMAX = 16; // ³ë°­È­ºÎÅÍ 15°­±îÁö. struct TSealCountData { int nType1; int nType2; int nLevel[SEALENCHANTMAX]; char cSuccessRate[SEALENCHANTMAX]; }; // PCBang const BYTE PCParamMax = 2; struct TPCBangParam { int nParam[PCParamMax]; }; struct TPCBangData { char cType; // PCBang ÇýÅà Á¾·ù (ePCBangType) std::vector VecPCBangParam; std::vector VecPremiumPCBangParam; std::vector VecGoldPCBangParam; std::vector VecSilverPCBangParam; std::vector VecRedPCBangParam; }; // CashShop const BYTE COMMODITYITEMMAX = 5; const BYTE COMMODITYLINKMAX = 5; struct TCashCommodityData { int nSN; #if defined(_JP) std::string strJPSN; #endif // #if defined(_JP) BYTE cCategory; int nSubCategory; int nItemID[COMMODITYITEMMAX]; // ItemTable ¾ÆÀÌÅÛ ID int nLinkSN[COMMODITYLINKMAX]; // ¿¬°è»óǰ std::string strName; short wPeriod; // ±â°£ int nPrice; // °¡°Ý int nCount; // ±¸¸Å½Ã ÁÖ¾îÁö´Â °³¼ö int nPriority; // ij½Ã¼¥¿¡ Ç¥½ÃµÇ´Â ¿ì¼±¼øÀ§ bool bOnSale; // ÆÇ¸Å»óÅ bool bOnSaleReal; // ÁøÂ¥(?)ÆÇ¸Å»óÅ char cState; // HOT, NEWµî »óÅ ǥ½Ã¿ë bool bLimit; // ÇÑÁ¤ ÆÇ¸Å bool bReserveGive; // Àû¸³±Ý Á¦°ø ¿©ºÎ int nReserve; // ±¸¸Å½Ã ÁÖ¾îÁö´Â Àû¸³±Ý int nValidity; // À¯È¿±â°£ bool bReserveAble; // Àû¸³±ÝÀ¸·Î »ì¼ö ÀÖ´ÂÁö ¿©ºÎ bool bPresentAble; // ¼±¹° °¡´É ¿©ºÎ char cItemSort; // ¾ÆÀÌÅÛÁ¾·ù int nPriceFix; // Á¤°¡ bool bCartAble; // Àå¹Ù±¸´Ï¿¡ ´ãÀ» ¼ö ÀÖ´ÂÁö bool bVIPSell; // VIP Àü¿ë ÆÇ¸Å ¿©ºÎ int nVIPLevel; // VIP µî±Þ bool bAutomaticPay; // ÀÚµ¿°áÁ¦ ¿©ºÎ int nAutomaticPaySale; // ÀÚµ¿°áÁ¦ ÈÄ ÇÒÀÎÀû¿ë int nVIPPoint; // ±¸¸Å½Ã Áö±ÞÇÏ´Â VIPPoint int nOverlapBuy; // Áߺ¹±¸¸Å¹æÁö #if defined(PRE_ADD_CASH_REFUND) bool bNoRefund; // û¾à öȸ ºÒ°¡´É¿©ºÎ(true : ºÒ°¡´É) #endif #if defined(PRE_ADD_CASHSHOP_CREDIT) bool bCreditAble; // ¹ÌÄîºô¸µ int nCreditAbleLevel; // ¹ÌÄîºô¸µ Å©·¹µ÷·¹º§ #endif // #if defined(PRE_ADD_CASHSHOP_CREDIT) #if defined(PRE_ADD_SALE_COUPON) bool bUseCoupon; #endif //#if defined(PRE_ADD_SALE_COUPON) #if defined( PRE_ADD_NEW_MONEY_SEED ) bool bSeedAble; int nSeed; bool bSeedGive; #endif TCashCommodityData() { nSN=0; cCategory=0; nSubCategory =0; memset(nItemID, 0, sizeof(nItemID)); memset(nLinkSN, 0, sizeof(nLinkSN)); wPeriod=0; nPrice=0; nCount=0; nPriority=0; bOnSale=false; bOnSaleReal=false; cState=0; bLimit=false; bReserveGive=false; nReserve=0; nValidity=0; bReserveAble=false; bPresentAble=false; cItemSort=0; nPriceFix=0; bCartAble=false; bVIPSell=false; nVIPLevel=0; bAutomaticPay=false; nAutomaticPaySale=0; nVIPPoint=0; nOverlapBuy =0; #if defined(PRE_ADD_CASH_REFUND) bNoRefund = true; // ±âº» ºÒ°¡´É #endif #if defined(PRE_ADD_CASHSHOP_CREDIT) bCreditAble = false; nCreditAbleLevel = 0; #endif // #if defined(PRE_ADD_CASHSHOP_CREDIT) #if defined(PRE_ADD_SALE_COUPON) bUseCoupon = false; #endif // #if defined(PRE_ADD_SALE_COUPON) #if defined( PRE_ADD_NEW_MONEY_SEED ) bSeedAble = false; nSeed = 0; bSeedGive = false; #endif } }; struct TCashPackageData { int nSN; // ÆÐŰÁöÆÇ¸ÅSN std::vector nVecCommoditySN; TCashPackageData() { nSN = 0; nVecCommoditySN.clear(); } }; struct TCashLimitData { int nSN; // ÇÑÁ¤ÆÇ¸ÅÇÒ »óǰ SN time_t tStartDate; // _StartDate ½ÃÀÛÀÏ time_t tEndDate; // _EndDate Á¾·áÀÏ int nBuyAbleCount; // ij¸¯ÅÍ´ç ±¸¸Å°¡´ÉȽ¼ö #if defined(PRE_ADD_LIMITED_CASHITEM) int nLimitedSellCount; //°¹¼öÇÑÁ¤¾ÆÀÌÅÛ! #endif //#if defined(PRE_ADD_LIMITED_CASHITEM) }; struct TVIPData { int nVipID; // VIPTable¿¡¼­ÀÇ ID int nMonthItemSN; // ij½Ã ¾ÆÀÌÅÛ »óǰ ³Ñ¹ö (30ÀÏ °áÁ¦½Ã Çѹø ÁÖ±â) int nMailID[4]; // 0:¼­ºñ½º¸¸·á 7ÀÏÀü, 1:¼­ºñ½º¸¸·á 1ÀÏÀü, 2:¼­ºñ½º¸¸·á½Ã, 3:ÀÚµ¿°áÁ¦½Ã ij½Ã ºÎÁ·ÇÒ¶§ int nAutoPayItemSN; // ÀÚµ¿°áÁ¦ÇÒ¶§ °áÁ¦ÇÒ ¾ÆÀÌÅÛSN }; // DL Table struct TDLMapData { int nTotalRound; int nFloor; #if defined( PRE_ADD_CHALLENGE_DARKLAIR ) bool bChallengeDarkLair; #endif // #if defined( PRE_ADD_CHALLENGE_DARKLAIR ) }; struct TDLClearDataItem { int nLevelMin; int nLevelMax; int nRoundMin; int nRoundMax; int nRewardExperience; int nShowBoxCount; int nSelectBoxCount; char cTreasureBoxRatio[4]; int nRewardItemID[4]; int nReturnWorldSetID; int nReturnWorldGateID; int nRewardGP; }; struct TDLClearData { std::vector pVecClearItem; }; // Levelup Event struct TLevelupEvent { enum eEventType { Levelup = 1, // ÀÏ¹Ý ·¹º§¾÷À̺¥Æ® ShandaPromotion = 2, // ¼¢´Ù ÇÁ·Î¸ð¼ÇÀ̺¥Æ® CombackUser = 3, // º¹±ÍÀ¯ÀúÀ̺¥Æ® LevelupNew = 4, // ·¹º§¾÷À̺¥Æ® »õ°Å (Çѹø ¹ÞÀ¸¸é ´õÀÌ»ó ¸ø¹Þ´Â ¹öÁ¯) ComeBackUserInven = 5, // ±ÍȯÀÚ¿¡°Ô ¹Ù·Î ³Ö¾îÁÖ´Â ¾ÆÀÌÅÛ Å¸ÀÔ NewbieQuitReward = 6, //½Å±Ô À¯Àú Á¢¼Ó Á¾·á º¸»ó NewbieReconnectReward = 7, //½Å±Ô À¯Àú ÀçÁ¢¼Ó º¸»ó ComeBackUserQuitReward = 8, //±ÍȯÀÚ Á¢¼Ó Á¾·á º¸»ó }; int nLevel; // Player ij¸¯ÅÍÀÇ ·¹º§ char cClassID; // Ŭ·¡½º BYTE cJob; int nMailID; int nCashMailID; int nEventType; // eEventType TLevelupEvent() { nLevel = 0; cClassID = 0; nMailID = 0; nCashMailID = 0; cJob = 0; } }; struct TItemOptionTableData { int iEnchant; int iOption; int iPotential; TItemOptionTableData() { iEnchant = 0; iOption = 0; iPotential = 0; } }; #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM ) struct TReputeTableData { #if defined( PRE_ADD_REPUTATION_EXPOSURE ) int iMissionID; int iNpcPresentRepute1; // ¼±¹°1 Áö±Þ È£°¨µµ ´Þ¼º Á¶°Ç int iNpcPresentRepute2; // ¼±¹°2 Áö±Þ È£°¨µµ ´Þ¼º Á¶°Ç int iNpcPresentID1; // NpcPresentRepute1 ´Þ¼º ½Ã NPC°¡ ÁÖ´Â ¼±¹° 1 ItemID int iNpcPresentID2; // NpcPresentRepute1 ´Þ¼º ½Ã NPC°¡ ÁÖ´Â ¼±¹° 2 ItemID #else std::vector iQuestIDs; #endif // #if defined( PRE_ADD_REPUTATION_EXPOSURE ) int iMaxFavor; // È£ÀÇ ÃÖ´ëÄ¡ int iTakeFavorPerDay; // 1ÀÏ´ç ±ðÀ̴ ȣÀÇ ¼öÄ¡ int iMaxMalice; // ¾ÇÀÇ ÃÖ´ëÄ¡ int iAddMalicePerDay; // 1ÀÏ´ç ¿Ã¶ó°¡´Â ¾ÇÀÇ ¼öÄ¡ int iPresentIDArr[6]; // ¹ÞÀ» ¼ö ÀÖ´Â ¼±¹° ¸®½ºÆ® std::vector vFavorNpcID; // È£ÀÇ NPC ¸®½ºÆ® std::vector vMaliceNpcID; // ¾ÇÀÇ NPC ¸®½ºÆ® int iFavorGroupBomb; int iMaliceGroupBomb; int iMailID[NpcReputation::Common::MaxMailCount]; int iMailRand[NpcReputation::Common::MaxMailCount]; int iPlusItemID; int iPlusProb; int iUnionID; int iPresentPointArr[6]; // ¼±¹°¸¶´Ù ¹ÞÀ»¼ö ÀÖ´Â ¿¬ÇÕÆ÷ÀÎÆ® TReputeTableData() { #if defined( PRE_ADD_REPUTATION_EXPOSURE ) iMissionID = 0; iNpcPresentRepute1 = 0; iNpcPresentRepute2 = 0; iNpcPresentID1 = 0; iNpcPresentID2 = 0; #else #endif // #if defined( PRE_ADD_REPUTATION_EXPOSURE ) iMaxFavor = 0; iTakeFavorPerDay = 0; iMaxMalice = 0; iAddMalicePerDay = 0; iFavorGroupBomb = 0; iMaliceGroupBomb = 0; for( UINT i=0 ; i<_countof(iPresentIDArr) ; ++i ) iPresentIDArr[i] = 0; for( UINT i=0 ; i(0); IsCash = false; nSenderUIStringIndex = 0; nTitleUIStringIndex = 0; nTextUIStringIndex = 0; nPresentMoney = 0; memset( ItemIDArr, 0, sizeof(ItemIDArr) ); memset( ItemCountArr, 0, sizeof(ItemCountArr) ); memset( ItemSNArr, 0, sizeof(ItemSNArr) ); #if defined(PRE_SPECIALBOX) nKeepBoxReceive = 0; nKeepBoxType = 0; nKeepBoxLevelMin = 0; nKeepBoxLevelMax = 0; nKeepBoxClass = 0; #endif // #if defined(PRE_SPECIALBOX) } }; struct TStoreBenefitData { // ¾Æ·¡ÀÇ ¼ø¼­´Â StoreBenefit Å×À̺íÀÇ Á¤ÀÇ¿Í ¸ÂÃá °ÍÀ̱⠶§¹®¿¡ Àý´ë·Î ¼ø¼­°¡ ¹Ù²î¸é ¾ÈµÊ. enum eType { EnchantFeeDiscount = NpcReputation::StoreBenefit::EnchantFeeDiscount, RepairFeeDiscount = NpcReputation::StoreBenefit::RepairFeeDiscount, SellingPriceUp = NpcReputation::StoreBenefit::SellingPriceUp, BuyingPriceDiscount = NpcReputation::StoreBenefit::BuyingPriceDiscount, FishProficiencyUp = NpcReputation::StoreBenefit::FishProficiencyUp, CookProficiencyUp = NpcReputation::StoreBenefit::CookProficiencyUp, CultivateProficiencyUp = NpcReputation::StoreBenefit::CultivateProficiencyUp, Max = NpcReputation::StoreBenefit::Max, }; int iNpcID; eType Type; int aiFavorThreshold[ STORE_BENEFIT_MAX ]; int aiAdjustPercent[ STORE_BENEFIT_MAX ]; TStoreBenefitData( void ) : iNpcID( 0 ), Type( Max ) { memset( aiFavorThreshold, 0, sizeof(aiFavorThreshold) ); memset( aiAdjustPercent, 0, sizeof(aiAdjustPercent) ); } }; #endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM ) struct TShopPurchaseType { Shop::PurchaseType::eCode PurchaseType; int iPurchaseItemID; int iPurchaseItemValue; }; struct TCombinedShopTableData { TShopItem ShopItem; TShopPurchaseType PurchaseType[Shop::Max::PurchaseType]; Shop::PurchaseLimitType::eCode PurchaseLimitType; int iPurchaseLimitValue; #if defined(PRE_SAMPLEITEMNPC) int nSampleVersion; // »ùÇþÆÀÌÅÛ È¸Â÷ #endif //#if defined(PRE_SAMPLEITEMNPC) }; struct TMasterSystemDecreaseTableData { int iPupilLevel; int iPupilFavor; int iFavorUpDecreaseRespectPoint; int iFavorDownDecreaseRespectPoint; int iMasterSuccessMailID; int iMasterFailureMailID; int iPupilSuccessMailID; int iPupilFailureMailID; int GetDecreaseRespectPoint( int iFavorPoint ) { if( iFavorPoint >= iPupilFavor) return iFavorUpDecreaseRespectPoint; return iFavorDownDecreaseRespectPoint; } }; struct TMasterSystemGainTableData { int iFavorPoint; int iRepectPoint; }; #if defined( PRE_ADD_SECONDARY_SKILL ) struct TSecondarySkillTableData { int iSkillID; SecondarySkill::Type::eType Type; SecondarySkill::SubType::eType SubType; SecondarySkill::ExecuteType::eType ExecuteType; }; struct TSecondarySkillLevelTableData { int iSkillID; SecondarySkill::Grade::eType Grade; int iLevel; int iExp; int iNextID; int iParam; }; struct TSecondarySkillRecipeTableData { public: int iManufactureItemID[SecondarySkill::ManufactureSkill::MaxManufactureItemTypeCount]; int iMinExp[SecondarySkill::ManufactureSkill::MaxManufactureItemTypeCount]; int iMaxExp[SecondarySkill::ManufactureSkill::MaxManufactureItemTypeCount]; SecondarySkill::Grade::eType RequireGrade; int iRequireSkillLevel; int iToolItemID[SecondarySkill::ManufactureSkill::MaxToolItemCount]; int iMasterExp; int iStartExp; int iMaxTime; // ´ÜÀ§(ms) int iSuccessProbability; int iSuccessUpExp; int iRecipeUpExp; int iMaterialItemID[SecondarySkill::ManufactureSkill::MaxMaterialItemCount]; int iMaterialItemCount[SecondarySkill::ManufactureSkill::MaxMaterialItemCount]; int iSuccessCount; // °æÇèÄ¡·Î »ý»êµÉ ItemID ¾ò±â int GetManufactureItemID( int iExp, int iMaxValue ) { int iExpRate = static_cast(iExp/static_cast(iMaxValue)*100); for( int i=0 ; i= iMinExp[i] && iExpRate <= iMaxExp[i] ) return iManufactureItemID[i]; } _ASSERT_EXPR(0, L"[GetManufactureItemID] can not find ItemID"); return -1; } }; #endif // #if defined( PRE_ADD_SECONDARY_SKILL ) #ifdef PRE_ADD_CASHFISHINGITEM struct TFishingMeritInfo { int nRodItemID; bool bUseCashBait; INT64 biBaitSerial; int nBaitIndex; int nMeritReduceFishingTime; int nMeritSuccessRate; }; #endif //#ifdef PRE_ADD_CASHFISHINGITEM struct TFarmCultivateTableData { int iCultivateMaxTimeSec; int iMaxWater; int iConsumeWater; int iHarvestNeedItemID; int iHarvestDropRate[Farm::Max::HARVESTITEM_COUNT]; int iHarvestDropTableID; int iSkillPointPlant; // ¾¾¾Ñ½É±â ½Ã °æÇèÄ¡ int iSkillPointWater; // ¹°Áֱ⠽à °æÇèÄ¡ int iCatalystCount; // ÇÊ¿ä ¼ºÀåÃËÁøÁ¦ °³¼ö SecondarySkill::Grade::eType RequiredSkillGrade; int iRequiredSkillLevel; int iOverlap; }; struct TFishingTableData { int nMaxTime; #ifdef PRE_ADD_CASHFISHINGITEM int nAutoMaxTime; #endif //#ifdef PRE_ADD_CASHFISHINGITEM int nPullingTargetMin; int nPullingTargetMax; int nPullingTargetSpeed; int nPullingTargetUpTime; int nSkillPointSuccess; int nSkillPointFailure; int nSuccessProbability; int nSuccessDropTableID; }; struct TFishingPattern { int nPatternID; int nProbabillity; }; struct TFishingPointTableData { int nSecondarySkillClass; //³¬½Ãº¸Á¶½ºÅ³µî±Þ int nSecondarySkillLevel; //³¬½Ãº¸Á¶½ºÅ³·¹º§ int nRequireItemType1; int nRequireItemType2; TFishingPattern Pattern[Fishing::Max::FISHINGPATTERNMAX]; }; struct TFishingAreaTableData { int nMatchedMapID; int nMatchedFishingAreaID; int nFishingPointID; }; struct TJobTableData { char cJobNumber; char cBaseClass; char cParentJob; float afMaxUsingSP[ 5 ]; char cClass; }; struct TGlyphSkillData { int nGlyphID; int nGlyphType; int nSkillID; int nSkillLevelID; }; struct TGlyphSlotData { int nID; char cSlotID; char cLevelLimit; char cSlotType; bool IsCash; }; struct TGlyphChargeData { char cGlyphType; // 1: °­È­¹®Àå 2: ½ºÅ³¹®Àå 3: Ư¼ö½ºÅ³¹®Àå (eGlyphType) char cGlyphRank; // 1: ¸ÅÁ÷ 2: ·¹¾î 3: ¿¡ÇÈ 4: À¯´ÏÅ© (eItemRank) int nCharge; }; struct TCharmItem { #if defined(PRE_FIX_68828) int nCharmID; // ÂüÅ×À̺í ID #endif int nItemID; // ¾ÆÀÌÅÛ int nCount; // À¯Àú°¡ ȹµæÇÒ °³¼ö int nProb; // È®·ü int nPeriod; // ±â°£ int nAccumulationProb; int nGold; bool bMsg; }; struct TCharmItemData { int nCharmNo; // ¸Å·Â¾ÆÀÌÅÛ ¹øÈ£ std::vector CharmItemList; }; const BYTE CharmItemKeyMax = 5; struct TCharmItemKeyData { int nCharmItemID; // »óÀÚ ¾ÆÀÌÅÛ ¾ÆÀ̵ð std::vector nKeyList; }; struct TCharmCountData { int nID; int nMin; int nMax; }; #if defined (PRE_ADD_CHAOSCUBE) struct TChaosStuffItem { int nItemID; int nCount; int nChaosNo; }; struct TChaosResultItem { int nItemID; // ¾ÆÀÌÅÛ int nCount; // À¯Àú°¡ ȹµæÇÒ °³¼ö int nProb; // È®·ü int nPeriod; // ±â°£ int nAccumulationProb; int nGold; bool bMsg; }; struct TChaosItemData { int nChaosNo; std::vector ChaosItemList; }; #endif // #if defined (PRE_ADD_CHAOSCUBE) //ServerMonitor enum eServerMonitorLevel { SERVERMONITOR_LEVEL_NONE = 0, SERVERMONITOR_LEVEL_MONITOR, //µ¿Á¢Á¤º¸¿Í ¼­¹öÀÇ»óÅ SERVERMONITOR_LEVEL_ADMIN, //µ¿Á¢Á¤º¸¿Í ¼­¹ö»óÅ ¹× ÇÁ·Î¼¼½º ½ÃÀÛ¸¸ °¡´É SERVERMONITOR_LEVEL_SUPERADMIN, //µ¿Á¢Á¤º¸¿Í ¼­¹ö»óÅ ¹× ¸ðµçÄÁÆ®·Ñ °¡´É }; enum eServerMonitorNotice { SERVERMONITOR_UPDATENOTICE_CHANNELINFO, SERVERMONITOR_UPDATENOTICE_SERVERINFO, SERVERMONITOR_UPDATENOTICE_MERITINFO, SERVERMONITOR_UPDATENOTICE_WOLRDINFO, }; enum eSIDConnectionType { SID_CONNECTION_TYPE_LOG = 1, SID_CONNECTION_TYPE_DB, }; struct TPromotionData { int nID; int nConditionType; //ePromotionConditionType int nConditionValue; int nPromotionType; //ePromotionType int nRewardValue; //Percent }; struct TUserPromotionData { int nType; //ePromotionType int nValue; //Percent }; struct TSchedule { char cHour; char cMinute; int nCycle; }; struct TGuildLevel { int nLevel; int nReqGold; int nReqGuildPoint; int nDailyGuildPointLimit; int nDailyMissionPointLimit; bool bApplicable; }; struct TGuildWarPoint { int nRank; int nRewardGuildPoint; }; struct TGuildWarMapInfo { UINT uiMapTableID; char cGuildWarUseMonth; }; struct TGuildWarEventInfo { //char cEventStep; __time64_t tBeginTime; __time64_t tEndTime; }; // ±æµåÀü º¸»ó ¸ÞÀϰü·Ã struct TGuildWarRewardData { char cType; // º¸»ó ŸÀÔ..eGuildWarRewardType char cClass; // Ŭ·¡½º(¿ö¸®¾î,¾ÆÃ³, ¼Ò¼­¸®½º, Ŭ·¡¸¯) int nMailID; // ¿ìÆí ¾ÆÀ̵ð int nPresentID; // ¼±¹°ÇÔ ¾ÆÀ̵ð int nGuildFestivalPoint; // º»¼±¿¡¼­ Áö±ÞÇÒ ±æµåÃàÁ¦Æ÷ÀÎÆ® int nGuildPoint; // º»¼±¿¡¼­ Áö±ÞÇÒ ±æµåÆ÷ÀÎÆ® }; struct TPeriodQuestDate { int nPeriodType; __time64_t tAssignDate; }; struct TExchangeTrade { int nItemID; int nCategoryType; int nGroupID; int ExchangeType; }; struct TPvPMissionRoom { int nItemID; int nGroupID; int nMapID; int nModeID; int nWinCondition; int nPlayTime; int nMaxPlayers; int nStartPlayers; int nRoomNameIndex; bool bDropItem; #ifdef PRE_ADD_COLOSSEUM_BEGINNER int nChannelType; #endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER }; typedef std::vector TVecPvPMissionRoom; struct TGhoulConditionData { int nItemID; int nItemIdx; int nPlayerMaxNum[PvPCommon::Common::GhouConditionColCount]; int nGhoulCount[PvPCommon::Common::GhouConditionColCount]; int nMatchingMutationGroupID[PvPCommon::Common::GhouConditionColCount]; }; struct TMonsterMutationGroup { int nGroupID; int nGourpIdx; int nMonsterID[PvPCommon::Common::MonsterMutationColCount]; int nProbability[PvPCommon::Common::MonsterMutationColCount]; }; struct TMonsterMutationData { int nMutationID; int nMutationIdx; int nMutationActorID; int nMutationHP; int nMutationStrPMax; int nMutationStrMMax; int nMutationDefP; int nMutationDefM; int nMutationStiff; int nMutationStiffResis; int nMutationCriticalResis; int nMutationStunResis; int nMutationWeaponIdx1; int nMutationWeaponIdx2; int nMutationSkillTableID; int nMutationSuperArmor; int nSizeMin; int nSizeMax; int nMoveSpeed; }; struct TMonsterMutationSkill { int nMonsterID; int nMonsterIdx; int nMonsterSkillIndex[PvPCommon::Common::MonsterMutationSkillColCount]; int nMonsterSkillLevel[PvPCommon::Common::MonsterMutationSkillColCount]; }; struct TOccupationModeInfo { int nVictoryCondition[PvPCommon::Common::MaximumVitoryCondition]; //PvPCommon::BattleGroundVictoryState int nVictoryParam[PvPCommon::Common::MaximumVitoryCondition]; //PvPCommon::BattleGroundVictoryState int nBossID[PvPCommon::TeamIndex::Max]; //»ý¼ºº¸½º¾ÆÀ̵ð int nBossSpawnAreaID[PvPCommon::TeamIndex::Max]; //º¸½º»ý¼º½Ã ½ºÆùÀ§Ä¡ }; struct TBattleGourndModeInfo { int nID; int nWaitingMin; int nFinishingMin; int nPvPSkillPoint; int nMaximumResourceLimit; int nAllOcuupationBonusGain; int nOccupationBonusGain[PvPCommon::Common::MaximumCapturePosition]; int nCaptureScore; int nStealScore; int nKillScore; int nClimaxTime; int nClimaxRespawnTime; TOccupationModeInfo ModeInfo; }; struct TPositionAreaInfo { int nID; int nMapID; int nPvPModeID; int nAreaID; int nGainResourceTermTick; //Á¡·É½Ã ȹµæÅÒ int nGainResource; //ȹƯÅҽà ȹµæ·® int nRequireTryTick; //ȹµæ½Ãµµ½Ã Ŭ¸¯»óÅÂÁö¼Ó À¯ÁöÇÊ¿ä½Ã°£ int nCompleteOccupationTick; //Ŭ¸¯¿Ï·áÈÄ Á¡·É±Ç ³Ñ¾î°¡±â ÀüÀÇ ´ë±â½Ã°£ int nBonusBuffID; //Ŭ¶óÀ̸·½º~ int nClimaxGainTermTick; int nClimaxGainVal; int nClimaxTryTick; int nClimaxCompleteOccupationTick; }; struct TBattleGroundEffectValue { int nSkillID; int nSkillLevel; int nNeedSkillPoint; //ȹµæ½ÃÇÊ¿äÆ÷ÀÎÆ® int nUseResPoint; //½ºÅ³»ç¿ë½Ã ¼Ò¸ð Á¡·ÉÀü Æ÷ÀÎÆ® std::string strEffectValue[PvPCommon::Common::MaximumEffectCount]; int nEffectValueDuration[PvPCommon::Common::MaximumEffectCount]; //int nMonsterID; //int nSummonDist; std::string strActionName; int nCoolTime; void Reset() { nSkillID = 0; nSkillLevel = 0; nNeedSkillPoint = 0; //ȹµæ½ÃÇÊ¿äÆ÷ÀÎÆ® nUseResPoint = 0; //½ºÅ³»ç¿ë½Ã ¼Ò¸ð Á¡·ÉÀü Æ÷ÀÎÆ® for (int i = 0; i < PvPCommon::Common::MaximumEffectCount; i++) { strEffectValue[i].clear();; nEffectValueDuration[i] = 0; } //nMonsterID = 0; //nSummonDist = 0; strActionName.clear(); nCoolTime = 0; } }; struct TBattleGroundSkillInfo { int nSkillID; int nSkillMaxLevel; int nSkillType; //CDnSkill::SkillTypeEnum //Á¡·ÉÀü ½ºÅ³Àº ½ºÅ³Å¸ÀÔ¿¡ ±×´Ú ¿µÇâÀ» ¹ÞÁö ¾ÊÁö¸¸ Ãß°¡È®Àå½Ã ÇÊ¿äÇÒ±î ÇØ¼­ ÀоîµÒ int nSkillDurationType; //CDnSkill::DurationTypeEnum int nSkillTargetType; //CDnSkill::TargetTypeEnum int nEffectType[PvPCommon::Common::MaximumEffectCount]; int nEffectApplyType[PvPCommon::Common::MaximumEffectCount]; int nProcess; //ÇÁ·Î¼¼½ºÅ¸ÀÔÀº Çϳª¸¸ »ç¿ë int nCanDuplicate; //Áßø°¡´É? }; struct TBattleGroundSkill { }; struct TUnionReputeBenefitData { int nItemID; int nPeriod; int nBenefitType[NpcReputation::Common::MaxBenefitCount]; int nBenefitNum[NpcReputation::Common::MaxBenefitCount]; }; struct TGuildMarkData { int nItemID; int nType; bool bCash; bool bMarkOnly; bool bMarkView; }; struct TPlayerCommonLevelTableInfo { int iFatigue10000Ratio; // 10000¹èÀ² float fMasterGainExp; //int nMasterGainItemID; //int nMasterGainItemCount; float fAddGainExp; float fDefense; float fCritical; float fFinalDamage; #if defined(PRE_ADD_TALISMAN_SYSTEM) int iTalismanCost; // Å»¸®½º¸¸ ÀåÂø ÇØÁ¦, À§Ä¡±³È¯ ºñ¿ë #endif }; struct TMasterSysFeelTableInfo { int nMinFeel; int nMaxFeel; int nAddExp; //(%°ªÀÓ) }; struct TGlobalEventData { int nItemID; int nCollectItemID; int nScheduleID; int nCollectTotalCount; int nNoticeCount[MAX_NOTICE_WORLDEVENT]; bool bCheckNotice[MAX_NOTICE_WORLDEVENT]; time_t tCollectStartDate; time_t tCollectEndDate; time_t tRewardDate; }; struct TEveryDayEventData { int nEventID; int nEventOnOff; int nSquenceDateCount; int nMailID; int nCashMailID; int nNumber; time_t tStartDate; time_t tEndDate; }; enum eDBJobSystem //g_szDBJobSystem { DBJOB_GUILDWAR_INIT = 0, // ±æµåÀü ÃʱâÈ­ DBJOB_GUILDWAR_STATS, // ±æµåÀü Åë°è DBJOB_SYSTEM_MAX, }; enum eDBJobSystemStatus { JOB_STATUS_RESERVE, // ¿¹¾à JOB_STATUS_COMPLETED, // ¿Ï·á JOB_STATUS_DOING, // ½ÇÇàÁß JOB_STATUS_FAIL, // ½ÇÆÐ }; struct TGuildRewardItemData { int nItemID; // ±æµåº¸»óÅ×ÀÌºí¿¡ ÀÖ´Â ¾ÆÀ̵ð short nNeedGuildLevel; // ±¸ÀÔÇϱâÀ§ÇÑ ±æµå·¹º§ int nNeedGold; // ±¸ÀÔÇϱâÀ§ÇÑ °ñµå int nItemType; // ±æµåº¸»ó¾ÆÀÌÅÛ Å¸ÀÔ int nTypeParam1; int nTypeParam2; bool bCheckInven; // ÀÌ¹Ì ±¸ÀÔÇѰÇÁö üũ bool bEternity; // 0:±â°£Á¦ 1:¿µ±¸ int nPeriod; // ±â°£ bool bCheckMaster; // ¸¶½ºÅÍüũ ¿©ºÎ int nCheckType; // ÇÊ¿ä Á¶°Ç üũ(0:NONE 1:ITEMID 2:±æµå¸¶Å© int nCheckID; // ÇÊ¿äÇÑ ÀÌÀü ¾ÆÀÌÅÛ¾ÆÀ̵ð }; struct TExpData { int nExperience; int nEventExperience; int nPcBangExperience; int nVIPExperience; int nPromotionExperience; int nItemExperience; int nGuildExp; TExpData() { nExperience = 0; nEventExperience = 0; nPcBangExperience = 0; nVIPExperience = 0; nPromotionExperience = 0; nItemExperience = 0; nGuildExp = 0; } void set(float Exp, float EventBonusExp = 0, float PcBangExp = 0, float VIPExp = 0, float PromotionBonusExp = 0, float ItemExp = 0, float GuildExp = 0) { nExperience = (int)Exp; nEventExperience = (int)EventBonusExp; nPcBangExperience = (int)PcBangExp; nVIPExperience = (int)VIPExp; nPromotionExperience = (int)PromotionBonusExp; nItemExperience = (int)ItemExp; nGuildExp = (int)GuildExp; } }; #if defined(PRE_ADD_SALE_COUPON) struct TSaleCouponData { int nItemID; // ÄíÆù ID int nUseItemSN[MAX_SALE_USEITEM]; // ÄíÆùÀÌ Àû¿ëµÉ ¾ÆÀÌÅÛ SN }; #endif #if defined( PRE_PARTY_DB ) namespace Party { struct QueryOutPartyType { enum eCode { Normal = 0, Disconnect, Kick, EternityKick, }; }; struct AddPartyAndMemberGame { Party::Data PartyData; UINT nKickedMemberList[PARTYKICKMAX]; INT64 biCharacterDBID[PARTYMAX]; UINT nSessionID[PARTYMAX]; #if defined( PRE_ADD_NEWCOMEBACK ) bool bCheckComebackAppellation[PARTYMAX]; #endif }; struct PartyMemberVillageData { UINT nAccountDBID; INT64 biCharacterDBID; BYTE cMemberIndex; BYTE cVoiceAvailable; #if defined( PRE_ADD_NEWCOMEBACK ) bool bCheckComebackAppellation; #endif UINT nMutedList[PARTYCOUNTMAX]; }; struct AddPartyAndMemberVillage { Party::Data PartyData; UINT nVoiceChannelID; WCHAR wszPartyName[PARTYNAMELENMAX]; UINT nKickedMemberList[PARTYKICKMAX]; PartyMemberVillageData MemberData[PARTYMAX]; }; }; #endif // #if defined( PRE_PARTY_DB ) #if defined( PRE_ADD_NAMEDITEM_SYSTEM ) struct TNamedItemData { int nItemID; // ³×Àӵ徯ÀÌÅÛ¾ÆÀ̵ð int nMaxCount; // ÃÖ´ë °¹¼ö int nSwapItemID; // ´ëüÇÒ ¾ÆÀÌÅÛ¾ÆÀ̵ð }; namespace EffectSkillNameSpace { struct SearchType { enum eType { ItemType = 0, ItemID, SkillID, }; }; struct BuffType { enum eType { Partybuff = 0, SelfBuff, }; }; struct ShowEffectType { enum eType { NONEEFFECT = 0, BUFFEFFECT, SPELLEFFECT, }; }; }; #endif #ifdef PRE_ADD_EXCHANGE_POTENTIAL struct TPotentialTransferData { int nItemID; int nExtractItemLevel; int nExtractItemRank; int nInjectItemLevel; int nInjectItemRank; int nConsumptionCount; int nMainType; int nSubType; }; #endif //#ifdef PRE_ADD_EXCHANGE_POTENTIAL #if defined(PRE_ADD_INSTANT_CASH_BUY) const int CashBuyShortcutMax = 10; struct TCashBuyShortcutData { int nType; int nAllowMapTypes; int nShow; std::vector nSNList; }; #endif // #if defined(PRE_ADD_INSTANT_CASH_BUY) #if defined(PRE_ADD_EXCHANGE_ENCHANT) struct TExchangeEnchantData { BYTE cRank; // ¾ÆÀÌÅÛ µî±Þ BYTE cLevelLimit; // Á¦ÇÑ ·¹º§ BYTE cEnchantLevel; // °­È­ ·¹º§ int nNeedCoin; // ¼ö¼ö·á int nNeedItemID1; // ÇÊ¿ä¾ÆÀÌÅÛ1 short wNeedItemCount1; // ÇÊ¿ä¾ÆÀÌÅÛ Ä«¿îÆ®1 int nNeedItemID2; // ÇÊ¿ä¾ÆÀÌÅÛ2 short wNeedItemCount2; // ÇÊ¿ä¾ÆÀÌÅÛ Ä«¿îÆ®2 }; #endif //#if defined(PRE_ADD_EXCHANGE_ENCHANT) #if defined( PRE_WORLDCOMBINE_PARTY ) namespace WorldCombineParty { enum eType { MAXSKILLCOUNT = 2, }; struct WrldCombinePartyData { BYTE cIndex; // À妽º BYTE cGroupIndex; // ±×·ìÀ妽º WCHAR wszPartyName[PARTYNAMELENMAX]; int nWorldMap; // ¿ùµåÁ¸ int nTargetMap; // Ÿ°Ù¸Ê(±âÁذª) ePartyType PartyType; // ÆÄƼŸÀÔ BYTE cPartyMemberMax; int nItemID; // ÀÔÀå±Ç¾ÆÀÌÅÛ TDUNGEONDIFFICULTY Difficulty; TPARTYITEMLOOTRULE ItemLootRule; //ePartyItemLootRule ÂüÁ¶ TITEMRANK ItemRank; //¾ÆÀÌÅÛ·©Å©(·çÆ®·ê±âȹÂüÁ¶) BYTE cUserLvLimitMin; //¹Î¸Æ½º°ªÀÌ ÀÖ´Ü´Ù. int iBitFlag; int nSkillID[MAXSKILLCOUNT]; // ½ºÅ³¾ÆÀ̵ð }; } #endif #if defined(PRE_ADD_PCBANG_RENTAL_ITEM) struct TPcBangRentItem { int nItemID; BYTE cLevelStart; BYTE cLevelEnd; BYTE cClassID; BYTE cJob; BYTE cGrade; int nItemOption; }; #endif #if defined( PRE_PRIVATECHAT_CHANNEL ) struct TPrivateChatChannelInfo { INT64 nPrivateChatChannelID; WCHAR wszName[PrivateChatChannel::Common::MaxNameLen]; INT64 biMasterCharacterDBID; int nMemberCount; int nPassWord; }; struct TPrivateChatChannelMember { time_t tJoinDate; UINT nAccountDBID; INT64 biCharacterDBID; bool bMaster; WCHAR wszCharacterName[NAMELENMAX]; }; struct TPrivateMemberDelServer { INT64 nPrivateChatChannelID; INT64 biCharacterDBID; WCHAR wszCharacterName[NAMELENMAX]; }; #endif #if defined(PRE_ADD_WEEKLYEVENT) namespace WeeklyEvent { struct TWeeklyEventData { int nStartTime; int nEndTime; BYTE cRaceType; // eRaceType BYTE cClassType; // eClass int nEventType; int nValue; // %°ª }; struct TWeeklyEvent { int nDayOfWeek; // eDayType std::vector VecEventData; }; enum eDayType { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7, }; enum eRaceType { Player = 1, Monster = 2, }; enum eEventType { Event_1 = 1, // 1. hp»ó½Â ¹× Ç϶ô Event_2 = 2, // 2. °ø°Ý·Â °­È­ ¹× ¾àÈ­ Event_3 = 3, // 3. ¹æ¾î·Â °­È­ ¹× ¾àÈ­ Event_4 = 4, // 4. °­È­ È®·ü Áõ°¡ Event_5 = 5, // 5. °æÇèÄ¡ Áõ°¡ Event_6 = 6, // 6. ÆÄƼÀ¯Áö °æÇèÄ¡ Áõ°¡ Event_7 = 7, // 7. Ä£±¸ °æÇèÄ¡ Áõ°¡ (ÀýÄ£¾Æ´Ô, ¼­·ÎÄ£±¸) Event_8 = 8, // 8. È£°¨µµ Áõ°¡ Event_9 = 9, // 9. ¿¬ÇÕ Æ÷ÀÎÆ®È¹µæ·® Áõ°¡ Event_10 = 10, // 10. ¾ÆÀÌÅÛ µå¶ø·ü Áõ°¡ }; } #endif // #if defined(PRE_ADD_WEEKLYEVENT) #if defined( PRE_ADD_TOTAL_LEVEL_SKILL ) namespace TotalLevelSkill { struct TTotalSkillLevelTable { int nSkillID; int nTotalLevelLimit; int nUseLevelLimit; int nSkillType; }; struct TTotalSkillBlowTable { int nSkillID; int nBlowID; float fBlowValue; int nBlowValue; // ³óÀå ¾ÆÀÌÅÛ ¾ÆÀÌµð‹š¹®¿¡ »ç¿ë }; struct TTotalSkillSlotTable { int nSlotIndex; int nLevelLimit; bool bCash; }; } #endif #if defined(PRE_SPECIALBOX) struct TProvideItemData { int nCashSN; int nItemID; int nCount; int nSealCount; int nOption; }; struct TKeepBoxProvideItemData { int nType; std::vector VecProvideItem; }; #endif // #if defined(PRE_SPECIALBOX) #ifdef PRE_ADD_JOINGUILD_SUPPORT struct TGuildSupportData { int nID; int nJoinMinLevel; //ÃÖÃʱæµå°¡ÀԽà ÃÖ¼Ò·¹º§ int nJoinMaxLevel; //ÃÖÃʱæµå°¡ÀԽà ÃÖ´ë·¹º§ int nFirstJoinMailID; //ÃÖÃʰ¡ÀԽà º¸»ó¸ÞÀϾÆÀ̵ð int nMaxLevelGuildSupportMailID; //ÃÖÃʰ¡ÀÔÇÑ ±æµå¿¡¼­ ¸¸·¦½Ã º¸»ó¾ÆÀ̵ð }; #endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT #if defined( PRE_FIX_67546 ) struct TChannelDBInfo { int nDBConnectionID; BYTE cThreadID; }; struct TDBConnectionInfo { int nThreadCount[THREADMAX]; }; #endif #if defined( PRE_WORLDCOMBINE_PVP ) struct TWorldPvPMissionRoom { int nItemID; int nMapID; BYTE cModeID; int nWinCondition; int nPlayTime; BYTE cMaxPlayers; int nStartPlayers; int nRoomNameIndex; bool bDropItem; USHORT unRoomOptionBit; WorldPvPMissionRoom::Common::eReqType eWorldReqType; int nMinLevel; int nMaxLevel; int nChannelType; WCHAR wszRoomName[PARTYNAMELENMAX]; int nRoomPW; }; struct TWorldPvPRoomDBData { int nDBRoomID; int nWorldID; int nServerID; int nRoomID; BYTE cModeID; WCHAR wszRoomName[PARTYNAMELENMAX]; BYTE cMaxPlayers; int nMapID; int nWinCondition; UINT nPlayTimeSec; bool bBreakIntoFlag; bool bDropItem; bool bRegulationFlag; bool bObserverFlag; bool bRandomFlag; BYTE cMinLevel; BYTE cMaxLevel; int nPassWord; int nRoomMemberCount; BYTE cChannelType; }; typedef std::vector TVecWorldPvPMissionRoom; #endif #if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD) struct TBonusDropTable { int nIndex; int nMapID; //¸ÊID int nDropType; int nNeedItemID[3]; //ÇÊ¿äÇÑ ¿­¼è ¾ÆÀÌÅÛ ID int nDropItemGroupID[3]; //µå¶øµÉ µå¶ø¾ÆÀÌÅÛ±×·ìID }; #endif // #if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD) namespace ActozCommon { struct CharacterStatus { enum eCharacterStatus { Revive = 0, Create = 0, Delete = 1, }; }; struct UpdateType { enum eUpdateType { Login = 1, Logout = 2, Levelup = 3, Sync = 4, }; }; }; #if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD) struct TItemDropEnchantData { int nIndex; //IDX int nDropID; // ItemDropTableÀÇ ID¿Í ¸ÅĪµÇ´Â °ª int nEnchantCount; //ÀÎæƮ°¡ ¸î°³ÀÎÁö Ä«¿îÆ® int nEnchantOption[20]; //ÀÎæƮ Á¤º¸ int nEnchantProb[20]; //ÀÎæƮ°¡ ¼±ÅÃµÉ È®·ü }; #endif // #if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD) #if defined( PRE_ALTEIAWORLD_EXPLORE ) struct TAlteiaWorldMapInfo { int nIndex; int nMapID; TDUNGEONDIFFICULTY Difficulty; }; #endif // #if defined( PRE_ALTEIAWORLD_EXPLORE ) #if defined( PRE_ADD_STAMPSYSTEM ) namespace StampSystem { struct ChallengeType { enum eType { DailyQuest = 1, DailyMission = 2, }; }; struct RewardCount { enum eCount { Day3 = 3, Day5 = 5, }; }; struct TStampChallenge // ½ºÅÆÇÁ µµÀü°úÁ¦ { BYTE cType; std::set setAssignmentID; // µµÀü°úÁ¦ ¸ñ·Ï int nMailID4; // 3ÀÏ º¸»ó int nMailID7; // 5ÀÏ º¸»ó }; struct TStampTableData // ½ºÅÆÇÁ Å×À̺í { INT64 biStartTime; std::vector vChallengeList; }; } #endif // #if defined( PRE_ADD_STAMPSYSTEM ) #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL) struct TPrevPotentialData { int nItemID; //¾ÆÀÌÅÛ ID INT64 nSerial; //½Ã¸®¾ó char cPotential; //ÀÌÀü ÀáÀç·Âµ¥ÀÌÅÍ char cOption; //ÀÌÀü ÀáÀç·Âµ¥ÀÌÅÍ char cNowPotential; //»õ·Î ºÎ¿©µÈ ÀáÀç·Â char cPotentialMoveCount; //(ÀÌÀü)ÀáÀç ÀÌÀü Ä«¿îÆ® INT64 nPotentialItemSerial; //ÀáÀç·Â ºÎ¿©¿¡ »ç¿ëÇÑ ÄÚµå ½Ã¸®¾ó int nPotentialItemID; //ÀáÀç·Â ºÎ¿©¿¡ »ç¿ëÇÑ ¾ÆÀÌÅÛ ID }; #endif // #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL) struct TEffectItemData { int nItemSN; int nItemID; int nCount; bool bFail; INT64 nGiftDBID; }; #if defined(PRE_ADD_TALISMAN_SYSTEM) struct TTalismanData { int nTalismanID; int nType; int nPeriod; }; struct TTalismanSlotData { bool bService; int nLevel; int nAmount; int nItem; int nNeedItemCount; float fEfficiency; int nType; }; #endif #if defined( PRE_PVP_GAMBLEROOM ) struct TPvPGambleRoomData { int nRoomIndex; bool bRegulation; BYTE cGambleType; int nPrice; }; struct TPvPGambleRoomWinData { INT64 biCharacterDBID; int nPrice; }; #endif // #if defined( PRE_PVP_GAMBLEROOM ) #if defined(PRE_ADD_EQUIPLOCK) struct TDBLockItemInfo { BYTE cItemCode; BYTE cItemSlotIndex; INT64 biItemSerial; EquipItemLock::TLockItem ItemData; }; #endif // #if defined(PRE_ADD_EQUIPLOCK) #if defined( PRE_ADD_STAGE_WEIGHT ) struct TStageWeightData { float fHPRate; float fAttackRate; float fSuperArmorRate; float fItemDropRate; }; #endif // #if defined( PRE_ADD_STAGE_WEIGHT ) #if defined( PRE_ADD_CHARACTERCHECKSUM ) struct CheckSumReason { enum eReason { LogoutCharacter = 1, C2C_KeepGameMoney = 2, C2C_TransferGameMoney = 3, }; }; #endif // #if defined( PRE_ADD_CHARACTERCHECKSUM ) #if defined(PRE_ADD_STAGECLEAR_TIMECHECK) namespace StageClearCheckTime { enum eCheckMinTime // ÃÖ¼Ò Å¬¸®¾î ŸÀÓ { CheckMinTime = 60 * 1000, // 1ºÐ }; enum eAbuseCount // Áõ°¡ÇÒ AbuseCount°ª { AbuseCount = 10, }; // CheckTimeÀ» »ç¿ëÇÏÁö ¾ÊÀ» ¸Ê(º¸½º¸ÊID¸¦ ±âÁØÀ¸·Î ÆÇº°ÇÑ´Ù struct IgnoreMapIndex { enum eIgnoreMapIndex { MAP_CHAOSE_FIELD_BossA = 15157, //È¥µ·ÀÇ Æ´ ÆÄ¸£¸¶ MAP_CHAOSE_FIELD_32Lv_BossA = 15167, //È¥µ·ÀÇ Æ´ ¹ÙÀ̶ó MAP_CHAOSE_FIELD_24Lv_BossA = 15174, // È¥µ·ÀÇ Æ´ Ä«¸»¶ó }; }; }; #endif // #if defined(PRE_ADD_STAGECLEAR_TIMECHECK)