diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2011-09-10 16:12:07 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2011-09-10 16:12:07 -0700 |
commit | f841b6fdcc802e73d52da0e67ee192c0c2c1c7e1 (patch) | |
tree | d9b013ab252968ec1e90e721f7b2ab819af0acb0 /src/char/char.c | |
parent | 5939e1bec75f2550d3ce109b9cd9a5d22c0626c2 (diff) | |
parent | 723fb5d3431b847526c433a13aa74485cfb564a3 (diff) | |
download | tmwa-f841b6fdcc802e73d52da0e67ee192c0c2c1c7e1.tar.gz tmwa-f841b6fdcc802e73d52da0e67ee192c0c2c1c7e1.tar.bz2 tmwa-f841b6fdcc802e73d52da0e67ee192c0c2c1c7e1.tar.xz tmwa-f841b6fdcc802e73d52da0e67ee192c0c2c1c7e1.zip |
Merge commit '723fb5d3431b847526c433a13aa74485cfb564a3'
Diffstat (limited to 'src/char/char.c')
-rw-r--r-- | src/char/char.c | 385 |
1 files changed, 161 insertions, 224 deletions
diff --git a/src/char/char.c b/src/char/char.c index 07b1fb6..59dea17 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -18,12 +18,12 @@ #include <stdarg.h> #include <sys/wait.h> -#include "core.h" -#include "socket.h" -#include "timer.h" -#include "mmo.h" -#include "version.h" -#include "lock.h" +#include "../common/core.h" +#include "../common/socket.h" +#include "../common/timer.h" +#include "../common/mmo.h" +#include "../common/version.h" +#include "../common/lock.h" #include "char.h" #include "inter.h" @@ -199,7 +199,7 @@ int search_character_index (char *character_name) for (i = 0; i < char_num; i++) { // Without case sensitive check (increase the number of similar character names found) - if (stricmp (char_dat[i].name, character_name) == 0) + if (strcasecmp (char_dat[i].name, character_name) == 0) { // Strict comparison (if found, we finish the function immediatly with correct value) if (strcmp (char_dat[i].name, character_name) == 0) @@ -427,7 +427,7 @@ int mmo_char_fromstr (char *str, struct mmo_charstatus *p) } } - if (strcmpi (wisp_server_name, p->name) == 0) + if (strcasecmp (wisp_server_name, p->name) == 0) { printf ("mmo_auth_init: ******WARNING: character name has wisp server name.\n"); @@ -442,7 +442,7 @@ int mmo_char_fromstr (char *str, struct mmo_charstatus *p) } if (str[next] == '\n' || str[next] == '\r') - return 1; // �V�K�f�[�^ + return 1; // 新規データ next++; @@ -557,7 +557,7 @@ int mmo_char_fromstr (char *str, struct mmo_charstatus *p) for (i = 0; str[next] && str[next] != '\t' && str[next] != '\n' && str[next] != '\r'; i++) - { // global_reg����ȑO��athena.txt�݊��̂��߈ꉞ'\n'�`�F�b�N + { // global_reg実装以前のathena.txt互換のため一応'\n'チェック if (sscanf (str + next, "%[^,],%d%n", p->global_reg[i].str, &p->global_reg[i].value, &len) != 2) @@ -592,18 +592,8 @@ int mmo_char_init (void) FILE *fp; char_max = 256; - char_dat = calloc (sizeof (struct mmo_charstatus) * 256, 1); - if (!char_dat) - { - printf ("out of memory: mmo_char_init (calloc of char_dat).\n"); - exit (1); - } - online_chars = calloc (sizeof (int) * 256, 1); - if (!online_chars) - { - printf ("out of memory: mmo_char_init (calloc of online_chars).\n"); - exit (1); - } + CREATE (char_dat, struct mmo_charstatus, 256); + CREATE (online_chars, int, 256); for (i = 0; i < char_max; i++) online_chars[i] = -1; @@ -640,27 +630,8 @@ int mmo_char_init (void) if (char_num >= char_max) { char_max += 256; - char_dat = - realloc (char_dat, sizeof (struct mmo_charstatus) * char_max); - if (!char_dat) - { - printf - ("Out of memory: mmo_char_init (realloc of char_dat).\n"); - char_log - ("Out of memory: mmo_char_init (realloc of char_dat)." - RETCODE); - exit (1); - } - online_chars = realloc (online_chars, sizeof (int) * char_max); - if (!online_chars) - { - printf - ("Out of memory: mmo_char_init (realloc of online_chars).\n"); - char_log - ("Out of memory: mmo_char_init (realloc of online_chars)." - RETCODE); - exit (1); - } + RECREATE (char_dat, struct mmo_charstatus, char_max); + RECREATE (online_chars, int, char_max); for (i = char_max - 256; i < char_max; i++) online_chars[i] = -1; } @@ -829,7 +800,7 @@ void mmo_char_sync (void) //---------------------------------------------------- // Function to save (in a periodic way) datas in files //---------------------------------------------------- -int mmo_char_sync_timer (int tid, unsigned int tick, int id, int data) +void mmo_char_sync_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) { if (pid != 0) { @@ -839,14 +810,14 @@ int mmo_char_sync_timer (int tid, unsigned int tick, int id, int data) // Need to check status too? if (temp == 0) { - return 0; + return; } } // This can take a lot of time. Fork a child to handle the work and return at once // If we're unable to fork just continue running the function normally if ((pid = fork ()) > 0) - return 0; + return; mmo_char_sync (); inter_save (); @@ -854,8 +825,6 @@ int mmo_char_sync_timer (int tid, unsigned int tick, int id, int data) // If we're a child we should suicide now. if (pid == 0) _exit (0); - - return 0; } //---------------------------------------------------- @@ -972,7 +941,7 @@ int make_new_char (int fd, unsigned char *dat) { if ((name_ignoring_case != 0 && strcmp (char_dat[i].name, dat) == 0) || (name_ignoring_case == 0 - && strcmpi (char_dat[i].name, dat) == 0)) + && strcasecmp (char_dat[i].name, dat) == 0)) { char_log ("Make new char error (name already exists): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %s), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." @@ -1009,25 +978,8 @@ int make_new_char (int fd, unsigned char *dat) if (char_num >= char_max) { char_max += 256; - char_dat = - realloc (char_dat, sizeof (struct mmo_charstatus) * char_max); - if (!char_dat) - { - printf ("Out of memory: make_new_char (realloc of char_dat).\n"); - char_log ("Out of memory: make_new_char (realloc of char_dat)." - RETCODE); - exit (1); - } - online_chars = realloc (online_chars, sizeof (int) * char_max); - if (!online_chars) - { - printf - ("Out of memory: make_new_char (realloc of online_chars).\n"); - char_log - ("Out of memory: make_new_char (realloc of online_chars)." - RETCODE); - exit (1); - } + RECREATE (char_dat, struct mmo_charstatus, char_max); + RECREATE (online_chars, int, char_max); for (j = char_max - 256; j < char_max; j++) online_chars[j] = -1; } @@ -1282,9 +1234,9 @@ void create_online_files (void) { char *p_name = char_dat[i].name; //speed up sorting when there are a lot of players. But very rarely players have same name. for (j = 0; j < players; j++) - if (stricmp (p_name, char_dat[id[j]].name) < 0 || + if (strcasecmp (p_name, char_dat[id[j]].name) < 0 || // if same name, we sort with case sensitive. - (stricmp (p_name, char_dat[id[j]].name) == 0 && + (strcasecmp (p_name, char_dat[id[j]].name) == 0 && strcmp (p_name, char_dat[id[j]].name) < 0)) { for (k = players; k > j; k--) @@ -1299,7 +1251,7 @@ void create_online_files (void) if (char_dat[i].zeny < char_dat[id[j]].zeny || // if same number of zenys, we sort by name. (char_dat[i].zeny == char_dat[id[j]].zeny && - stricmp (char_dat[i].name, + strcasecmp (char_dat[i].name, char_dat[id[j]].name) < 0)) { for (k = players; k > j; k--) @@ -1348,10 +1300,10 @@ void create_online_files (void) { int cpm_result; // A lot of player maps are identical. So, test if done often twice. for (j = 0; j < players; j++) - if ((cpm_result = strcmp (char_dat[i].last_point.map, char_dat[id[j]].last_point.map)) < 0 || // no map are identical and with upper cases (not use stricmp) + if ((cpm_result = strcmp (char_dat[i].last_point.map, char_dat[id[j]].last_point.map)) < 0 || // no map are identical and with upper cases (not use strcasecmp) // if same map name, we sort by name. (cpm_result == 0 && - stricmp (char_dat[i].name, + strcasecmp (char_dat[i].name, char_dat[id[j]].name) < 0)) { for (k = players; k > j; k--) @@ -1851,17 +1803,17 @@ int disconnect_player (int accound_id) return 0; } -// �L�����폜�ɔ����f�[�^�폜 +// キャラ削除に伴うデータ削除 static int char_delete (struct mmo_charstatus *cs) { - // �M���h�E�� + // ギルド脱退 if (cs->guild_id) inter_guild_leave (cs->guild_id, cs->account_id, cs->char_id); - // �p�[�e�B�[�E�� + // パーティー脱退 if (cs->party_id) inter_party_leave (cs->party_id, cs->account_id); - // ���� + // 離婚 if (cs->partner_id) char_divorce (cs); @@ -1876,7 +1828,7 @@ static int char_delete (struct mmo_charstatus *cs) return 0; } -int parse_tologin (int fd) +void parse_tologin (int fd) { int i; struct char_session_data *sd; @@ -1894,7 +1846,7 @@ int parse_tologin (int fd) } close (fd); delete_session (fd); - return 0; + return; } sd = session[fd]->session_data; @@ -1907,7 +1859,7 @@ int parse_tologin (int fd) { case 0x2711: if (RFIFOREST (fd) < 3) - return 0; + return; if (RFIFOB (fd, 2)) { // printf("connect login server error : %d\n", RFIFOB(fd,2)); @@ -1936,7 +1888,7 @@ int parse_tologin (int fd) case 0x2713: if (RFIFOREST (fd) < 51) - return 0; + return; // printf("parse_tologin 2713 : %d\n", RFIFOB(fd,6)); for (i = 0; i < fd_max; i++) { @@ -1980,7 +1932,7 @@ int parse_tologin (int fd) // Receiving of an e-mail/time limit from the login-server (answer of a request because a player comes back from map-server to char-server) by [Yor] case 0x2717: if (RFIFOREST (fd) < 50) - return 0; + return; for (i = 0; i < fd_max; i++) { if (session[i] && (sd = session[i]->session_data)) @@ -2000,7 +1952,7 @@ int parse_tologin (int fd) case 0x2721: // gm reply if (RFIFOREST (fd) < 10) - return 0; + return; { unsigned char buf[10]; WBUFW (buf, 0) = 0x2b0b; @@ -2014,7 +1966,7 @@ int parse_tologin (int fd) case 0x2723: // changesex reply (modified by [Yor]) if (RFIFOREST (fd) < 7) - return 0; + return; { int acc, sex, i, j; unsigned char buf[7]; @@ -2079,7 +2031,7 @@ int parse_tologin (int fd) case 0x2726: // Request to send a broadcast message (no answer) if (RFIFOREST (fd) < 8 || RFIFOREST (fd) < (8 + RFIFOL (fd, 4))) - return 0; + return; if (RFIFOL (fd, 4) < 1) char_log ("Receiving a message for broadcast, but message is void." @@ -2163,10 +2115,10 @@ int parse_tologin (int fd) RFIFOSKIP (fd, 8 + RFIFOL (fd, 4)); break; - // account_reg2�ύX�ʒm + // account_reg2変更通知 case 0x2729: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; { struct global_reg reg[ACCOUNT_REG2_NUM]; unsigned char buf[4096]; @@ -2180,7 +2132,7 @@ int parse_tologin (int fd) reg[j].value = RFIFOL (fd, p + 32); } set_account_reg2 (acc, j, reg); - // ���C���O�C�����֎~���Ă����Α����K�v�͖��� + // 同垢ログインを禁止していれば送る必要は無い memcpy (buf, RFIFOP (fd, 0), RFIFOW (fd, 2)); WBUFW (buf, 0) = 0x2b11; mapif_sendall (buf, WBUFW (buf, 2)); @@ -2192,7 +2144,7 @@ int parse_tologin (int fd) case 0x7924: { // [Fate] Itemfrob package: forwarded from login-server if (RFIFOREST (fd) < 10) - return 0; + return; int source_id = RFIFOL (fd, 2); int dest_id = RFIFOL (fd, 6); unsigned char buf[10]; @@ -2240,7 +2192,7 @@ int parse_tologin (int fd) // Account deletion notification (from login-server) case 0x2730: if (RFIFOREST (fd) < 6) - return 0; + return; // Deletion of all characters of the account for (i = 0; i < char_num; i++) { @@ -2302,7 +2254,7 @@ int parse_tologin (int fd) // State change of account/ban notification (from login-server) by [Yor] case 0x2731: if (RFIFOREST (fd) < 11) - return 0; + return; // send to all map-servers to disconnect the player { unsigned char buf[11]; @@ -2320,14 +2272,12 @@ int parse_tologin (int fd) // Receiving GM acounts info from login-server (by [Yor]) case 0x2732: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; { char buf[32000]; if (gm_account != NULL) free (gm_account); - gm_account = - calloc (sizeof (struct gm_account) * - ((RFIFOW (fd, 2) - 4) / 5), 1); + CREATE (gm_account, struct gm_account, (RFIFOW (fd, 2) - 4) / 5); GM_num = 0; for (i = 4; i < RFIFOW (fd, 2); i = i + 5) { @@ -2353,7 +2303,7 @@ int parse_tologin (int fd) case 0x2741: // change password reply if (RFIFOREST (fd) < 7) - return 0; + return; { int acc, status, i; acc = RFIFOL (fd, 2); @@ -2378,18 +2328,16 @@ int parse_tologin (int fd) default: session[fd]->eof = 1; - return 0; + return; } } RFIFOFLUSH (fd); - - return 0; } //-------------------------------- // Map-server anti-freeze system //-------------------------------- -int map_anti_freeze_system (int tid, unsigned int tick, int id, int data) +void map_anti_freeze_system (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) { int i; @@ -2411,11 +2359,9 @@ int map_anti_freeze_system (int tid, unsigned int tick, int id, int data) } } } - - return 0; } -int parse_frommap (int fd) +void parse_frommap (int fd) { int i, j; int id; @@ -2438,7 +2384,7 @@ int parse_frommap (int fd) } close (fd); delete_session (fd); - return 0; + return; } while (RFIFOREST (fd) >= 2) @@ -2461,7 +2407,7 @@ int parse_frommap (int fd) // Receiving map names list from the map-server case 0x2afa: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; memset (server[id].map, 0, sizeof (server[id].map)); j = 0; for (i = 4; i < RFIFOW (fd, 2); i += 16) @@ -2528,10 +2474,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, RFIFOW (fd, 2)); break; - // �F�ؗv�� + // 認証要求 case 0x2afc: if (RFIFOREST (fd) < 22) - return 0; + return; //printf("auth_fifo search: account: %d, char: %d, secure: %08x-%08x\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14)); for (i = 0; i < AUTH_FIFO_SIZE; i++) { @@ -2578,10 +2524,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, 22); break; - // MAP�T�[�o�[���̃��[�U�[�����M + // MAPサーバー上のユーザー数受信 case 0x2aff: if (RFIFOREST (fd) < 6 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; server[id].users = RFIFOW (fd, 4); if (anti_freeze_enable) server_freezeflag[id] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed @@ -2610,10 +2556,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, 6 + i * 4); break; - // �L�����f�[�^�ۑ� + // キャラデータ保存 case 0x2b01: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; for (i = 0; i < char_num; i++) { if (char_dat[i].account_id == RFIFOL (fd, 4) && @@ -2626,10 +2572,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, RFIFOW (fd, 2)); break; - // �L�����Z���v�� + // キャラセレ要求 case 0x2b02: if (RFIFOREST (fd) < 18) - return 0; + return; if (auth_fifo_pos >= AUTH_FIFO_SIZE) auth_fifo_pos = 0; //printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); @@ -2649,10 +2595,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, 18); break; - // �}�b�v�T�[�o�[�Ԉړ��v�� + // マップサーバー間移動要求 case 0x2b05: if (RFIFOREST (fd) < 49) - return 0; + return; if (auth_fifo_pos >= AUTH_FIFO_SIZE) auth_fifo_pos = 0; WFIFOW (fd, 0) = 0x2b06; @@ -2681,10 +2627,10 @@ int parse_frommap (int fd) RFIFOSKIP (fd, 49); break; - // �L���������� + // キャラ名検索 case 0x2b08: if (RFIFOREST (fd) < 6) - return 0; + return; for (i = 0; i < char_num; i++) { if (char_dat[i].char_id == RFIFOL (fd, 2)) @@ -2703,7 +2649,7 @@ int parse_frommap (int fd) // it is a request to become GM case 0x2b0a: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; // printf("parse_frommap: change gm -> login, account: %d, pass: '%s'.\n", RFIFOL(fd,4), RFIFOP(fd,8)); if (login_fd > 0) { // don't send request if no login-server @@ -2725,7 +2671,7 @@ int parse_frommap (int fd) // Map server send information to change an email of an account -> login-server case 0x2b0c: if (RFIFOREST (fd) < 86) - return 0; + return; if (login_fd > 0) { // don't send request if no login-server memcpy (WFIFOP (login_fd, 0), RFIFOP (fd, 0), 86); // 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B @@ -2738,7 +2684,7 @@ int parse_frommap (int fd) // Map server ask char-server about a character name to do some operations (all operations are transmitted to login-server) case 0x2b0e: if (RFIFOREST (fd) < 44) - return 0; + return; { char character_name[24]; int acc = RFIFOL (fd, 2); // account_id of who ask (-1 if nobody) @@ -2874,10 +2820,10 @@ int parse_frommap (int fd) // case 0x2b0f: not more used (available for futur usage) - // account_reg�ۑ��v�� + // account_reg保存要求 case 0x2b10: if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2)) - return 0; + return; { struct global_reg reg[ACCOUNT_REG2_NUM]; int p, acc; @@ -2890,15 +2836,15 @@ int parse_frommap (int fd) reg[j].value = RFIFOL (fd, p + 32); } set_account_reg2 (acc, j, reg); - // login�T�[�o�[�֑��� + // loginサーバーへ送る if (login_fd > 0) { // don't send request if no login-server - WFIFOW (login_fd, 0) = 0x2728; memcpy (WFIFOP (login_fd, 0), RFIFOP (fd, 0), RFIFOW (fd, 2)); + WFIFOW (login_fd, 0) = 0x2728; WFIFOSET (login_fd, WFIFOW (login_fd, 2)); } - // ���[���h�ւ̓��C���O�C�����Ȃ�����map�T�[�o�[�ɑ����K�v�͂Ȃ� + // ワールドへの同垢ログインがなければmapサーバーに送る必要はない //memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2)); //WBUFW(buf,0) = 0x2b11; //mapif_sendall(buf, WBUFW(buf,2)); @@ -2910,7 +2856,7 @@ int parse_frommap (int fd) // Map server is requesting a divorce case 0x2b16: if (RFIFOREST (fd) < 4) - return 0; + return; { for (i = 0; i < char_num; i++) if (char_dat[i].char_id == RFIFOL (fd, 2)) @@ -2925,23 +2871,22 @@ int parse_frommap (int fd) } default: - // inter server�����ɓn�� + // inter server処理に渡す { int r = inter_parse_frommap (fd); - if (r == 1) // �����ł��� + if (r == 1) // 処理できた break; - if (r == 2) // �p�P�b�g���������Ȃ� - return 0; + if (r == 2) // パケット長が足りない + return; } - // inter server�����ł��Ȃ��ꍇ�͐ؒf + // inter server処理でもない場合は切断 printf ("char: unknown packet 0x%04x (%d bytes to read in buffer)! (from map).\n", RFIFOW (fd, 0), RFIFOREST (fd)); session[fd]->eof = 1; - return 0; + return; } } - return 0; } int search_mapserver (char *map) @@ -2971,7 +2916,7 @@ int search_mapserver (char *map) return -1; } -// char_mapif�̏����������i���݂�inter_mapif�������̂݁j +// char_mapifの初期化処理(現在はinter_mapif初期化のみ) static int char_mapif_init (int fd) { return inter_mapif_init (fd); @@ -3002,7 +2947,7 @@ int lan_ip_check (unsigned char *p) return lancheck; } -int parse_char (int fd) +void parse_char (int fd) { int i, ch; char email[40]; @@ -3015,7 +2960,7 @@ int parse_char (int fd) login_fd = -1; close (fd); delete_session (fd); - return 0; + return; } sd = session[fd]->session_data; @@ -3027,15 +2972,15 @@ int parse_char (int fd) switch (RFIFOW (fd, 0)) { - case 0x20b: //20040622�Í���ragexe�Ή� + case 0x20b: //20040622暗号化ragexe対応 if (RFIFOREST (fd) < 19) - return 0; + return; RFIFOSKIP (fd, 19); break; case 0x61: // change password request if (RFIFOREST (fd) < 50) - return 0; + return; { WFIFOW (login_fd, 0) = 0x2740; WFIFOL (login_fd, 2) = sd->account_id; @@ -3046,9 +2991,9 @@ int parse_char (int fd) RFIFOSKIP (fd, 50); break; - case 0x65: // �ڑ��v�� + case 0x65: // 接続要求 if (RFIFOREST (fd) < 17) - return 0; + return; { int GM_value; if ((GM_value = isGM (RFIFOL (fd, 2)))) @@ -3060,9 +3005,8 @@ int parse_char (int fd) RFIFOL (fd, 2)); if (sd == NULL) { - sd = session[fd]->session_data = - calloc (sizeof (struct char_session_data), 1); - memset (sd, 0, sizeof (struct char_session_data)); + CREATE (sd, struct char_session_data, 1); + session[fd]->session_data = sd; memcpy (sd->email, "no mail", 40); // put here a mail without '@' to refuse deletion if we don't receive the e-mail sd->connect_until_time = 0; // unknow or illimited (not displaying on map-server) } @@ -3139,9 +3083,9 @@ int parse_char (int fd) RFIFOSKIP (fd, 17); break; - case 0x66: // �L�����I�� + case 0x66: // キャラ選択 if (!sd || RFIFOREST (fd) < 3) - return 0; + return; char ip[16]; unsigned char *sin_addr = @@ -3309,9 +3253,9 @@ int parse_char (int fd) RFIFOSKIP (fd, 3); break; - case 0x67: // �쐬 + case 0x67: // 作成 if (!sd || RFIFOREST (fd) < 37) - return 0; + return; i = make_new_char (fd, RFIFOP (fd, 2)); if (i < 0) { @@ -3386,7 +3330,7 @@ int parse_char (int fd) case 0x68: // delete char //Yor's Fix if (!sd || RFIFOREST (fd) < 46) - return 0; + return; memcpy (email, RFIFOP (fd, 6), 40); if (e_mail_check (email) == 0) strncpy (email, "a@a.com", 40); // default e-mail @@ -3440,7 +3384,7 @@ int parse_char (int fd) } else { - /*if (strcmpi(email, sd->email) != 0) { // if it's an invalid email + /*if (strcasecmp(email, sd->email) != 0) { // if it's an invalid email * WFIFOW(fd, 0) = 0x70; * WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address * WFIFOSET(fd, 3); @@ -3510,9 +3454,9 @@ int parse_char (int fd) } break; - case 0x2af8: // �}�b�v�T�[�o�[���O�C�� + case 0x2af8: // マップサーバーログイン if (RFIFOREST (fd) < 60) - return 0; + return; WFIFOW (fd, 0) = 0x2af9; for (i = 0; i < MAX_MAP_SERVERS; i++) { @@ -3555,17 +3499,17 @@ int parse_char (int fd) } WFIFOW (fd, 2) = len; WFIFOSET (fd, len); - return 0; + return; } break; - case 0x187: // Alive�M���H + case 0x187: // Alive信号? if (RFIFOREST (fd) < 6) - return 0; + return; RFIFOSKIP (fd, 6); break; - case 0x7530: // Athena���� + case 0x7530: // Athena情報所得 WFIFOW (fd, 0) = 0x7531; WFIFOB (fd, 2) = ATHENA_MAJOR_VERSION; WFIFOB (fd, 3) = ATHENA_MINOR_VERSION; @@ -3576,22 +3520,20 @@ int parse_char (int fd) WFIFOW (fd, 8) = ATHENA_MOD_VERSION; WFIFOSET (fd, 10); RFIFOSKIP (fd, 2); - return 0; + return; - case 0x7532: // �ڑ��̐ؒf(default�Ə����͈ꏏ���������I�ɂ��邽��) + case 0x7532: // 接続の切断(defaultと処理は一緒だが明示的にするため) session[fd]->eof = 1; - return 0; + return; default: session[fd]->eof = 1; - return 0; + return; } } - RFIFOFLUSH (fd); - return 0; } -// �S�Ă�MAP�T�[�o�[�Ƀf�[�^���M�i���M����map�I�̐����Ԃ��j +// 全てのMAPサーバーにデータ送信(送信したmap鯖の数を返す) int mapif_sendall (char *buf, unsigned int len) { int i, c; @@ -3610,7 +3552,7 @@ int mapif_sendall (char *buf, unsigned int len) return c; } -// �����ȊO�̑S�Ă�MAP�T�[�o�[�Ƀf�[�^���M�i���M����map�I�̐����Ԃ��j +// 自分以外の全てのMAPサーバーにデータ送信(送信したmap鯖の数を返す) int mapif_sendallwos (int sfd, unsigned char *buf, unsigned int len) { int i, c; @@ -3629,7 +3571,7 @@ int mapif_sendallwos (int sfd, unsigned char *buf, unsigned int len) return c; } -// MAP�T�[�o�[�Ƀf�[�^���M�imap�I�����m�F�L���j +// MAPサーバーにデータ送信(map鯖生存確認有り) int mapif_send (int fd, unsigned char *buf, unsigned int len) { int i; @@ -3649,7 +3591,7 @@ int mapif_send (int fd, unsigned char *buf, unsigned int len) return 0; } -int send_users_tologin (int tid, unsigned int tick, int id, int data) +void send_users_tologin (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) { int users = count_users (); char buf[16]; @@ -3665,17 +3607,15 @@ int send_users_tologin (int tid, unsigned int tick, int id, int data) WBUFW (buf, 0) = 0x2b00; WBUFL (buf, 2) = users; mapif_sendall (buf, 6); - - return 0; } -int check_connect_login_server (int tid, unsigned int tick, int id, int data) +void check_connect_login_server (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) { if (login_fd <= 0 || session[login_fd] == NULL) { printf ("Attempt to connect to login-server...\n"); if ((login_fd = make_connection (login_ip, login_port)) < 0) - return 0; + return; session[login_fd]->func_parse = parse_tologin; realloc_fifo (login_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK); WFIFOW (login_fd, 0) = 0x2710; @@ -3696,21 +3636,20 @@ int check_connect_login_server (int tid, unsigned int tick, int id, int data) WFIFOW (login_fd, 84) = char_new; WFIFOSET (login_fd, 86); } - return 0; } //---------------------------------------------------------- // Return numerical value of a switch configuration by [Yor] -// on/off, english, fran�ais, deutsch, espanol +// on/off, english, français, deutsch, español //---------------------------------------------------------- int config_switch (const char *str) { - if (strcmpi (str, "on") == 0 || strcmpi (str, "yes") == 0 - || strcmpi (str, "oui") == 0 || strcmpi (str, "ja") == 0 - || strcmpi (str, "si") == 0) + if (strcasecmp (str, "on") == 0 || strcasecmp (str, "yes") == 0 + || strcasecmp (str, "oui") == 0 || strcasecmp (str, "ja") == 0 + || strcasecmp (str, "si") == 0) return 1; - if (strcmpi (str, "off") == 0 || strcmpi (str, "no") == 0 - || strcmpi (str, "non") == 0 || strcmpi (str, "nein") == 0) + if (strcasecmp (str, "off") == 0 || strcasecmp (str, "no") == 0 + || strcasecmp (str, "non") == 0 || strcasecmp (str, "nein") == 0) return 0; return atoi (str); @@ -3756,7 +3695,7 @@ int lan_config_read (const char *lancfgName) remove_control_chars (w1); remove_control_chars (w2); - if (strcmpi (w1, "lan_map_ip") == 0) + if (strcasecmp (w1, "lan_map_ip") == 0) { // Read map-server Lan IP Address h = gethostbyname (w2); if (h != NULL) @@ -3774,7 +3713,7 @@ int lan_config_read (const char *lancfgName) } printf ("LAN IP of map-server: %s.\n", lan_map_ip); } - else if (strcmpi (w1, "subnet") == 0) + else if (strcasecmp (w1, "subnet") == 0) { // Read Subnetwork for (j = 0; j < 4; j++) subneti[j] = 0; @@ -3792,7 +3731,7 @@ int lan_config_read (const char *lancfgName) printf ("Sub-network of the map-server: %d.%d.%d.%d.\n", subneti[0], subneti[1], subneti[2], subneti[3]); } - else if (strcmpi (w1, "subnetmask") == 0) + else if (strcasecmp (w1, "subnetmask") == 0) { // Read Subnetwork Mask for (j = 0; j < 4; j++) subnetmaski[j] = 255; @@ -3859,21 +3798,21 @@ int char_config_read (const char *cfgName) remove_control_chars (w1); remove_control_chars (w2); - if (strcmpi (w1, "userid") == 0) + if (strcasecmp (w1, "userid") == 0) { memcpy (userid, w2, 24); } - else if (strcmpi (w1, "passwd") == 0) + else if (strcasecmp (w1, "passwd") == 0) { memcpy (passwd, w2, 24); } - else if (strcmpi (w1, "server_name") == 0) + else if (strcasecmp (w1, "server_name") == 0) { memcpy (server_name, w2, sizeof (server_name)); server_name[sizeof (server_name) - 1] = '\0'; printf ("%s server has been intialized\n", w2); } - else if (strcmpi (w1, "wisp_server_name") == 0) + else if (strcasecmp (w1, "wisp_server_name") == 0) { if (strlen (w2) >= 4) { @@ -3881,7 +3820,7 @@ int char_config_read (const char *cfgName) wisp_server_name[sizeof (wisp_server_name) - 1] = '\0'; } } - else if (strcmpi (w1, "login_ip") == 0) + else if (strcasecmp (w1, "login_ip") == 0) { h = gethostbyname (w2); if (h != NULL) @@ -3900,11 +3839,11 @@ int char_config_read (const char *cfgName) else memcpy (login_ip_str, w2, 16); } - else if (strcmpi (w1, "login_port") == 0) + else if (strcasecmp (w1, "login_port") == 0) { login_port = atoi (w2); } - else if (strcmpi (w1, "char_ip") == 0) + else if (strcasecmp (w1, "char_ip") == 0) { h = gethostbyname (w2); if (h != NULL) @@ -3923,51 +3862,51 @@ int char_config_read (const char *cfgName) else memcpy (char_ip_str, w2, 16); } - else if (strcmpi (w1, "char_port") == 0) + else if (strcasecmp (w1, "char_port") == 0) { char_port = atoi (w2); } - else if (strcmpi (w1, "char_maintenance") == 0) + else if (strcasecmp (w1, "char_maintenance") == 0) { char_maintenance = atoi (w2); } - else if (strcmpi (w1, "char_new") == 0) + else if (strcasecmp (w1, "char_new") == 0) { char_new = atoi (w2); } - else if (strcmpi (w1, "email_creation") == 0) + else if (strcasecmp (w1, "email_creation") == 0) { email_creation = config_switch (w2); } - else if (strcmpi (w1, "char_txt") == 0) + else if (strcasecmp (w1, "char_txt") == 0) { strcpy (char_txt, w2); } - else if (strcmpi (w1, "backup_txt") == 0) + else if (strcasecmp (w1, "backup_txt") == 0) { //By zanetheinsane strcpy (backup_txt, w2); } - else if (strcmpi (w1, "backup_txt_flag") == 0) + else if (strcasecmp (w1, "backup_txt_flag") == 0) { // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. By [Yor] backup_txt_flag = config_switch (w2); } - else if (strcmpi (w1, "max_connect_user") == 0) + else if (strcasecmp (w1, "max_connect_user") == 0) { max_connect_user = atoi (w2); if (max_connect_user < 0) max_connect_user = 0; // unlimited online players } - else if (strcmpi (w1, "check_ip_flag") == 0) + else if (strcasecmp (w1, "check_ip_flag") == 0) { check_ip_flag = config_switch (w2); } - else if (strcmpi (w1, "autosave_time") == 0) + else if (strcasecmp (w1, "autosave_time") == 0) { autosave_interval = atoi (w2) * 1000; if (autosave_interval <= 0) autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; } - else if (strcmpi (w1, "start_point") == 0) + else if (strcasecmp (w1, "start_point") == 0) { char map[32]; int x, y; @@ -3980,85 +3919,85 @@ int char_config_read (const char *cfgName) start_point.y = y; } } - else if (strcmpi (w1, "start_zeny") == 0) + else if (strcasecmp (w1, "start_zeny") == 0) { start_zeny = atoi (w2); if (start_zeny < 0) start_zeny = 0; } - else if (strcmpi (w1, "start_weapon") == 0) + else if (strcasecmp (w1, "start_weapon") == 0) { start_weapon = atoi (w2); if (start_weapon < 0) start_weapon = 0; } - else if (strcmpi (w1, "start_armor") == 0) + else if (strcasecmp (w1, "start_armor") == 0) { start_armor = atoi (w2); if (start_armor < 0) start_armor = 0; } - else if (strcmpi (w1, "unknown_char_name") == 0) + else if (strcasecmp (w1, "unknown_char_name") == 0) { strcpy (unknown_char_name, w2); unknown_char_name[24] = 0; } - else if (strcmpi (w1, "char_log_filename") == 0) + else if (strcasecmp (w1, "char_log_filename") == 0) { strcpy (char_log_filename, w2); } - else if (strcmpi (w1, "name_ignoring_case") == 0) + else if (strcasecmp (w1, "name_ignoring_case") == 0) { name_ignoring_case = config_switch (w2); } - else if (strcmpi (w1, "char_name_option") == 0) + else if (strcasecmp (w1, "char_name_option") == 0) { char_name_option = atoi (w2); } - else if (strcmpi (w1, "char_name_letters") == 0) + else if (strcasecmp (w1, "char_name_letters") == 0) { strcpy (char_name_letters, w2); // online files options } - else if (strcmpi (w1, "online_txt_filename") == 0) + else if (strcasecmp (w1, "online_txt_filename") == 0) { strcpy (online_txt_filename, w2); } - else if (strcmpi (w1, "online_html_filename") == 0) + else if (strcasecmp (w1, "online_html_filename") == 0) { strcpy (online_html_filename, w2); } - else if (strcmpi (w1, "online_sorting_option") == 0) + else if (strcasecmp (w1, "online_sorting_option") == 0) { online_sorting_option = atoi (w2); } - else if (strcmpi (w1, "online_display_option") == 0) + else if (strcasecmp (w1, "online_display_option") == 0) { online_display_option = atoi (w2); } - else if (strcmpi (w1, "online_gm_display_min_level") == 0) + else if (strcasecmp (w1, "online_gm_display_min_level") == 0) { // minimum GM level to display 'GM' when we want to display it online_gm_display_min_level = atoi (w2); if (online_gm_display_min_level < 5) // send online file every 5 seconds to player is enough online_gm_display_min_level = 5; } - else if (strcmpi (w1, "online_refresh_html") == 0) + else if (strcasecmp (w1, "online_refresh_html") == 0) { online_refresh_html = atoi (w2); if (online_refresh_html < 1) online_refresh_html = 1; } - else if (strcmpi (w1, "anti_freeze_enable") == 0) + else if (strcasecmp (w1, "anti_freeze_enable") == 0) { anti_freeze_enable = config_switch (w2); } - else if (strcmpi (w1, "anti_freeze_interval") == 0) + else if (strcasecmp (w1, "anti_freeze_interval") == 0) { ANTI_FREEZE_INTERVAL = atoi (w2); if (ANTI_FREEZE_INTERVAL < 5) ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds } - else if (strcmpi (w1, "import") == 0) + else if (strcasecmp (w1, "import") == 0) { char_config_read (w2); } @@ -4068,7 +4007,7 @@ int char_config_read (const char *cfgName) return 0; } -void do_final (void) +void term_func (void) { int i; @@ -4117,17 +4056,16 @@ int do_init (int argc, char **argv) update_online = time (NULL); create_online_files (); // update online players files at start of the server - inter_init ((argc > 2) ? argv[2] : inter_cfgName); // inter server ������ + inter_init ((argc > 2) ? argv[2] : inter_cfgName); // inter server 初期化 - set_termfunc (do_final); +// set_termfunc (do_final); set_defaultparse (parse_char); char_fd = make_listen_port (char_port); - add_timer_func_list (check_connect_login_server, - "check_connect_login_server"); - add_timer_func_list (send_users_tologin, "send_users_tologin"); - add_timer_func_list (mmo_char_sync_timer, "mmo_char_sync_timer"); +// add_timer_func_list (check_connect_login_server, "check_connect_login_server"); +// add_timer_func_list (send_users_tologin, "send_users_tologin"); +// add_timer_func_list (mmo_char_sync_timer, "mmo_char_sync_timer"); i = add_timer_interval (gettick () + 1000, check_connect_login_server, 0, 0, 10 * 1000); @@ -4138,8 +4076,7 @@ int do_init (int argc, char **argv) if (anti_freeze_enable > 0) { - add_timer_func_list (map_anti_freeze_system, - "map_anti_freeze_system"); +// add_timer_func_list (map_anti_freeze_system, "map_anti_freeze_system"); i = add_timer_interval (gettick () + 1000, map_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000); // checks every X seconds user specifies } |