char.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef _CHAR_SQL_H_
  4. #define _CHAR_SQL_H_
  5. #define DB_NAME_LEN 256 //max len of dbs
  6. #include "../config/core.h"
  7. #include "../common/core.h" // CORE_ST_LAST
  8. #include "../common/msg_conf.h"
  9. #include "../common/mmo.h"
  10. extern int login_fd; //login file descriptor
  11. extern int char_fd; //char file descriptor
  12. enum E_CHARSERVER_ST {
  13. CHARSERVER_ST_RUNNING = CORE_ST_LAST,
  14. CHARSERVER_ST_STARTING,
  15. CHARSERVER_ST_SHUTDOWN,
  16. CHARSERVER_ST_LAST
  17. };
  18. enum {
  19. TABLE_INVENTORY,
  20. TABLE_CART,
  21. TABLE_STORAGE,
  22. TABLE_GUILD_STORAGE,
  23. };
  24. struct Schema_Config {
  25. int db_use_sqldbs;
  26. char db_path[1024];
  27. char char_db[DB_NAME_LEN];
  28. char scdata_db[DB_NAME_LEN];
  29. char skillcooldown_db[DB_NAME_LEN];
  30. char cart_db[DB_NAME_LEN];
  31. char inventory_db[DB_NAME_LEN];
  32. char charlog_db[DB_NAME_LEN];
  33. char storage_db[DB_NAME_LEN];
  34. char interlog_db[DB_NAME_LEN];
  35. char reg_db[DB_NAME_LEN];
  36. char skill_db[DB_NAME_LEN];
  37. char memo_db[DB_NAME_LEN];
  38. char guild_db[DB_NAME_LEN];
  39. char guild_alliance_db[DB_NAME_LEN];
  40. char guild_castle_db[DB_NAME_LEN];
  41. char guild_expulsion_db[DB_NAME_LEN];
  42. char guild_member_db[DB_NAME_LEN];
  43. char guild_position_db[DB_NAME_LEN];
  44. char guild_skill_db[DB_NAME_LEN];
  45. char guild_storage_db[DB_NAME_LEN];
  46. char party_db[DB_NAME_LEN];
  47. char pet_db[DB_NAME_LEN];
  48. char mail_db[DB_NAME_LEN]; // MAIL SYSTEM
  49. char auction_db[DB_NAME_LEN]; // Auctions System
  50. char friend_db[DB_NAME_LEN];
  51. char hotkey_db[DB_NAME_LEN];
  52. char quest_db[DB_NAME_LEN];
  53. char homunculus_db[DB_NAME_LEN];
  54. char skill_homunculus_db[DB_NAME_LEN];
  55. char mercenary_db[DB_NAME_LEN];
  56. char mercenary_owner_db[DB_NAME_LEN];
  57. char ragsrvinfo_db[DB_NAME_LEN];
  58. char elemental_db[DB_NAME_LEN];
  59. char bonus_script_db[DB_NAME_LEN];
  60. };
  61. extern struct Schema_Config schema_config;
  62. /// Pincode system
  63. enum pincode_state {
  64. PINCODE_OK = 0,
  65. PINCODE_ASK = 1,
  66. PINCODE_NOTSET = 2,
  67. PINCODE_EXPIRED = 3,
  68. PINCODE_NEW = 4,
  69. PINCODE_PASSED = 7,
  70. PINCODE_WRONG = 8,
  71. PINCODE_MAXSTATE
  72. };
  73. struct Pincode_Config {
  74. bool pincode_enabled;
  75. int pincode_changetime;
  76. int pincode_maxtry;
  77. bool pincode_force;
  78. };
  79. struct CharMove_Config {
  80. bool char_move_enabled;
  81. bool char_movetoused;
  82. bool char_moves_unlimited;
  83. };
  84. struct Char_Config {
  85. int char_per_account; //Maximum chars per account (default unlimited) [Sirius]
  86. int char_del_level; //From which level u can delete character [Lupus]
  87. int char_del_delay; //minimum delay before effectly do the deletion
  88. bool name_ignoring_case; // Allow or not identical name for characters but with a different case by [Yor]
  89. char unknown_char_name[NAME_LENGTH]; // Name to use when the requested name cannot be determined
  90. char char_name_letters[1024]; // list of letters/symbols allowed (or not) in a character name. by [Yor]
  91. int char_name_option; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
  92. int char_del_option; // Character deletion type, email = 1, birthdate = 2 (default)
  93. };
  94. #define TRIM_CHARS "\255\xA0\032\t\x0A\x0D " //The following characters are trimmed regardless because they cause confusion and problems on the servers. [Skotlex]
  95. struct CharServ_Config {
  96. char userid[24];
  97. char passwd[24];
  98. char server_name[20];
  99. char wisp_server_name[NAME_LENGTH];
  100. char login_ip_str[128];
  101. uint32 login_ip;
  102. uint16 login_port;
  103. char char_ip_str[128];
  104. uint32 char_ip;
  105. char bind_ip_str[128];
  106. uint32 bind_ip;
  107. uint16 char_port;
  108. int char_maintenance;
  109. bool char_new;
  110. int char_new_display;
  111. struct CharMove_Config charmove_config;
  112. struct Char_Config char_config;
  113. struct Pincode_Config pincode_config;
  114. int save_log; // show loading/saving messages
  115. int log_char; // loggin char or not [devil]
  116. int log_inter; // loggin inter or not [devil]
  117. int char_check_db; ///cheking sql-table at begining ?
  118. struct point start_point; // Initial position the player will spawn on server
  119. int console;
  120. int max_connect_user;
  121. int gm_allow_group;
  122. int autosave_interval;
  123. int start_zeny;
  124. int guild_exp_rate;
  125. char default_map[MAP_NAME_LENGTH];
  126. unsigned short default_map_x;
  127. unsigned short default_map_y;
  128. };
  129. extern struct CharServ_Config charserv_config;
  130. #define MAX_MAP_SERVERS 30 //how many mapserver a char server can handle
  131. struct mmo_map_server {
  132. int fd;
  133. uint32 ip;
  134. uint16 port;
  135. int users;
  136. unsigned short map[MAX_MAP_PER_SERVER];
  137. };
  138. extern struct mmo_map_server map_server[MAX_MAP_SERVERS];
  139. #define AUTH_TIMEOUT 30000
  140. struct auth_node {
  141. uint32 account_id;
  142. uint32 char_id;
  143. uint32 login_id1;
  144. uint32 login_id2;
  145. uint32 ip;
  146. int sex;
  147. time_t expiration_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
  148. int group_id;
  149. unsigned changing_mapservers : 1;
  150. uint8 version;
  151. };
  152. DBMap* char_get_authdb(); // uint32 account_id -> struct auth_node*
  153. struct online_char_data {
  154. uint32 account_id;
  155. uint32 char_id;
  156. int fd;
  157. int waiting_disconnect;
  158. short server; // -2: unknown server, -1: not connected, 0+: id of server
  159. bool pincode_success;
  160. };
  161. DBMap* char_get_onlinedb(); // uint32 account_id -> struct online_char_data*
  162. struct char_session_data {
  163. bool auth; // whether the session is authed or not
  164. uint32 account_id, login_id1, login_id2;
  165. int sex;
  166. int found_char[MAX_CHARS]; // ids of chars on this account
  167. char email[40]; // e-mail (default: a@a.com) by [Yor]
  168. time_t expiration_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
  169. int group_id; // permission
  170. uint8 char_slots; // total number of characters that can be created
  171. uint8 chars_vip;
  172. uint8 chars_billing;
  173. uint32 version;
  174. uint8 clienttype;
  175. char new_name[NAME_LENGTH];
  176. char birthdate[10+1]; // YYYY-MM-DD
  177. // Pincode system
  178. char pincode[PINCODE_LENGTH+1];
  179. uint32 pincode_seed;
  180. time_t pincode_change;
  181. uint16 pincode_try;
  182. // Addon system
  183. int bank_vault;
  184. unsigned int char_moves[MAX_CHARS]; // character moves left
  185. uint8 isvip;
  186. time_t unban_time[MAX_CHARS];
  187. int charblock_timer;
  188. uint8 flag; // &1 - Retrieving guild bound items
  189. };
  190. struct mmo_charstatus;
  191. DBMap* char_get_chardb(); // uint32 char_id -> struct mmo_charstatus*
  192. //Custom limits for the fame lists. [Skotlex]
  193. extern int fame_list_size_chemist;
  194. extern int fame_list_size_smith;
  195. extern int fame_list_size_taekwon;
  196. // Char-server-side stored fame lists [DracoRPG]
  197. extern struct fame_list smith_fame_list[MAX_FAME_LIST];
  198. extern struct fame_list chemist_fame_list[MAX_FAME_LIST];
  199. extern struct fame_list taekwon_fame_list[MAX_FAME_LIST];
  200. #define DEFAULT_AUTOSAVE_INTERVAL 300*1000
  201. #define MAX_CHAR_BUF 144 //Max size (for WFIFOHEAD calls)
  202. int char_search_mapserver(unsigned short map, uint32 ip, uint16 port);
  203. int char_lan_subnetcheck(uint32 ip);
  204. int char_count_users(void);
  205. DBData char_create_online_data(DBKey key, va_list args);
  206. int char_db_setoffline(DBKey key, DBData *data, va_list ap);
  207. void char_set_char_online(int map_id, uint32 char_id, uint32 account_id);
  208. void char_set_char_offline(uint32 char_id, uint32 account_id);
  209. void char_set_all_offline(int id);
  210. void char_disconnect_player(uint32 account_id);
  211. int char_chardb_waiting_disconnect(int tid, unsigned int tick, int id, intptr_t data);
  212. int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p);
  213. int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p);
  214. int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_everything);
  215. int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf);
  216. int char_delete_char_sql(uint32 char_id);
  217. int char_rename_char_sql(struct char_session_data *sd, uint32 char_id);
  218. int char_divorce_char_sql(int partner_id1, int partner_id2);
  219. int char_memitemdata_to_sql(const struct item items[], int max, int id, int tableswitch);
  220. void disconnect_player(uint32 account_id);
  221. int char_married(int pl1,int pl2);
  222. int char_child(int parent_id, int child_id);
  223. int char_family(int pl1,int pl2,int pl3);
  224. int char_request_accreg2(uint32 account_id, uint32 char_id);
  225. int char_save_accreg2(unsigned char* buf, int len);
  226. //extern bool char_gm_read;
  227. int char_loadName(uint32 char_id, char* name);
  228. int char_check_char_name(char * name, char * esc_name);
  229. void char_pincode_decrypt( uint32 userSeed, char* pin );
  230. int char_pincode_compare( int fd, struct char_session_data* sd, char* pin );
  231. void char_auth_ok(int fd, struct char_session_data *sd);
  232. void char_set_charselect(uint32 account_id);
  233. void char_read_fame_list(void);
  234. #if PACKETVER >= 20120307
  235. int char_make_new_char_sql(struct char_session_data* sd, char* name_, int slot, int hair_color, int hair_style);
  236. #else
  237. int char_make_new_char_sql(struct char_session_data* sd, char* name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style);
  238. #endif
  239. void char_set_session_flag_(int account_id, int val, bool set);
  240. #define char_set_session_flag(account_id, val) ( char_set_session_flag_((account_id), (val), true) )
  241. #define char_unset_session_flag(account_id, val) ( char_set_session_flag_((account_id), (val), false) )
  242. //For use in packets that depend on an sd being present [Skotlex]
  243. #define FIFOSD_CHECK(rest) { if(RFIFOREST(fd) < rest) return 0; if (sd==NULL || !sd->auth) { RFIFOSKIP(fd,rest); return 0; } }
  244. #define msg_config_read(cfgName) char_msg_config_read(cfgName)
  245. #define msg_txt(msg_number) char_msg_txt(msg_number)
  246. #define do_final_msg() char_do_final_msg()
  247. int char_msg_config_read(char *cfgName);
  248. const char* char_msg_txt(int msg_number);
  249. void char_do_final_msg(void);
  250. bool char_config_read(const char* cfgName, bool normal);
  251. #endif /* _CHAR_SQL_H_ */