DragonNest/Server/ServerCommon/DNServerDef.h
2024-12-19 09:48:26 +08:00

4104 lines
No EOL
95 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 <TChannelInfo> 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 <TVillageInfo> 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<int, TChannelInfoEx> 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<int> 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<int> 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<int>().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<int> 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<TPetLevelDetail> 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<TSkillLevelData> 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<TALK_ANSWER> Answers;
};
// key - ¹®´Ü½ºÆ®¸µÀ妽º, second - ¹®´Ü
typedef std::map<std::wstring, TALK_PARAGRAPH> TALK_PARAGRAPH_MAP;
typedef TALK_PARAGRAPH_MAP::iterator TALK_PARAGRAPH_MAP_IT;
// key - ´ë»çxml ÆÄÀÏ À̸§, second - ´ë»çÀüü
typedef std::map<std::wstring, TALK_PARAGRAPH_MAP> TALK_MAP;
typedef TALK_MAP::iterator TALK_MAP_IT;
#include <set>
// key - ¹®´ÜÀÀ´ä½ºÆ®¸µÀ妽º (´ÜÁö Ŭ¶óÀÌ¾ðÆ® ´ë»ç¿äû ¹«°á¼º üũ ¿À·ù¸Þ½ÃÁö¸¦ ¸·´Â ¿ëµµ)
typedef std::set<std::wstring> TALK_ANSWER_SET;
typedef TALK_ANSWER_SET::iterator TALK_ANSWER_SET_IT;
// key - ´ë»çxml ÆÄÀÏ À̸§, second - ¹®´ÜÀÀ´ä½ºÆ®¸µÁýÇÕ (´ÜÁö Ŭ¶óÀÌ¾ðÆ® ´ë»ç¿äû ¹«°á¼º üũ ¿À·ù¸Þ½ÃÁö¸¦ ¸·´Â ¿ëµµ)
typedef std::map<std::wstring, TALK_ANSWER_SET> 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<TShopItem> vShopItem; // SHOPTABMAX
TShopTabData()
{
Clear();
}
void Clear()
{
nTabID = 0;
vShopItem.clear();
}
};
struct TShopData
{
int nShopID; // ¼¥ ¾ÆÀ̵ð (npc°¡ °¡Áö°í ÀÖ´Â ¾ÆÀ̵ð¿Í ºñ±³Çؼ­ ¿¬°á)
std::vector<TShopTabData> 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<char, TEnchantLevelData*> 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<TPotentialDataItem*> 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<TFriendGroup>
{
UINT nGroupDBID;
WCHAR wszGroupName[FRIEND_GROUP_NAMELENMAX];
};
struct TFriend:public TBoostMemoryPool<TFriend>
{
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<UINT> vGameModeTableID; // PvPGameModeTableID
std::vector<UINT> 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<vNumOfPlayerOption.size() ; ++i )
{
if( vNumOfPlayerOption[i] == cMaxUser )
return true;
}
return false;
}
bool CheckGameModeTableID( const UINT uiTableID ) const
{
for( UINT i=0 ; i<vGameModeTableID.size() ; ++i )
{
if( vGameModeTableID[i] == uiTableID )
return true;
}
return false;
}
bool CheckBreakIntoOption( const BYTE cBreakIntoFlag ) const
{
if( cBreakIntoFlag )
{
if( !bIsBreakInto )
return false;
}
return true;
}
};
struct TPvPGameModeTable
{
int nItemID;
UINT uiGameMode; // PvPCommon::GameMode
std::vector<UINT> vWinCondition;
std::vector<UINT> 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<UINT> vVictoryExp;
std::vector<UINT> vVictoryBonusRate;
std::vector<UINT> vDefeatExp;
std::vector<UINT> 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<int> vRankRewardItem;
std::vector<int> 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<vWinCondition.size() ; ++i )
{
if( vWinCondition[i] == uiWinCondition )
return true;
}
return false;
}
bool CheckPlayTimeSec( const UINT uiPlayTime ) const
{
if( vPlayTimeSec.empty() )
return true;
for( UINT i=0 ; i<vPlayTimeSec.size() ; ++i )
{
if( vPlayTimeSec[i] == uiPlayTime )
return true;
}
return false;
}
// ½ÇÆÐ½Ã -1 ¸®ÅÏ
int GetWinconditionIndex( const UINT uiWinCondition ) const
{
for( UINT i=0 ; i<vWinCondition.size() ; ++i )
{
if( vWinCondition[i] == uiWinCondition )
return i;
}
return -1;
}
bool CheckMaxUser( const UINT uiMaxUser ) const
{
return (uiMaxUser >= 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<int>(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<int> 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<int> 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<int> 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<TPCBangParam> VecPCBangParam;
std::vector<TPCBangParam> VecPremiumPCBangParam;
std::vector<TPCBangParam> VecGoldPCBangParam;
std::vector<TPCBangParam> VecSilverPCBangParam;
std::vector<TPCBangParam> 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<int> 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<TDLClearDataItem*> 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<int> iQuestIDs;
#endif // #if defined( PRE_ADD_REPUTATION_EXPOSURE )
int iMaxFavor; // È£ÀÇ ÃÖ´ëÄ¡
int iTakeFavorPerDay; // 1ÀÏ´ç ±ðÀ̴ ȣÀÇ ¼öÄ¡
int iMaxMalice; // ¾ÇÀÇ ÃÖ´ëÄ¡
int iAddMalicePerDay; // 1ÀÏ´ç ¿Ã¶ó°¡´Â ¾ÇÀÇ ¼öÄ¡
int iPresentIDArr[6]; // ¹ÞÀ» ¼ö ÀÖ´Â ¼±¹° ¸®½ºÆ®
std::vector<int> vFavorNpcID; // È£ÀÇ NPC ¸®½ºÆ®
std::vector<int> 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<NpcReputation::Common::MaxMailCount ; ++i )
{
iMailID[i] = 0;
iMailRand[i] = 0;
}
vFavorNpcID.clear();
vMaliceNpcID.clear();
iPlusItemID = 0;
iPlusProb = 0;
iUnionID = 0;
for( UINT i=0 ; i<_countof(iPresentPointArr) ; ++i )
iPresentPointArr[i] = 0;
}
int GetUnionPointByPresent (const int iPresentID)
{
for( UINT i=0 ; i<_countof(iPresentIDArr) ; ++i )
{
if( iPresentIDArr[i] == iPresentID )
{
// Ȥ½Ã ¸ô¶ó¼­ »çÀÌÁî °Ë»ç Çѹø´õ!
if (0 <= i && i < _countof(iPresentPointArr))
return iPresentPointArr[i];
}
}
return 0;
}
bool CheckPresentID( const int iPresentID )
{
for( UINT i=0 ; i<_countof(iPresentIDArr) ; ++i )
{
if( iPresentIDArr[i] == iPresentID )
return true;
}
return false;
}
bool bIsFavorNpc( const int iNpcID )
{
for( UINT i=0 ; i<vFavorNpcID.size() ; ++i )
{
if( vFavorNpcID[i] == iNpcID )
return true;
}
return false;
}
bool bIsMaliceNpc( const int iNpcID )
{
for( UINT i=0 ; i<vMaliceNpcID.size() ; ++i )
{
if( vMaliceNpcID[i] == iNpcID )
return true;
}
return false;
}
};
struct TPresentTableData
{
enum eType
{
Normal = 0,
Cash = 1,
Coin = 2,
Max,
};
eType Type;
int iTypeID;
int iCount;
int iAddFavorPoint;
int iTakeMalicePoint;
int iFavorGroupPoint;
int iMaliceGroupPoint;
TPresentTableData()
{
Type = Max;
iTypeID = 0;
iCount = 0;
iAddFavorPoint = 0;
iTakeMalicePoint = 0;
iFavorGroupPoint = 0;
iMaliceGroupPoint = 0;
}
};
struct TMailTableData
{
DBDNWorldDef::MailTypeCode::eCode Code;
bool IsCash;
int nSenderUIStringIndex;
int nTitleUIStringIndex;
int nTextUIStringIndex;
int ItemIDArr[MAILATTACHITEMMAX];
int ItemCountArr[MAILATTACHITEMMAX];
int ItemSNArr[MAILATTACHITEMMAX];
int nPresentMoney;
#if defined(PRE_SPECIALBOX)
int nKeepBoxReceive;
int nKeepBoxType;
int nKeepBoxLevelMin;
int nKeepBoxLevelMax;
int nKeepBoxClass;
#endif // #if defined(PRE_SPECIALBOX)
TMailTableData()
{
Code = static_cast<DBDNWorldDef::MailTypeCode::eCode>(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<int>(iExp/static_cast<float>(iMaxValue)*100);
for( int i=0 ; i<SecondarySkill::ManufactureSkill::MaxManufactureItemTypeCount ; ++i )
{
if( iExpRate >= 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<TCharmItem> CharmItemList;
};
const BYTE CharmItemKeyMax = 5;
struct TCharmItemKeyData
{
int nCharmItemID; // »óÀÚ ¾ÆÀÌÅÛ ¾ÆÀ̵ð
std::vector<int> 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<TChaosResultItem> 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<TPvPMissionRoom> 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<int> 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<TWeeklyEventData> 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<TProvideItemData> 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<TWorldPvPMissionRoom> 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<int> setAssignmentID; // µµÀü°úÁ¦ ¸ñ·Ï
int nMailID4; // 3ÀÏ º¸»ó
int nMailID7; // 5ÀÏ º¸»ó
};
struct TStampTableData // ½ºÅÆÇÁ Å×À̺í
{
INT64 biStartTime;
std::vector<TStampChallenge> 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)