DragonNest/Server/ServerCommon/DNServerDef.h

4104 lines
95 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#include "DNPacket.h"
#include "MemPool.h"
/*--------------------------------------------------------------------------
Server<EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>(?)
--------------------------------------------------------------------------*/
// 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; // <20><><EFBFBD><EFBFBD>ƮŸ<C6AE><C5B8> Ÿ<><C5B8>
const int LOGINCOUNTMAX = 64; // <20><> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const int LOGINCONCOUNTINFOTERM = (1*30*1000); // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int LOGINSERVERLISTSORTTERM = (1*3*1000); // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int MASTERCOUNTMAX = 10; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const int DELETECHAR_WAITTIME_MINUTE = 7*24*60; // 7<><37>
const BYTE PROCESSCOUNT = 40; // <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; // <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> ũ<><C5A9>
const int GAMEDELAYSIZE = 200; // <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20>ִ<EFBFBD> ũ<><C5A9>
const int SERVERDETACHPACKETSIZE = 1024*40; // <20><>Ŷ<EFBFBD><C5B6><EFBFBD>۽<EFBFBD> <20><><EFBFBD>ۻ<EFBFBD><DBBB><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9>
//const variable.
#ifdef _FINAL_BUILD
const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_PARTY = 120 * 1000; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_SINGLE = 120 * 1000;
const unsigned long WAIT_FOR_ANOTHER_USER_TIME_LIMIT = 15 * 1000; //<2F><><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> <20>ٸ<EFBFBD><D9B8>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> <20>ð<EFBFBD>
const unsigned long WAIT_FOR_LOAD_TIME_LIMIT = 60 * 1000; //<2F><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> <20>ð<EFBFBD>
const unsigned long GOGO_SING_TO_PLAY_FOR_WAIT_TIME_LIMIT = 2 * 60 * 1000; //Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>ε<EFBFBD><CEB5><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> <20>ð<EFBFBD>
const unsigned long GOGO_SING_TO_FARMPLAY_FOR_WAIT_TIME_LIMIT = 5 * 60 * 1000; //<2F><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#else
const unsigned long RUDP_CONNECT_TIME_LIMIT_FOR_PARTY = 60 * 1000; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
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; //<2F><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
const int EACH_GAMESERVER_MAX_ROOM_COUNT = 20;
const int EACH_GAMESERVER_MAX_USER_COUNT = 100;
const int INTERVALDELETE_TIMINGTICK = 1000 * 60; //1<><31><EFBFBD><EFBFBD>??...-_-;
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; // <20>ٽ<EFBFBD><D9BD><EFBFBD> 5<><35> <20><><EFBFBD><EFBFBD> üũ -> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲٶ<D9B2><D9B6><EFBFBD> <20>ؼ<EFBFBD> <20>ٲ<EFBFBD> -> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD>
const int CHECKRESPONSETICK = 60000 * 3; // <20>ٽ<EFBFBD><D9BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)
const int CHECKGPKFIRSTTICK = 1000 * 60 * 2; // <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>Ÿ<EFBFBD>̹<EFBFBD>
const int CHECKGPKTICK = 60000;
const int MANAGEDMAX = 20;
#if !defined(_FINAL_BUILD)
const DWORD CHECK_TCP_PING_TICK = 1000*30*1; // 1<><31>
const DWORD CHECK_UDP_PING_TICK = 1000*30*1; // 1<><31>
#else //#if !defined(_FINAL_BUILD)
const DWORD CHECK_TCP_PING_TICK = 1000*60*1; // 1<><31>
const DWORD CHECK_UDP_PING_TICK = 1000*60*1; // 1<><31>
#endif //#if !defined(_FINAL_BUILD)
#if defined(_CH)
const int CHECKLOGINUSERKICKTICK = 30 * 60 * 1000; // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 30<33><30> <20><><EFBFBD><EFBFBD> <20>ӹ<EFBFBD><D3B9><EFBFBD> <20><><EFBFBD><EFBFBD>!(<28>߱<EFBFBD><DFB1><EFBFBD>)
#else
const int CHECKLOGINUSERKICKTICK = 15 * 60 * 1000; // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 15<31><35> <20><><EFBFBD><EFBFBD> <20>ӹ<EFBFBD><D3B9><EFBFBD> <20><><EFBFBD><EFBFBD>!
#endif //#if defined(_CH)
const int CHECKNOTAUTHLOGINUSERKICKTICK = 5 * 60 * 1000; // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü 5<><35> <20><><EFBFBD><EFBFBD> <20>ӹ<EFBFBD><D3B9><EFBFBD> <20><><EFBFBD><EFBFBD>!
const unsigned int DEFAULTUSERSESSIONID = 10000;
const unsigned int CASHDELUSERDELAY_LIMITTICK = (4*30*1000);
// DB <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const int DBQUERYSTREAMDATAMAX = (36*1024); // DB <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> ũ<><C5A9> : DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20>۽ŵǴ<C5B5> <20><><EFBFBD><EFBFBD> ť<><C5A5> <20><><EFBFBD><EFBFBD> <20><> <20>ϰ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü <20><> <20><><EFBFBD><EFBFBD> ū <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> ũ<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>
const unsigned int DBQUERYAUTOCHKSUM = 0xE41C723F; // DB <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ ó<><C3B3> <20><> üũ<C3BC><C5A9>
const int QUESTINVENBLANKCHECKMIN = 2; // <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA>丮 üũ <20><> <20>޽<EFBFBD><DEBD><EFBFBD> <20>߼<EFBFBD><DFBC><EFBFBD> <20>Ǵ<EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
const float MAX_ITEMPRICE_RATE = 0.5f;
#if defined(_FINAL_BUILD)
const int BEGINAUTHLIMITSEC = (9*10); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD> (<28><><EFBFBD><EFBFBD>:<3A><>, 0 <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ?)
const int CHECKAUTHLIMITSEC = (6*10); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD> (<28><><EFBFBD><EFBFBD>:<3A><>)
const int BEGINAUTHLIMITTERM = (BEGINAUTHLIMITSEC*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
//const int CHECKAUTHLIMITTERM = (CHECKAUTHLIMITSEC*1000); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int CHECKAUTHLIMITTERM = (1*30*1000); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms) // P.S.> <20><><EFBFBD><EFBFBD>, PVP <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> ª<><C2AA> <20><><EFBFBD><EFBFBD>
#else // _FINAL_BUILD
const int BEGINAUTHLIMITSEC = (6*10); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD> (<28><><EFBFBD><EFBFBD>:<3A><>, 0 <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ?)
const int CHECKAUTHLIMITSEC = (4*10); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD> (<28><><EFBFBD><EFBFBD>:<3A><>)
const int BEGINAUTHLIMITTERM = (BEGINAUTHLIMITSEC*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
//const int CHECKAUTHLIMITTERM = (CHECKAUTHLIMITSEC*1000); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int CHECKAUTHLIMITTERM = (1*20*1000); // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> (<28><><EFBFBD><EFBFBD>:ms) // P.S.> <20><><EFBFBD><EFBFBD>, PVP <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> ª<><C2AA> <20><><EFBFBD><EFBFBD>
#endif // _FINAL_BUILD
const int RESETAUTHLISTMAX = (1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ ũ<><C5A9> (<28><><EFBFBD><EFBFBD>!!! - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD> <20>۽<EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><>Ŷ ũ<><20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20><>)
const int RESETAUTHLISTTERM = (1*1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE>ֱ<EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int RESETAUTHSERVERTERM = (5*1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE>ֱ<EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int RESETAUTHWORLDCHECKTERM = (5*1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE>ֱ<EFBFBD> (<28><><EFBFBD><EFBFBD>:ms)
const int RESETAUTHWORLDLIMITTERM = (2*30*1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD>ѽð<D1BD> (<28><><EFBFBD><EFBFBD>:ms)
const int GETAUTHUSERCOUNT = 1000 * 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB>Ʈ ȹ<><C8B9><EFBFBD>ֱ<EFBFBD>
const int GUILDMGRCHKTERM = (5*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20>ֱ<EFBFBD>
const int GUILDMGRUPDTERM = (10*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
const int GUILDCHKMEMBTERM = (30*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20>ֱ<EFBFBD>
const int GUILDCHKRESCTERM = (30*1000); // <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF>ݳ<EFBFBD> üũ <20>ֱ<EFBFBD>
const int GUILDREQINFOTERM = (60*1000); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û üũ <20>ֱ<EFBFBD>
const int GUILDRFSVIEWTERM = (10*1000); // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
const int GUILDAPLPOINTTERM = (10*1000); // <20><><EFBFBD><EFBFBD> <20>Ϲ<EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ DB <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
const int GUILDCHKRESCLIMIT = (2*30*1000); // <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF>ݳ<EFBFBD> üũ <20><><EFBFBD><EFBFBD>
const int PERIODQUESTTERM = (60*1000); // <20><EFBFBD><E2B0A3> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
const int PERIODGUILDWARTERM = (60*1000); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
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, // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERTYPE_DB, // DB <20><><EFBFBD><EFBFBD>
SERVERTYPE_VILLAGE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERTYPE_GAME, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERTYPE_MASTER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERTYPE_LOG, // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERTYPE_MAX,
};
enum ePatchType
{
PATCHTYPE_LOGIN, // <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD>
PATCHTYPE_DB, // DB <20><><EFBFBD><EFBFBD>
PATCHTYPE_VILLAGE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
PATCHTYPE_GAME, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
PATCHTYPE_MASTER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
PATCHTYPE_LOG, // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>
PATCHTYPE_PATCHER, // ESM
PATCHTYPE_CASH, // ij<><C4B3> <20><><EFBFBD><EFBFBD>
};
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, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ؽ<EFBFBD>)
CONNECTIONKEY_CASH,
CONNECTIONKEY_BILLING, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ۺ<EFBFBD><DBBA><EFBFBD><EFBFBD><EFBFBD>)
CONNECTIONKEY_SERVICEPATCHER,
CONNECTIONKEY_SERVERMONITOR,
CONNECTIONKEY_TW_AUTHLOGIN, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> 1 - Authorization : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>, <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, ij<><C4B3> <20>ܿ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ?) üũ)
CONNECTIONKEY_TW_AUTHLOGOUT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> 2 - Logout : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> ó<><C3B3>)
CONNECTIONKEY_TW_QUERY,
CONNECTIONKEY_TW_SHOPITEM,
CONNECTIONKEY_TW_COUPON, // <20><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CONNECTIONKEY_TW_COUPON_ROLLBACK, // <20><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>..¡<>׷<EFBFBD><D7B7><EFBFBD><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD>..<2E><>
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<69><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD>
{
STATE_NONE,
// login
STATE_CHECKVERSION,
STATE_CHECKLOGIN, // <20><><EFBFBD>̵<EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD> Ȯ<>λ<EFBFBD><CEBB><EFBFBD>
STATE_SERVERLIST,
STATE_WAITUSER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
STATE_CHARLIST, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
STATE_CHANNELLIST,
STATE_CONNECTVILLAGE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ӱ<EFBFBD><D3B0>ɻ<EFBFBD><C9BB><EFBFBD>
STATE_CONNECTGAME, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ӱ<EFBFBD><D3B0>ɻ<EFBFBD><C9BB><EFBFBD>
STATE_RECONNECTLOGIN, // <20><>Ŀ<EFBFBD><C4BF>Ʈ <20><><EFBFBD><EFBFBD>
// master
STATE_CHECKVILLAGE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD> <20>ǹǷ<C7B9> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>.
STATE_CHECKGAME, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD>
STATE_CHECKRECONNECTLOGIN, //ij<><C4B3><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>â<EFBFBD><C3A2><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD>
STATE_VILLAGE, // village<67><65><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>
STATE_GAME, // game<6D><65><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>
STATE_LOGIN, // login<69><6E><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>
// village
STATE_LOADUSERDATA, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DB<44><42><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7>Դ<EFBFBD><D4B4><EFBFBD>
STATE_READY, // <20>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>غ<EFBFBD> <20>Ϸ<EFBFBD>
STATE_READYTOVILLAGE, // village <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű涧 (<28>غ<EFBFBD><D8BA>ܰ<EFBFBD>)
STATE_READYTOGAME, // game<6D><65><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A5> (<28>غ<EFBFBD><D8BA>ܰ<EFBFBD>)
STATE_READYTOLOGIN, // login<69><6E><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A5> (<28>غ<EFBFBD><D8BA>ܰ<EFBFBD>)
STATE_MOVETOVILLAGE, // village <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű涧
STATE_MOVETOGAME, // game<6D><65><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A5>
STATE_MOVETOLOGIN, // login<69><6E><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A5>
STATE_MOVESAMECHANNEL, // <20><><EFBFBD><EFBFBD> ä<><C3A4> <20>̵<EFBFBD>
#if defined(_HSHIELD)
HSHIELD_NONE = 0,
HSHIELD_RESPONSEVERSION = 1, // checkversion <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
HSHIELD_RECONNECTLOGIN, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
HSHIELD_LOADUSER, // <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HSHIELD_REQUEST, // _AhnHS_MakeRequest <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
HSHIELD_RESPONSE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#endif // _HSHIELD
};
//enumulation
//GameRoom
enum eGameRoomState
{
_GAME_STATE_NONE, //<2F><><EFBFBD><EFBFBD>!
_GAME_STATE_READY2CONNECT, //<2F>ʱ<EFBFBD>ȭ <20>Ϸ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>! <20><><EFBFBD><EFBFBD>
_GAME_STATE_CONNECT2CHECKAUTH, //DB <20><> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ
_GAME_STATE_CONNECT2LOAD, //<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>! <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD>
_GAME_STATE_LOAD2SYNC, //Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
_GAME_STATE_SYNC2SYNC,
_GAME_STATE_SYNC2PLAY, //<2F>÷<EFBFBD><C3B7>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>
_GAME_STATE_PLAY, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
_GAME_STATE_CANCEL_LOADING, //<2F><><EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> <20><>ũ
_GAME_STATE_DESTROYED, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
_GAME_STATE_FARM_NONE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD> <20><>ƾ<EFBFBD><C6BE> <20>޶<EFBFBD> <20>Ϲݰ<CFB9> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><EFBFBD><EAB7AF><EFBFBD>ϴ<EFBFBD> _GAME_STATE_PLAY<41><59><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD>
_GAME_STATE_FARM_READY2LOAD, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>
_GAME_STATE_FARM_LOAD2PLAY, //<2F><><EFBFBD>񿡼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20>޾Ҵ<DEBE>. <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>
_GAME_STATE_FARM_PAUSE, //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~
_GAME_STATE_PVP_SYNC2GAMEMODE, //<2F>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>dzʶٰ<CAB6> <20><><EFBFBD><EFBFBD><EFBFBD>ް<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
};
//GameSession
enum eGameSessionState
{
SESSION_STATE_NONE,
SESSION_STATE_READY, //<2F><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD>! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵǾ<C8B5> <20><><EFBFBD><EFBFBD>
SESSION_STATE_RUDP_CONNECTED,
SESSION_STATE_CONNECTED, //<2F><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD>!
SESSION_STATE_LOAD, //<2F><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD>մϴ<D5B4>.
SESSION_STATE_LOADED, //<2F><><EFBFBD>ӷε<D3B7><CEB5>Ϸ<EFBFBD>!
SESSION_STATE_WAIT_TO_READY, //Ready <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>
SESSION_STATE_READY_TO_SYNC, //Sync <20>غ<EFBFBD> <20>Ϸ<EFBFBD>!
SESSION_STATE_SYNC_READY_2_DELAY, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>غ<EFBFBD><D8BA><EFBFBD> <20>ȵǻ<C8B5><C7BB>¿<EFBFBD><C2BF><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20>޾ҽ<DEBE><D2BD>ϴ<EFBFBD>.
SESSION_STATE_READY_TO_PLAY, //Sync 2 Play
SESSION_STATE_GAME_PLAY, //<2F><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>!
SESSION_STATE_READY_TO_VILLAGE, //game -> village (<28>غ<EFBFBD><D8BA>ܰ<EFBFBD>)
SESSION_STATE_READY_TO_LOGIN, //game -> login char select (<28>غ<EFBFBD><D8BA>ܰ<EFBFBD>)
SESSION_STATE_RECONNECTLOGIN, //game -> login char select
SESSION_STATE_SERVER_CHANGE, //<2F><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>! <20>̵<EFBFBD><CCB5>Ϸ<EFBFBD><CFB7>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>
SESSION_STATE_DISCONNECTED, //©<><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! (tcp<63><70><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
//SESSION_STATE_CRASH, //ũ<><C5A9><EFBFBD><EFBFBD>!
};
// 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, // <20><><EFBFBD><EFBFBD>
WEAPON_GAUNTLET, // <20><>Ʋ<EFBFBD><C6B2>
WEAPON_AXE, // <20><><EFBFBD><EFBFBD>
WEAPON_HAMMER, // <20>ظ<EFBFBD>
WEAPON_SMALLBOW, // <20>ұ<EFBFBD>
WEAPON_BIGBOW, // <20><><EFBFBD><EFBFBD>
WEAPON_CROSSBOW, // <20><><EFBFBD><EFBFBD>
WEAPON_STAFF, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WEAPON_BOOK, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WEAPON_ORB, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WEAPON_PUPPET, // <20>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD>
WEAPON_MACE, // <20><><EFBFBD>̽<EFBFBD>
WEAPON_FLAIL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WEAPON_WAND, // <20>ϵ<EFBFBD>
WEAPON_SHIELD, // <20><><EFBFBD><EFBFBD>
WEAPON_ARROW, // ȭ<><C8AD>
WEAPON_CANNON, // ij<><C4B3>
WEAPON_BUBBLEGUN, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WEAPON_GLOVE, // <20>۷<EFBFBD><DBB7><EFBFBD>
WEAPON_FAN, // <20><>ä
WEAPON_CHAKRAM, // <20><>ũ<EFBFBD><C5A9>
WEAPON_CHARM, // <20><>
WEAPON_SCIMITER, // <20>ù<EFBFBD><C3B9><EFBFBD>
WEAPON_DAGGER, // <20><><EFBFBD><EFBFBD>
WEAPON_CROOK, // ũ<><C5A9>
WEAPON_SPEAR,
WEAPON_RESERVED1,
WEAPON_BRACELET,
WEAPON_KNUCKLE,
WEAPON_RESERVED2,
WEAPON_CLAW,
};
enum eParts
{
PARTS_FACE, //
PARTS_HAIR,
PARTS_HELMET, // <20><><EFBFBD><EFBFBD>
PARTS_BODY, // <20><>ü
PARTS_LEG, // <20><>ü
PARTS_HAND, // <20><>
PARTS_FOOT, // <20><>
PARTS_NECKLACE,
PARTS_EARRING,
PARTS_RING,
PARTS_RING2,
PARTS_CREST,
PARTS_FULLSET, // Ǯ<><C7AE>Ʈ
};
enum eQuestDataType
{
QUESTDATA_STATE = 1, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
QUESTDATA_STEP, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
QUESTDATA_JOURNAL, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
};
enum eEtcType // DNEtc table Type
{
ETC_NONE,
ETC_QUICKSLOT, // TQuickSlot QuickSlot[QUICKSLOTMAX]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>â (10<31><30><EFBFBD><EFBFBD> 2<><32>)
ETC_JOB, // USHORT wJobArray[JOBMAX]; // <20><><EFBFBD><EFBFBD> (0: <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>~ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
ETC_NOTIFIER, // int Notifier[Notifier_MaxCount]; // <20>˸<EFBFBD><CBB8><EFBFBD> (quest, mission)
ETC_DUNGEONCLEAR, // TDungeonClearData DungeonClear[DUNGEONCLEARMAX]; // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> (120<32><30>)
ETC_ETERNITYITEM, // USHORT wEternityItem[ETERNITYITEMMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ETC_EQUIPDELAYTIME, // int nEquipDelayTime[EQUIPMAX]; // equip index<65><78> <20><><EFBFBD>õ<EFBFBD> cooltime
ETC_EQUIPREMAINTIME, // int nEquipRemainTime[EQUIPMAX];
};
enum eAuthType
{
AUTHTYPE_BEGINAUTH, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AUTHTYPE_STOREAUTH, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AUTHTYPE_CHECKAUTH, // <20><><EFBFBD><EFBFBD> üũ
AUTHTYPE_RESETAUTH, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AUTHTYPE_CNT,
};
enum eAbuseCode
{
ABUSE_NONE = 0,
ABUSE_MOVE_SERVERS, // <20><><EFBFBD><EFBFBD> <-> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ABUSE_MOVE_INSKY, // <20><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>
ABUSE_HACKSHIELD, // <20>ٽ<EFBFBD><D9BD><EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
ABUSE_TWN_EXTENDLOG, // <20><EFBFBD><EBB8B8> <20>߰<EFBFBD> <20>αװ<CEB1> #48714 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#if defined( PRE_ADD_CHARACTERCHECKSUM )
ABUSE_CHARACTER_CHECKSUM, // #80315 ij<><C4B3><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20>̻<EFBFBD> <20>߰<EFBFBD>
#endif // #if defined( PRE_ADD_CHARACTERCHECKSUM )
};
struct WorldUserState
{
enum eCode
{
Add = 0,
Delete,
Modify,
};
};
namespace DBDNMembership
{
struct OrderStatusCode
{
enum eOrderStatusCode
{
SuccessPayment = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> & pickup <20><><EFBFBD><EFBFBD>
Success = 2, // <20><><EFBFBD>ſϷ<C5BF>
FailPayment = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
};
};
namespace DBDNWorldDef
{
struct CharacterExpChangeCode
{
enum eCharacterExpChangeCode
{
Quest = 1, // : <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> -> FKey = QuestID
Dungeon = 2, // : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> FKey = PartyID or NULL
Cheat = 3, // : ġƮ -> FKey = NULL
Admin = 4, // : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Eternity = 5, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> FKey = ItemSerial
PvP = 6, // : PvP <20>Ƿε<C7B7> <20><><EFBFBD><EFBFBD> -> FKey = NULL
DungeonMonster = 7, // :<3A><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ -> FKey = PartyID or NULL( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD>..DB<44><42> <20>Ѿ<D1BE><EEB0A5><EFBFBD><EFBFBD> Dungeon <20><><EFBFBD><EFBFBD> Convert <20>ȴ<EFBFBD>. )
Item = 8, // : <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> FKey = ItemID
};
};
struct CharacterLevelChangeCode
{
enum eCharacterLevelChangeCode
{
Normal = 1, // : <20>Ϲ<EFBFBD>
Cheat = 2, // : ġƮ
Admin = 3, // : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
struct CoinChangeCode
{
enum eCoinChangeCode // <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>, â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ȱ<EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ų <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SP<53><50> <20><><EFBFBD>ԵǾ<D4B5> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
{
DoNotDBSave = 0,
QuestReward = 1, // : <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (FKey: QuestID)
PickUp = 2, // : <20>Ⱦ<EFBFBD> (FKey: PartyID or NULL)
Cheat = 3, // : ġƮ (FKey: NULL)
Admin = 4, // : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: AuditLogID)
Use = 5, // : <20><><EFBFBD><EFBFBD> (FKey: NULL)
// 6: <20><><EFBFBD><EFBFBD><EFBFBD>۽<EFBFBD>÷<EFBFBD><C3B7> (FKey: MailID)
// 7: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7> (FKey: MailID)
InvenToWare = 8, // : â<><C3A2> <20>Ա<EFBFBD> (FKey: NULL)
WareToInven = 9, // : â<><C3A2> <20><><EFBFBD><EFBFBD> (FKey: NULL)
// 10: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ȱ<EFBFBD> (FKey: NpcID)
// 11: <20><>ȯ <20>Ա<EFBFBD> (FKey: CharacterID)
// 12: <20><>ȯ <20><><EFBFBD><EFBFBD> (FKey: CharacterID)
QuestSub = 13, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (FKey: QuestID)
RepairItem = 14, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: ItemSerial)
// 15: <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: NULL)
// 16: <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: ItemEnchantLogID)
// 17: <20><>ų <20><><EFBFBD><EFBFBD> (FKey: SkillID)
// 18: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: ItemSerial)
DisjointTax = 19, // <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD> (FKey: NULL)
// 20: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: MailID)
// 21: <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: TradeID)
// 22: <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (FKey: TradeID)<29><>
// 23: <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǹű<C7B8> (FKey: TradeID)
// 24: <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD> <20>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: TradeID)
CompoundTax = 25, // <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD> (FKey: NULL)
// 26: ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: NULL)
MaxLevelExperienceTransGold = 27, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: NULL)
Present = 28, // <20><><EFBFBD><EFBFBD> (FKey: NpcID)
// 29: <20><><EFBFBD><EFBFBD> â<><C3A2> (FKey: GuildID)
GuildLevelup = 30, // 30: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> (FKey: GuildID)
InvenToGuildWare = 31, // 31: <20><><EFBFBD><EFBFBD> â<><C3A2> <20>Ա<EFBFBD> (FKey: GuildID)
GuildWareToInven = 32, // 32: <20><><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> (FKey: GuildID)
GuildRewardBuy = 33, // 33: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (FKey: GuildItemID)
Donation = 34, // <20><><EFBFBD><EFBFBD>
// 35: (DOORS) <20><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>
// 36: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 37: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 38: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 39: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 40: (DOORS) <20><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 41: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 42: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 43: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 44: (DOORS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CharmItem = 45, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: ItemID)
ChaosItem = 46, // ī<><C4AB><EFBFBD><EFBFBD> ť<><C5A5> (FKey: ItemID)
SpecialBox = 47, // Ư<><C6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (FKey: EventRewardID)
// 48: <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 49: C2C <20><><EFBFBD><EFBFBD>
// 50: C2C ȸ<><C8B8>
// 51: C2C <20>ŷ<EFBFBD>
TalismanSlotOpen = 52, // 52: Ż<><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(FKey: <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>)
TalismanSlotChange = 53, // 53: Ż<><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ <20>̵<EFBFBD>
GamblePrice=55, // 55: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GambleFirstWinner=56, // 56: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>
GambleSecondWinner=57, // 56: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> 2<><32> <20><><EFBFBD><EFBFBD>
DWC = 58, // 58: DWC ij<><C4B3><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
enum ePetalChangeCode
{
GambleEnterPetal= 9, // 9: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> <20><>Ż <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GambleFirstWinPetal= 12, // 12: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> 1<><31> <20><>Ż <20><><EFBFBD><EFBFBD>
GambleSecondWinPetal= 13, // 13: <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD> 2<><32> <20><>Ż <20><><EFBFBD><EFBFBD>
};
};
struct CoinTypeCode
{
enum eCoinTypeCode
{
Coin = 1, // : <20><><EFBFBD><EFBFBD>
WarehouseCoin = 2, // : â<><C3A2> <20><><EFBFBD><EFBFBD>
RebirthCoin = 3, // : <20><>Ȱ <20><><EFBFBD><EFBFBD>
PCBangRebirthCoin = 4, // : PC<50><43> <20><>Ȱ <20><><EFBFBD><EFBFBD>
};
};
struct EquipmentAttributeCode
{
enum eEquipmentAttributeCode
{
DelayTime = 1, // : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>
RemainTime = 2, // : Remain <20>ð<EFBFBD>
};
};
struct FatigueTypeCode
{
enum eFatigueTypeCode
{
PCBang = 1, // : PC<50><43> <20>Ƿε<C7B7>
Daily = 2, // : <20><><EFBFBD><EFBFBD> <20>Ƿε<C7B7>
Weekly = 3, // : <20>ְ<EFBFBD> <20>Ƿε<C7B7>
Event = 4, // <20>̺<EFBFBD>Ʈ <20>Ƿε<C7B7>
VIP = 5, // VIP<49>Ƿε<C7B7>
};
};
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, // : <20><><EFBFBD><EFBFBD>Ʈȹ<C6AE><C8B9>
Progress = 1, // : <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>
};
};
struct SkillPointCode
{
enum eSkillPointCode
{
LevelUp = 1, // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EternityItem = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Repair = 10, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
struct SkillChangeCode
{
enum eSkillChangeCode
{
Gain = 1, // : <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ ȹ<><C8B9>
Use = 2, // : <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> & <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
Reset = 3, // : <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
GainByQuest = 4, // : <20><>ų ȹ<><C8B9> (<28><><EFBFBD><EFBFBD>Ʈ)
GainByDungeon = 5, // : <20><>ų ȹ<><C8B9> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
GainByBook = 6, // : <20><>ų ȹ<><C8B9> (<28><>ų<EFBFBD><C5B3>)
GainByEvent = 7, // : <20><>ų ȹ<><C8B9> (<28>̺<EFBFBD>Ʈ)
GainByAdmin = 8, // : <20><>ų ȹ<><C8B9> (by <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
DelByDrop = 9, // : <20><>ų <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
DelByQuest = 10, // : <20><>ų <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>Ʈ)
DelByEvent = 11, // : <20><>ų <20><><EFBFBD><EFBFBD> (<28>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
DelByAdmin = 12, // : <20><>ų <20><><EFBFBD><EFBFBD> (by <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
ModSkillLevelByAdmin = 13, // : <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (by <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
GainByBuy = 14, // 14<31><34>ųȹ<C5B3><C8B9>(<28><><EFBFBD><EFBFBD>)
};
};
struct TradeStatusCode
{
enum eTradeStatusCode
{
Sell = 0, // : <20>Ǹ<EFBFBD><C7B8><EFBFBD>
CompleteSellByItem = 1, // : <20>ǸſϷ<C5BF>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
CompleteSellByCoin = 2, // : <20>ǸſϷ<C5BF>(<28>Ǹű<C7B8> <20><><EFBFBD><EFBFBD>)
CancelSell = 3, // : <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
Expire = 4, // : <20><EFBFBD><E2B0A3><EFBFBD><EFBFBD>
};
};
struct AddMaterializedItem
{
enum eCode
{
Pick = 1, // 1=<3D>ݱ<EFBFBD> -> FKey: PartyID or NULL
Mission = 2, // 2=<3D>̼<EFBFBD> -> FKey: MissionID
QuestReward = 3, // 3=<3D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> -> FKey: QuestID
Present = 4, // 4=<3D><><EFBFBD><EFBFBD> -> FKey: PurchaseID
PointBuy = 5, // 5=<3D>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> -> FKey: NPCID
CashBuy = 6, // 6=ij<><C4B3> <20><><EFBFBD><EFBFBD> -> FKey: PurchaseID
ReserveMoneyBuy = 7, // 7=<3D><>Ż <20><><EFBFBD><EFBFBD> -> FKey: PurchaseID
GetGachaResultCashItem_JP = 9, // 9=<3D>Ϻ<EFBFBD> <20><>í <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
GMGive = 10, // 10=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> FKey: AuditLogID
ItemDecompose = 11, // 11=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> FKey: NPCID
// ItemEnchantFail = 12, // 12=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ <20><><EFBFBD><EFBFBD> -> FKey: ItemEnchantID
ItemCompound = 13, // <20><><EFBFBD><EFBFBD>
RandomItem = 14, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DungeonReward = 15, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PvPReward = 16, // pvp<76><70><EFBFBD><EFBFBD>
CharacterCreate = 17, // <20><EFBFBD><E2BABB><EFBFBD><EFBFBD>
SystemMail = 18, // <20>ý<EFBFBD><C3BD>۸<EFBFBD><DBB8><EFBFBD> (<28>̼Ǻ<CCBC><C7BA><EFBFBD>)
FixedItem = 19, // ij<><C4B3><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>, <20>Ӹ<EFBFBD>) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>Ӹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEBEB2> -> FKey: ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۽ø<DBBD><C3B8><EFBFBD> (<28>κ<EFBFBD><CEBA><EFBFBD> <20>ִ¾<D6B4>)
CostumeMix = 21, // <20>ڽ<EFBFBD>Ƭ <20>ռ<EFBFBD>
FishingReward = 22, // <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
Harvest = 23, // <20><>Ȯ
Cheat = 24, // ġƮ
PvPLadderPoint = 25, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
UnionPoint = 26, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
Trigger = 27, // Ʈ<><C6AE><EFBFBD><EFBFBD>
GuildWarFestivalPoint = 28, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
Repurchase = 29,
GuildReversionItem = 30,
CostumeRandomMixItem = 31,
BestFriendItem = 34,
COMEBACKREWARD = 35, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SpecialBoxReward = 36,
NewbieGameQuitReward = 37, //<2F>ű<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
NewbiewReConnectReward = 38, //<2F>ű<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
ComebackGameQuitReward = 39, //<2F><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
SeedPointBuy = 40, //<2F>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
struct MailTypeCode
{
enum eCode
{
Normal = MailType::NormalMail, // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD>
Mission = MailType::MissionMail, // <20>̼<EFBFBD> <20><><EFBFBD><EFBFBD>
Admin = MailType::AdminMail, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
EventMail = MailType::EventMail, // <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
VIP = MailType::VIPMail, // VIP
MasterSystem = MailType::MasterSystemMail, // <20><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
NpcReputaion = MailType::NpcReputationMail, // NPCȣ<43><C8A3><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
Quest = MailType::Quest, // <20><><EFBFBD><EFBFBD>Ʈ
GuildWarReward = MailType::GuildWarReward, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SpecialBox_Account = MailType::SpecialBox_Account, // Ư<><C6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
SpecialBox_Character = MailType::SpecialBox_Character, // Ư<><C6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
Cadge = MailType::Cadge, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GuildMaxLevelReward = MailType::GuildMaxLevelReward,// <20><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><E5B0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AppellationBookReward = MailType::AppellationBookReward, // Īȣ <20>÷<EFBFBD><C3B7>Ǻ<EFBFBD> <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
struct UseItem
{
enum eUseItemCode
{
DoNotDBSave = 0,
Use = 1, // 1=<3D>Ҹ<EFBFBD><D2B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Destroy = 2, // 2=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DeCompose = 4, // 4=<3D><><EFBFBD><EFBFBD>
Present = 5, // 5=<3D><><EFBFBD><EFBFBD>
GuildReversionItem = 6, // 6=<3D><><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD> <20>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͼӾ<CDBC><D3BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
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, // <20><>Ȯâ<C8AE><C3A2>
ServerWare = 17, // <20><><EFBFBD><EFBFBD> <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2>
ServerWareCash = 18, // <20><><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2>
Talisman = 19, // Ż<><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PeriodInventory = 20,
PeriodWarehouse = 21,
};
};
struct PetType
{
enum eCode
{
Vehicle = 1,
Pet = 2,
SATIETY_PET = 3,
};
};
struct PayMethodCode
{
enum eCode
{
Coin = 1, // 1: <20><><EFBFBD><EFBFBD>
Cash = 2, // 2: ij<><C4B3>
Petal = 3, // 3: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Coupon = 4, // 4: <20><><EFBFBD><EFBFBD>
Admin = 5, // 5: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Quest = 6, // 6: <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>
Mission = 7, // 7: <20>̼Ǻ<CCBC><C7BA><EFBFBD>
LevelupEvent = 8, // 8=ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
VIP = 9, // 9 : VIP <20><><EFBFBD><EFBFBD>
PvP = 10, // 10 : PVP <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
Union_Commerical = 11, // 11 : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
Union_Royal = 12, // 12 : <20>ռ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
Union_Liberty = 13, // 13 : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
Cash_NexonUSA = 14, // 14 : <20>ؽ<EFBFBD><D8BD>Ƹ޸<C6B8>ī ij<><C4B3>
Event = 15, // 15 : <20>̺<EFBFBD>Ʈ
GuildWar_Festival = 16, // 16 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
GuildWar_Reward = 17, // 17 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Comeback = 19, // 18 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BestFriend = 20, // 20 : <20><>ģ
BeginnerGuild = 21, // 21 : <20>ʺ<EFBFBD><CABA>ڱ<EFBFBD><DAB1><EFBFBD> <20><><EFBFBD><EFBFBD>
GuildSupport = 22, // 22 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ActiveMission = 23, // 23 : <20><>Ƽ<EFBFBD><C6BC><EFBFBD>̼<EFBFBD> <20><><EFBFBD><EFBFBD>
#if defined( PRE_ADD_STAMPSYSTEM )
Stamp = 24, // 24 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined( PRE_ADD_NEW_MONEY_SEED )
SeedPoint = 25, // 25 : <20>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD>
#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, // <20><><EFBFBD><EFBFBD>
Character, // ij<><C4B3><EFBFBD><EFBFBD>
};
};
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, // <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
MyMasterInfo, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OptionalMasterInfo, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
};
#if defined( PRE_ADD_SECONDARY_SKILL )
struct SecondarySkillTypeCode
{
enum eCode
{
ProductionSkill = SecondarySkill::Type::ProductionSkill, // <20><><EFBFBD>꽺ų
ManufactureSkill = SecondarySkill::Type::ManufactureSkill, // <20><><EFBFBD>۽<EFBFBD>ų
CommonSkill = SecondarySkill::Type::CommonSkill, // <20><><EFBFBD>뽺ų
};
};
#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, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
SeedPoint = 6, // <20>õ<EFBFBD> <20>Ӵ<EFBFBD>
Max,
};
};
struct GuildWarRewardType
{
enum eGuildWarRewardType
{
GuildWarFestivalWin = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GuildWarFestivalLose, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>
GuildWarFinalUnder4, // <20><><EFBFBD><EFBFBD> 4<><34><EFBFBD≯<EFBFBD>
GuildWarFinal4, // <20><><EFBFBD><EFBFBD> 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GuildWarFinal2, // <20><><EFBFBD><EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GuildWarFinalWin, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD>
GuildWarFinalAbnormalLose, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)
};
};
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, //<2F>׳<EFBFBD> <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD> <20>Ӵ<EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD>
_GAMESERVER_AFFINITYTYPE_HYBRYD, //<2F>Ǻ<EFBFBD><C7BA>ǵ<EFBFBD> <20>ް<EFBFBD> <20><> <20>޾ƿ<DEBE>
_GAMESERVER_AFFINITYTYPE_PVP, //<2F>Ǻ<EFBFBD><C7BA>Ǹ<EFBFBD> <20>޾ƿ<DEBE>
_GAMESERVER_AFFINITYTYPE_FARM, //<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׼<EFBFBD>!
};
// 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 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
eChSndaAuthFlag_UseECard = (1 << 1), // ECard <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
#endif // _CH
// structure -----------------------------------------------------------------------------------------------
struct TChannelInfo
{
USHORT nChannelID; //<2F>Ҵ<EFBFBD><D2B4><EFBFBD> ä<><C3A4>(<28>ʵ<EFBFBD>)<29><><EFBFBD>̵<EFBFBD>
USHORT nChannelIdx;
USHORT nMapIdx; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
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; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
char cWorldID;
WCHAR wszWorldName[WORLDNAMELENMAX];
UINT nWorldMaxUser; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>
USHORT nDefaultMaxUser;
bool bOnline; // online, offline <20><><EFBFBD><EFBFBD>ǥ<EFBFBD>ÿ<EFBFBD>
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;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> float<61><74> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʴ´<CAB4>. Ŭ<>󿡼<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> *1000<30><30> <20>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct TPosition
{
int nX;
int nY;
int nZ;
};
struct TLocation
{
UINT nMapIndex;
TPosition Pos;
};
// npc, user object<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κи<CEBA>
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; // Ŭ<><C5AC><EFBFBD><EFBFBD>
int cDarkClass; // rlkt_dark dark class :)
int cDarkClassJobID; // rlkt_dark dark class :)
int nCreateMapIndex; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
int nCreateMapStartPositionX[DEFAULTPOSITIONMAX]; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ X
int nCreateMapStartPositionY[DEFAULTPOSITIONMAX]; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ Y
int nCreateMapStartRadius[DEFAULTPOSITIONMAX]; // <20>ݰ<EFBFBD>
int nCreateTutorialMapIndex; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʃ<><EFBFBD><E4B8AE> <20><> <20>ε<EFBFBD><CEB5><EFBFBD> (GameServer<65><72>)
int nCreateTutorialGateNo; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʃ<><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>Ʈ (GameServer<65><72>)
int nDefaultBody; // <20><EFBFBD><E2BABB>
int nDefaultLeg; // <20><EFBFBD>ٸ<EFBFBD>
int nDefaultHand; // <20><EFBFBD><E2BABB>
int nDefaultFoot; // <20><EFBFBD><E2BABB>
int nFace[DEFAULTPARTSMAX]; // <20><><EFBFBD><EFBFBD>
int nHair[DEFAULTPARTSMAX]; // <20>Ӹ<EFBFBD>
int nHelmet[DEFAULTPARTSMAX]; // <20><><EFBFBD><EFBFBD>
int nBody[DEFAULTPARTSMAX]; // <20><><EFBFBD><EFBFBD>
int nLeg[DEFAULTPARTSMAX]; // <20><><EFBFBD><EFBFBD>
int nHand[DEFAULTPARTSMAX]; // <20><>
int nFoot[DEFAULTPARTSMAX]; // <20><>
int nWeapon[WEAPONMAX]; // <20><><EFBFBD><EFBFBD>
DWORD dwHairColor[DEFAULTHAIRCOLORMAX];
DWORD dwSkinColor[DEFAULTSKINCOLORMAX];
DWORD dwEyeColor[DEFAULTEYECOLORMAX];
int nDefaultItemID[DEFAULTITEMMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nDefaultItemCount[DEFAULTITEMMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nDefaultSkillID[DEFAULTSKILLMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų
TQuickSlot DefaultQuickSlot[DEFAULTQUICKSLOTMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>
int nDefaultGestureID[DEFAULTGESTUREMAX]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó
};
#if defined( PRE_ADD_DWC )
struct TDWCCreateData
{
BYTE cClassID; // <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD> ID
BYTE cJobCode1; // 1<><31> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> ID
BYTE cJobCode2; // 2<><32> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> ID
BYTE cLevel;
int nExp;
int nCreateMapIndex; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
int nCreateMapStartPositionX[DEFAULTPOSITIONMAX]; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ X
int nCreateMapStartPositionY[DEFAULTPOSITIONMAX]; // ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ Y
int nCreateMapStartRadius[DEFAULTPOSITIONMAX]; // <20>ݰ<EFBFBD>
int nDefaultBody; // <20><EFBFBD><E2BABB>
int nDefaultLeg; // <20><EFBFBD>ٸ<EFBFBD>
int nDefaultHand; // <20><EFBFBD><E2BABB>
int nDefaultFoot; // <20><EFBFBD><E2BABB>
int nEquipArray[EQUIPMAX]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DWORD dwHairColor;
DWORD dwSkinColor;
DWORD dwEyeColor;
int nDefaultItemID[DEFAULTITEMMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nDefaultItemCount[DEFAULTITEMMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nDefaultSkillID[DEFAULTSKILLMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų
TQuickSlot DefaultQuickSlot[DEFAULTQUICKSLOTMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>
int nDefaultGestureID[DEFAULTGESTUREMAX]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó
short nSkillPoint; // <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
int nGold; // <20><><EFBFBD><EFBFBD> - <20>ʿ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
#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; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ͽý<CDBD><C3BD><EFBFBD>
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; //<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
#endif
#if defined(PRE_ADD_VEHICLE_SPECIAL_ACTION)
bool bVehicleSpecalActionMode;
#endif
};
struct TCoinCountData
{
BYTE cLevel;
int nRebirthCoin[WORLDCOUNTMAX]; // <20><>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD>
int nCashRebirthCoin[WORLDCOUNTMAX]; // <20><>Ȱij<C8B0><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nRebirthCoinLimit; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD>
int nCashRebirthCoinLimit; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD>
int nVIPRebirthCoin; // VIP<49><50>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD>
};
struct TActorData
{
int nActorID;
BYTE cClass; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD>
};
const int QUEST_MAX_CNT = 20;
struct TNpcData
{
int nNpcID;
int nParam[2];
WCHAR wszName[EXTDATANAMELENMAX];
char szTalkFile[256]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
char szScriptFile[256]; // script <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
int QuestIndexArr[QUEST_MAX_CNT]; // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>
TActorData ActorData;
};
struct TItemData
{
int nItemID;
WCHAR wszItemName[EXTDATANAMELENMAX];
int nType; // Ÿ<><C5B8>
int nTypeParam[3]; // Ÿ<><C5B8><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
BYTE cLevelLimit; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE cRank; // <20><><EFBFBD><EFBFBD>
BYTE cReversion; // <20>ͼӿ<CDBC><D3BF><EFBFBD>
bool IsCash; // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>
bool IsDestruction; // <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
bool IsAuthentication; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nAmount; // <20>ݾ<EFBFBD>
int nSellAmount; // <20>Ǹűݾ<C5B1>
int nOverlapCount; // <20><>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>
std::vector<int> nNeedJobClassList; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nSkillID; // <20><>ų <20>ε<EFBFBD><CEB5><EFBFBD>
char cSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD>
char cSkillUsingType; // <20><>ų <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
int nMaxCoolTime; // <20>ִ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><>)
int nEnchantID; // <20><>æƮ<C3A6><C6AE><EFBFBD>̵<EFBFBD>
int nAllowMapType; // <20><><EFBFBD><EFBFBD><EBB0A1><EFBFBD><EFBFBD> <20><> Ÿ<><C5B8>
char cSealCount; // <20>к<EFBFBD> Ƚ<><C8BD>
int nSealID; // SealCountTableID
int nNeedBuyItemID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
int nNeedBuyItemCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD><DBB0><EFBFBD>
int nNeedPvPRank; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> PvP <20><>ũ
bool IsSealed; // ȹ<><C8B9> <20><> <20>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>
int nCashTradeCount; // ij<>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD>
bool IsEnableCostumeMix;
int nApplicableValue;
bool IsCollectingEvent; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> API<50><49> ȣ<><EFBFBD><E2BFA9>
int nExchangeCode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<>װ<EFBFBD><D7B0><EFBFBD> ID
int iNeedBuyLadderPoint;
int iUseLevelLimit;
int iNeedBuyUnionPoint;
int iNeedBuyGuildWarPoint;
bool bRebuyable;
int nPeriod;
#if defined(PRE_ADD_SERVER_WAREHOUSE)
bool IsWStorage; // <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
#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; // <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
int nLength; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nDurability; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nDurabilityRepairCoin; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nPermitJob[10];
bool bOneType;
};
struct TPartData
{
int nPartIndex;
int nParts; // <20><><EFBFBD><EFBFBD>
int nDurability; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nDurabilityRepairCoin; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nPermitJob[10];
std::vector<int> nSubPartsList; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ѹ<EFBFBD><D1B9><EFBFBD>)
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 <20><><EFBFBD><EFBFBD>(?)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> Ű<><C5B0>
int nPetSkillID1; //
int nPetSkillID2;
int nRange; // <20><>ĵ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20≯<EFBFBD><CCB8>׸<EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; // <20>Ҹ<EFBFBD> <20>ð<EFBFBD>(second)
int nFullTic; // ƽ<><C6BD> <20>Ҹ<EFBFBD><D2B8><EFBFBD>
BYTE cFullTimeLogOut; // <20>α׾ƿ<D7BE><C6BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int nFullMaxCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> max<61><78>ġ
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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#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; // <20><>
short wAgility; // <20><>ø
short wIntelligence; // <20><><EFBFBD><EFBFBD>
short wStamina; // <20>ǰ<EFBFBD>
int nExperience; // <20><><EFBFBD><EFBFBD>ġ
int nFatigue; // <20>Ƿε<C7B7>
};
struct TStat
{
USHORT wStr;
USHORT wDex;
USHORT wInt;
USHORT wHealth;
USHORT wLuck;
};
struct TSkillLevelData
{
char cSkillLevel; // <20><>ų <20><><EFBFBD><EFBFBD>
char cLevelLimit; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//int nNeedJobClass; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> <20><>ų <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD>.
int nDelayTime; // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ms)
int nAddRange; // <20>߰<EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD>(cm)
int nNeedItemID; // <20>Ҹ<EFBFBD><D2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nNeedItemDecreaseCount; // <20>Ҹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nDecreaseHP; // <20>Ҹ<EFBFBD>HP
int nDecreaseSP; // <20>Ҹ<EFBFBD>SP
int nNeedSkillPoint;
int nEffectClassValue1Duration;
float nMagicDamage; //rlkt_damage
float nPhyDamage; //rlkt_damage
};
struct TSkillData
{
int nSkillID; // <20><>ųid
char cNeedWeaponType[ 2 ]; // <20>ʿ乫<CABF><E4B9AB>
int nMaxLevel; // <20>ִ뷹<D6B4><EBB7B9>
char cSkillType; // <20><>ųŸ<C5B3><C5B8>
char cDurationType; // <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
char cTargetType; // Ÿ<><C5B8>Ÿ<EFBFBD><C5B8>
char cDissolvable; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nNeedJobID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool bDefaultLocked; // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nUnlockSkillBookItemID; // <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
int nUnlockPrice; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
int nExclusiveID; // <20><> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
int nGlobalCoolTime; // <20>۷ι<DBB7> <20><>ų <20><>Ÿ<EFBFBD><C5B8> (#36858)
int nGlobalSkillGroup; // <20>۷ι<DBB7> <20><>ų <20>׷<EFBFBD> (#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 <20><>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
struct TALK_QUESTION
{
std::wstring szQuestion;
};
struct TALK_ANSWER
{
std::wstring szLinkTarget;
std::wstring szLinkIndex;
std::wstring szAnswer;
bool bOtherTargetLink; // <20>ٸ<EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Ϸ<EFBFBD> <20><>ũ <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> true
};
struct TALK_PARAGRAPH
{
std::wstring szIndex;
TALK_QUESTION Question;
std::vector<TALK_ANSWER> Answers;
};
// key - <20><><EFBFBD>ܽ<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>, second - <20><><EFBFBD><EFBFBD>
typedef std::map<std::wstring, TALK_PARAGRAPH> TALK_PARAGRAPH_MAP;
typedef TALK_PARAGRAPH_MAP::iterator TALK_PARAGRAPH_MAP_IT;
// key - <20><><EFBFBD><EFBFBD>xml <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, second - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü
typedef std::map<std::wstring, TALK_PARAGRAPH_MAP> TALK_MAP;
typedef TALK_MAP::iterator TALK_MAP_IT;
#include <set>
// key - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>佺Ʈ<E4BDBA><C6AE><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> (<28><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û <20><><EFBFBD>Ἲ üũ <20><><EFBFBD><EFBFBD><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>뵵)
typedef std::set<std::wstring> TALK_ANSWER_SET;
typedef TALK_ANSWER_SET::iterator TALK_ANSWER_SET_IT;
// key - <20><><EFBFBD><EFBFBD>xml <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, second - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>佺Ʈ<E4BDBA><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û <20><><EFBFBD>Ἲ üũ <20><><EFBFBD><EFBFBD><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>뵵)
typedef std::map<std::wstring, TALK_ANSWER_SET> TALK_ANSWER_MAP;
typedef TALK_ANSWER_MAP::iterator TALK_ANSWER_MAP_IT;
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6<><36><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>. nItemID <20><> nItemCount<6E><74> <20><>Ʈ<EFBFBD>̴<EFBFBD>.
struct TQuestRewardBase
{
struct _ITEMSET
{
int nItemID;
int nItemCount;
int nItemOptionTableID;
};
};
struct TQuestReward : public TQuestRewardBase
{
UINT nIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
UINT nStringIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><>Ʈ<EFBFBD><C6AE>
char cType; // <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> 1<≯<EFBFBD> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> / 2<><32> <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
char cSelectMax; // <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> <20><EFBFBD><EEB0B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD>.
UINT nCoin; // <20><><EFBFBD><EFBFBD><EFBFBD>ݾ<EFBFBD>
int nExp; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ
int nQuestID; // <20><><EFBFBD><EFBFBD>Ʈ ID
int nQuestStep; // <20><><EFBFBD><EFBFBD>Ʈ <20>Ϸ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
BYTE nClass; // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
_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; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
int nCount; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nMaxCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>
int nPrice; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
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; // <20><> <20><><EFBFBD>̵<EFBFBD> (npc<70><63> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>)
std::vector<TShopTabData> vShopTabData; // SHOPITEMMAX
TShopData()
{
nShopID = 0;
}
};
// Skill Shop
struct TSkillShopItem
{
int nSkillID; // <20><>ų<EFBFBD><C5B3><EFBFBD>̵<EFBFBD>
int nPrice; // <20><>ų <20><><EFBFBD><EFBFBD>
};
struct TSkillShopData
{
int nShopID; // <20><> <20><><EFBFBD>̵<EFBFBD> (npc<70><63> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>)
TSkillShopItem SkillShopItem[SKILLSHOPITEMMAX]; // <20>ִ<EFBFBD> 10<31><30><EFBFBD>ۿ<EFBFBD> <20>ȵȴ<C8B5>
};
// 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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ٿ<EFBFBD><D9BF>׷<EFBFBD><D7B7>̵<EFBFBD>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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ٿ<EFBFBD><D9BF>׷<EFBFBD><D7B7>̵<EFBFBD>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; // <20>κ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
short wCount; // <20><20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>
INT64 biSerial;
};
#ifdef PRE_ADD_GACHA_JAPAN
// gachapon japan
struct TGachaponShopInfoByJob_JP
{
int nGachaponTableID; // <20><>í<EFBFBD><C3AD> <20><><EFBFBD>̺<EFBFBD> ID
int nGachaponIndex; // <20><>í<EFBFBD><C3AD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD>.
int nJobClassID; // <20><> <20><>í<EFBFBD><C3AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD><EFBFBD>
int nPartsLinkDropTableID[ CASHEQUIPMAX ];
};
struct TGachaponData_JP
{
int nGachaponIndex; // <20><>í<EFBFBD><C3AD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD>. npc <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>̰ɷ<CCB0> ã<><C3A3>. <20><><EFBFBD>̺<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20>ƴ<EFBFBD>.
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 //<2F>ʴ<EFBFBD> <20>޴´<DEB4> <20>ȹ޴´<DEB4> <20><><EFBFBD><EFBFBD> <20>ްڴ<DEB0> <20>ȹްڴ<DEB0> <20><><EFBFBD><EFBFBD>
{
_COMMUNITY_NONE = 0,
_COMMUNITY_MSG_PERMIT, //<2F><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> <20>޾<EFBFBD>ȿ~
_COMMUNITY_MSG_NOTPERMIT,//<2F>޼<EFBFBD><DEBC><EFBFBD> <20>ȹ޾<C8B9>ȿ~ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>λ<EFBFBD>!
};
struct sWorldUserState
{
WCHAR wszCharacterName[NAMELENMAX];
INT64 biCharacterDBID; //<2F>ϴ<EFBFBD><CFB4><EFBFBD> Ȥ<><C8A4><EFBFBD><EFBFBD> <20>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
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,
//<2F><> <20>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>..
//_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; // <20>ο<EFBFBD><CEBF><EFBFBD> <20>ɼ<EFBFBD>
bool bIsBreakInto; // <20><><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>Flag
UINT uiItemUsageType; // PvPCommon::ItemUsageType
bool bIsAllowItemDrop; // <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> Flag
bool bIsGuildBattleGround; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> Flag
bool bIsReleaseShow; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
// <20><><EFBFBD>н<EFBFBD> -1 <20><><EFBFBD><EFBFBD>
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; // <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ο<EFBFBD>
UINT uiMaxTeamPlayerDiff; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
short Check( const UINT uiATeam, const UINT uiBTeam, const bool bRandomTeam ) const
{
// <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ο<EFBFBD> <20>˻<EFBFBD>
if( uiATeam < uiMinTeamPlayerNum || uiBTeam < uiMinTeamPlayerNum )
return ERROR_PVP_CANTSTART_LESS_MINTEAMPLAYER;
if (!bRandomTeam) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
{
// <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>˻<EFBFBD>
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 <20><><EFBFBD><EFBFBD>
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)
};
// <20>̼<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct TEventCondition
{
char cEvent;
char cType[5];
int nParam[5];
char cOperator[5];
bool bCheckType;
};
struct TMissionData
{
bool bActivate;
int nType; // <20>̼<EFBFBD>Ÿ<EFBFBD><C5B8>(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% <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID, 1- Īȣ <20>÷<EFBFBD><C3B7><EFBFBD> <20>ϼ<EFBFBD><CFBC><EFBFBD> <20><><EFBFBD><EFBFBD> MailID
#endif //#if defined(PRE_MOD_APPELLATIONBOOK_RENEWAL)
};
// TaxTable
struct TTaxData
{
char cTaxType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (TaxType_PostTax)
int nLevelStart; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nLevelEnd; // <20><> <20><><EFBFBD><EFBFBD>
int nAmountStart; // <20><><EFBFBD>۱ݾ<DBB1> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int nAmountEnd; // <20><><EFBFBD>ݾ<EFBFBD>
float fRate; // <20><><EFBFBD><EFBFBD>
int nTaxAmount; // <20><><EFBFBD><EFBFBD>
};
// Seal
const BYTE SEALENCHANTMAX = 16; // <20>밭ȭ<EBB0AD><C8AD><EFBFBD><EFBFBD> 15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
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 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (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 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
int nLinkSN[COMMODITYLINKMAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ
std::string strName;
short wPeriod; // <20>
int nPrice; // <20><><EFBFBD><EFBFBD>
int nCount; // <20><><EFBFBD>Ž<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nPriority; // ij<>ü<EFBFBD><C3BC><EFBFBD> ǥ<>õǴ<C3B5> <20><EFBFBD><ECBCB1><EFBFBD><EFBFBD>
bool bOnSale; // <20>ǸŻ<C7B8><C5BB><EFBFBD>
bool bOnSaleReal; // <20><>¥(?)<29>ǸŻ<C7B8><C5BB><EFBFBD>
char cState; // HOT, NEW<45><57> <20><><EFBFBD><EFBFBD> ǥ<>ÿ<EFBFBD>
bool bLimit; // <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
bool bReserveGive; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nReserve; // <20><><EFBFBD>Ž<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nValidity; // <20><>ȿ<EFBFBD>
bool bReserveAble; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
bool bPresentAble; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
char cItemSort; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nPriceFix; // <20><><EFBFBD><EFBFBD>
bool bCartAble; // <20><><EFBFBD>ٱ<EFBFBD><D9B1>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD>
bool bVIPSell; // VIP <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>
int nVIPLevel; // VIP <20><><EFBFBD><EFBFBD>
bool bAutomaticPay; // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nAutomaticPaySale; // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nVIPPoint; // <20><><EFBFBD>Ž<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> VIPPoint
int nOverlapBuy; // <20>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>
#if defined(PRE_ADD_CASH_REFUND)
bool bNoRefund; // û<><C3BB> öȸ <20>Ұ<EFBFBD><D2B0>ɿ<EFBFBD><C9BF><EFBFBD>(true : <20>Ұ<EFBFBD><D2B0><EFBFBD>)
#endif
#if defined(PRE_ADD_CASHSHOP_CREDIT)
bool bCreditAble; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nCreditAbleLevel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#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; // <20><20>Ұ<EFBFBD><D2B0><EFBFBD>
#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; // <20><>Ű<EFBFBD><C5B0><EFBFBD>Ǹ<EFBFBD>SN
std::vector<int> nVecCommoditySN;
TCashPackageData()
{
nSN = 0;
nVecCommoditySN.clear();
}
};
struct TCashLimitData
{
int nSN; // <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD> <20><>ǰ SN
time_t tStartDate; // _StartDate <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t tEndDate; // _EndDate <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nBuyAbleCount; // ij<><C4B3><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD>Ű<EFBFBD><C5B0><EFBFBD>Ƚ<EFBFBD><C8BD>
#if defined(PRE_ADD_LIMITED_CASHITEM)
int nLimitedSellCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM)
};
struct TVIPData
{
int nVipID; // VIPTable<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
int nMonthItemSN; // ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ <20>ѹ<EFBFBD> (30<33><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20>ֱ<EFBFBD>)
int nMailID[4]; // 0:<3A><><EFBFBD>񽺸<EFBFBD><F1BDBAB8><EFBFBD> 7<><37><EFBFBD><EFBFBD>, 1:<3A><><EFBFBD>񽺸<EFBFBD><F1BDBAB8><EFBFBD> 1<><31><EFBFBD><EFBFBD>, 2:<3A><><EFBFBD>񽺸<EFBFBD><F1BDBAB8><EFBFBD><EFBFBD><EFBFBD>, 3:<3A>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>
int nAutoPayItemSN; // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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, // <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>Ʈ
ShandaPromotion = 2, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD>̺<EFBFBD>Ʈ
CombackUser = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>Ʈ
LevelupNew = 4, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (<28>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̻<EFBFBD> <20><><EFBFBD>޴<EFBFBD> <20><><EFBFBD><EFBFBD>)
ComeBackUserInven = 5, // <20><>ȯ<EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20>ٷ<EFBFBD> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
NewbieQuitReward = 6, //<2F>ű<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
NewbieReconnectReward = 7, //<2F>ű<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ComeBackUserQuitReward = 8, //<2F><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
int nLevel; // Player ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
char cClassID; // Ŭ<><C5AC><EFBFBD><EFBFBD>
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; // <20><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20>޼<EFBFBD> <20><><EFBFBD><EFBFBD>
int iNpcPresentRepute2; // <20><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20>޼<EFBFBD> <20><><EFBFBD><EFBFBD>
int iNpcPresentID1; // NpcPresentRepute1 <20>޼<EFBFBD> <20><> NPC<50><43> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> 1 ItemID
int iNpcPresentID2; // NpcPresentRepute1 <20>޼<EFBFBD> <20><> NPC<50><43> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> 2 ItemID
#else
std::vector<int> iQuestIDs;
#endif // #if defined( PRE_ADD_REPUTATION_EXPOSURE )
int iMaxFavor; // ȣ<><C8A3> <20>ִ<EFBFBD>ġ
int iTakeFavorPerDay; // 1<>ϴ<EFBFBD> <20><><EFBFBD>̴<EFBFBD> ȣ<><C8A3> <20><>ġ
int iMaxMalice; // <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>ġ
int iAddMalicePerDay; // 1<>ϴ<EFBFBD> <20>ö󰡴<C3B6> <20><><EFBFBD><EFBFBD> <20><>ġ
int iPresentIDArr[6]; // <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
std::vector<int> vFavorNpcID; // ȣ<><C8A3> NPC <20><><EFBFBD><EFBFBD>Ʈ
std::vector<int> vMaliceNpcID; // <20><><EFBFBD><EFBFBD> NPC <20><><EFBFBD><EFBFBD>Ʈ
int iFavorGroupBomb;
int iMaliceGroupBomb;
int iMailID[NpcReputation::Common::MaxMailCount];
int iMailRand[NpcReputation::Common::MaxMailCount];
int iPlusItemID;
int iPlusProb;
int iUnionID;
int iPresentPointArr[6]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
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 )
{
// Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD>!
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
{
// <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> StoreBenefit <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>ȵ<EFBFBD>.
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; // <20><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8>
#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; // <20><><EFBFBD><EFBFBD>(ms)
int iSuccessProbability;
int iSuccessUpExp;
int iRecipeUpExp;
int iMaterialItemID[SecondarySkill::ManufactureSkill::MaxMaterialItemCount];
int iMaterialItemCount[SecondarySkill::ManufactureSkill::MaxMaterialItemCount];
int iSuccessCount;
// <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemID <20><><EFBFBD><EFBFBD>
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; // <20><><EFBFBD>ѽɱ<D1BD> <20><> <20><><EFBFBD><EFBFBD>ġ
int iSkillPointWater; // <20><><EFBFBD>ֱ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ġ
int iCatalystCount; // <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
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; //<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>
int nSecondarySkillLevel; //<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>
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: <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> 2: <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> 3: Ư<><C6AF><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> (eGlyphType)
char cGlyphRank; // 1: <20><><EFBFBD><EFBFBD> 2: <20><><EFBFBD><EFBFBD> 3: <20><><EFBFBD><EFBFBD> 4: <20><><EFBFBD><EFBFBD>ũ (eItemRank)
int nCharge;
};
struct TCharmItem
{
#if defined(PRE_FIX_68828)
int nCharmID; // <20><><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> ID
#endif
int nItemID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȹ<><C8B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nProb; // Ȯ<><C8AE>
int nPeriod; // <20>
int nAccumulationProb;
int nGold;
bool bMsg;
};
struct TCharmItemData
{
int nCharmNo; // <20>ŷ¾<C5B7><C2BE><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
std::vector<TCharmItem> CharmItemList;
};
const BYTE CharmItemKeyMax = 5;
struct TCharmItemKeyData
{
int nCharmItemID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȹ<><C8B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nProb; // Ȯ<><C8AE>
int nPeriod; // <20>
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, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
SERVERMONITOR_LEVEL_ADMIN, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD>
SERVERMONITOR_LEVEL_SUPERADMIN, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
};
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;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>
struct TGuildWarRewardData
{
char cType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>..eGuildWarRewardType
char cClass; // Ŭ<><C5AC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ó, <20>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD>)
int nMailID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
int nPresentID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
int nGuildFestivalPoint; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
int nGuildPoint; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
};
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]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>
int nBossSpawnAreaID[PvPCommon::TeamIndex::Max]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ
};
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; //<2F><><EFBFBD>ɽ<EFBFBD> ȹ<><C8B9><EFBFBD><EFBFBD>
int nGainResource; //ȹƯ<C8B9>ҽ<EFBFBD> ȹ<>
int nRequireTryTick; //ȹ<><C8B9><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF>ð<EFBFBD>
int nCompleteOccupationTick; //Ŭ<><C5AC><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD>ɱ<EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>
int nBonusBuffID;
//Ŭ<><C5AC><EFBFBD≯<EFBFBD><CCB8><EFBFBD>~
int nClimaxGainTermTick;
int nClimaxGainVal;
int nClimaxTryTick;
int nClimaxCompleteOccupationTick;
};
struct TBattleGroundEffectValue
{
int nSkillID;
int nSkillLevel;
int nNeedSkillPoint; //ȹ<><C8B9><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD>Ʈ
int nUseResPoint; //<2F><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
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; //ȹ<><C8B9><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD>Ʈ
nUseResPoint = 0; //<2F><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
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 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><>ųŸ<C5B3>Կ<EFBFBD> <20>״<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ұ<EFBFBD> <20>ؼ<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD>
int nSkillDurationType; //CDnSkill::DurationTypeEnum
int nSkillTargetType; //CDnSkill::TargetTypeEnum
int nEffectType[PvPCommon::Common::MaximumEffectCount];
int nEffectApplyType[PvPCommon::Common::MaximumEffectCount];
int nProcess; //<2F><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD>
int nCanDuplicate; //<2F><>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>?
};
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<30><30><EFBFBD><EFBFBD>
float fMasterGainExp;
//int nMasterGainItemID;
//int nMasterGainItemCount;
float fAddGainExp;
float fDefense;
float fCritical;
float fFinalDamage;
#if defined(PRE_ADD_TALISMAN_SYSTEM)
int iTalismanCost; // Ż<><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><>ġ<EFBFBD><C4A1>ȯ <20><><EFBFBD><EFBFBD>
#endif
};
struct TMasterSysFeelTableInfo
{
int nMinFeel;
int nMaxFeel;
int nAddExp; //(%<25><><EFBFBD><EFBFBD>)
};
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, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
DBJOB_GUILDWAR_STATS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DBJOB_SYSTEM_MAX,
};
enum eDBJobSystemStatus
{
JOB_STATUS_RESERVE, // <20><><EFBFBD><EFBFBD>
JOB_STATUS_COMPLETED, // <20>Ϸ<EFBFBD>
JOB_STATUS_DOING, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JOB_STATUS_FAIL, // <20><><EFBFBD><EFBFBD>
};
struct TGuildRewardItemData
{
int nItemID; // <20><><EFBFBD><EFBFBD><E5BAB8><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>̵<EFBFBD>
short nNeedGuildLevel; // <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E5B7B9>
int nNeedGold; // <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nItemType; // <20><><EFBFBD><EFBFBD><E5BAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
int nTypeParam1;
int nTypeParam2;
bool bCheckInven; // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> üũ
bool bEternity; // 0:<3A><EFBFBD><E2B0A3> 1:<3A><><EFBFBD><EFBFBD>
int nPeriod; // <20>
bool bCheckMaster; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üũ <20><><EFBFBD><EFBFBD>
int nCheckType; // <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> üũ(0:NONE 1:ITEMID 2:<3A><><EFBFBD>帶ũ
int nCheckID; // <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><DBBE>̵<EFBFBD>
};
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; // <20><><EFBFBD><EFBFBD> ID
int nUseItemSN[MAX_SALE_USEITEM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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; // <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><DBBE>̵<EFBFBD>
int nMaxCount; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
int nSwapItemID; // <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><DBBE>̵<EFBFBD>
};
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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
BYTE cLevelLimit; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
BYTE cEnchantLevel; // <20><>ȭ <20><><EFBFBD><EFBFBD>
int nNeedCoin; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nNeedItemID1; // <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
short wNeedItemCount1; // <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB>Ʈ1
int nNeedItemID2; // <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
short wNeedItemCount2; // <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB>Ʈ2
};
#endif //#if defined(PRE_ADD_EXCHANGE_ENCHANT)
#if defined( PRE_WORLDCOMBINE_PARTY )
namespace WorldCombineParty
{
enum eType
{
MAXSKILLCOUNT = 2,
};
struct WrldCombinePartyData
{
BYTE cIndex; // <20>ε<EFBFBD><CEB5><EFBFBD>
BYTE cGroupIndex; // <20>׷<EFBFBD><D7B7>ε<EFBFBD><CEB5><EFBFBD>
WCHAR wszPartyName[PARTYNAMELENMAX];
int nWorldMap; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nTargetMap; // Ÿ<>ٸ<EFBFBD>(<28><><EFBFBD>ذ<EFBFBD>)
ePartyType PartyType; // <20><>ƼŸ<C6BC><C5B8>
BYTE cPartyMemberMax;
int nItemID; // <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>
TDUNGEONDIFFICULTY Difficulty;
TPARTYITEMLOOTRULE ItemLootRule; //ePartyItemLootRule <20><><EFBFBD><EFBFBD>
TITEMRANK ItemRank; //<2F><><EFBFBD><EFBFBD><EFBFBD>۷<EFBFBD>ũ(<28><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>ȹ<EFBFBD><C8B9><EFBFBD><EFBFBD>)
BYTE cUserLvLimitMin; //<2F>θƽ<CEB8><C6BD><EFBFBD><EFBFBD><EFBFBD> <20>ִܴ<D6B4>.
int iBitFlag;
int nSkillID[MAXSKILLCOUNT]; // <20><>ų<EFBFBD><C5B3><EFBFBD>̵<EFBFBD>
};
}
#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; // %<25><>
};
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<68><70><EFBFBD><EFBFBD> <20><> <20>϶<EFBFBD>
Event_2 = 2, // 2. <20><><EFBFBD>ݷ<EFBFBD> <20><>ȭ <20><> <20><>ȭ
Event_3 = 3, // 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ <20><> <20><>ȭ
Event_4 = 4, // 4. <20><>ȭ Ȯ<><C8AE> <20><><EFBFBD><EFBFBD>
Event_5 = 5, // 5. <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
Event_6 = 6, // 6. <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
Event_7 = 7, // 7. ģ<><C4A3> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> (<28><>ģ<EFBFBD>ƴ<EFBFBD>, <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>)
Event_8 = 8, // 8. ȣ<><C8A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Event_9 = 9, // 9. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈȹ<C6AE><20><><EFBFBD><EFBFBD>
Event_10 = 10, // 10. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
}
#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; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
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; //<2F><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Խ<EFBFBD> <20>ּҷ<D6BC><D2B7><EFBFBD>
int nJoinMaxLevel; //<2F><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Խ<EFBFBD> <20>ִ뷹<D6B4><EBB7B9>
int nFirstJoinMailID; //<2F><><EFBFBD>ʰ<EFBFBD><CAB0>Խ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><CFBE>̵<EFBFBD>
int nMaxLevelGuildSupportMailID; //<2F><><EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>
};
#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; //<2F><>ID
int nDropType;
int nNeedItemID[3]; //<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
int nDropItemGroupID[3]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۱׷<DBB1>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<6C><65> ID<49><44> <20><>Ī<EFBFBD>Ǵ<EFBFBD> <20><>
int nEnchantCount; //<2F><>æƮ<C3A6><C6AE> <20><EFBFBD><EEB0B3><EFBFBD><EFBFBD> ī<><C4AB>Ʈ
int nEnchantOption[20]; //<2F><>æƮ <20><><EFBFBD><EFBFBD>
int nEnchantProb[20]; //<2F><>æƮ<C3A6><C6AE> <20><><EFBFBD>õ<EFBFBD> Ȯ<><C8AE>
};
#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 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BYTE cType;
std::set<int> setAssignmentID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nMailID4; // 3<><33> <20><><EFBFBD><EFBFBD>
int nMailID7; // 5<><35> <20><><EFBFBD><EFBFBD>
};
struct TStampTableData // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD>
{
INT64 biStartTime;
std::vector<TStampChallenge> vChallengeList;
};
}
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL)
struct TPrevPotentialData
{
int nItemID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
INT64 nSerial; //<2F>ø<EFBFBD><C3B8><EFBFBD>
char cPotential; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
char cOption; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
char cNowPotential; //<2F><><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char cPotentialMoveCount; //(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ī<><C4AB>Ʈ
INT64 nPotentialItemSerial; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD>
int nPotentialItemID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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 // <20>ּ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> Ÿ<><C5B8>
{
CheckMinTime = 60 * 1000, // 1<><31>
};
enum eAbuseCount // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AbuseCount<6E><74>
{
AbuseCount = 10,
};
// CheckTime<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǻ<EFBFBD><C7BA>Ѵ<EFBFBD>
struct IgnoreMapIndex
{
enum eIgnoreMapIndex
{
MAP_CHAOSE_FIELD_BossA = 15157, //ȥ<><C8A5><EFBFBD><EFBFBD> ƴ <20>ĸ<EFBFBD><C4B8><EFBFBD>
MAP_CHAOSE_FIELD_32Lv_BossA = 15167, //ȥ<><C8A5><EFBFBD><EFBFBD> ƴ <20><><EFBFBD>̶<EFBFBD>
MAP_CHAOSE_FIELD_24Lv_BossA = 15174, // ȥ<><C8A5><EFBFBD><EFBFBD> ƴ ī<><C4AB><EFBFBD><EFBFBD>
};
};
};
#endif // #if defined(PRE_ADD_STAGECLEAR_TIMECHECK)