From 80e36aa669274637bcd5956fbf4020dba1d4739c Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 9 Feb 2013 01:51:36 -0800 Subject: Strictify timers --- src/map/clif.cpp | 1752 ++++++++++++++++++++++++++---------------------------- 1 file changed, 840 insertions(+), 912 deletions(-) (limited to 'src/map/clif.cpp') diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 65b5246..b0fef3a 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -11,6 +11,7 @@ #include "../common/mt_rand.hpp" #include "../common/nullpo.hpp" #include "../common/socket.hpp" +#include "../common/timer.hpp" #include "../common/version.hpp" #include "atcommand.hpp" @@ -34,89 +35,49 @@ constexpr int EMOTE_IGNORED = 0x0e; -static -const int packet_len_table[0x220] = { - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -//#0x0040 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -1, 55, 17, 3, 37, 46, -1, 23, -1, 3, 108, 3, 2, - 3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6, -//#0x0080 - 7, 3, 2, 2, 2, 5, 16, 12, 10, 7, 29, 23, -1, -1, -1, 0, // 0x8b unknown... size 2 or 23? - 7, 22, 28, 2, 6, 30, -1, -1, 3, -1, -1, 5, 9, 17, 17, 6, - 23, 6, 6, -1, -1, -1, -1, 8, 7, 6, 7, 4, 7, 0, -1, 6, - 8, 8, 3, 3, -1, 6, 6, -1, 7, 6, 2, 5, 6, 44, 5, 3, -//#0x00C0 - 7, 2, 6, 8, 6, 7, -1, -1, -1, -1, 3, 3, 6, 6, 2, 27, - 3, 4, 4, 2, -1, -1, 3, -1, 6, 14, 3, -1, 28, 29, -1, -1, - 30, 30, 26, 2, 6, 26, 3, 3, 8, 19, 5, 2, 3, 2, 2, 2, - 3, 2, 6, 8, 21, 8, 8, 2, 2, 26, 3, -1, 6, 27, 30, 10, - -//#0x0100 - 2, 6, 6, 30, 79, 31, 10, 10, -1, -1, 4, 6, 6, 2, 11, -1, - 10, 39, 4, 10, 31, 35, 10, 18, 2, 13, 15, 20, 68, 2, 3, 16, - 6, 14, -1, -1, 21, 8, 8, 8, 8, 8, 2, 2, 3, 4, 2, -1, - 6, 86, 6, -1, -1, 7, -1, 6, 3, 16, 4, 4, 4, 6, 24, 26, -//#0x0140 - 22, 14, 6, 10, 23, 19, 6, 39, 8, 9, 6, 27, -1, 2, 6, 6, - 110, 6, -1, -1, -1, -1, -1, 6, -1, 54, 66, 54, 90, 42, 6, 42, - -1, -1, -1, -1, -1, 30, -1, 3, 14, 3, 30, 10, 43, 14, 186, 182, - 14, 30, 10, 3, -1, 6, 106, -1, 4, 5, 4, -1, 6, 7, -1, -1, -//#0x0180 - 6, 3, 106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6, - 90, 86, 24, 6, 30, 102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6, - 3, 3, 35, 5, 11, 26, -1, 4, 4, 6, 10, 12, 6, -1, 4, 4, - 11, 7, -1, 67, 12, 18, 114, 6, 3, 6, 26, 26, 26, 26, 2, 3, -//#0x01C0, Set 0x1d5=-1 - 2, 14, 10, -1, 22, 22, 4, 2, 13, 97, 0, 9, 9, 30, 6, 28, - 8, 14, 10, 35, 6, -1, 4, 11, 54, 53, 60, 2, -1, 47, 33, 6, - 30, 8, 34, 14, 2, 6, 26, 2, 28, 81, 6, 10, 26, 2, -1, -1, - -1, -1, 20, 10, 32, 9, 34, 14, 2, 6, 48, 56, -1, 4, 5, 10, -//#0x200 - 26, -1, 26, 10, 18, 26, 11, 34, 14, 36, 10, 19, 10, -1, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +// functions list. Rate is how many milliseconds are required between +// calls. Packets exceeding this rate will be dropped. flood_rates in +// map.h must be the same length as this table. rate 0 is default +// rate -1 is unlimited + +typedef void (*clif_func)(int fd, struct map_session_data *sd); +struct func_table +{ + interval_t rate; + int len; + clif_func func; + + // ctor exists because interval_t must be explicit + func_table(int r, int l, clif_func f) + : rate(r), len(l), func(f) + {} }; +constexpr int VAR = -1; + +extern // not really - defined below +func_table clif_parse_func_table[0x0220]; + + // local define enum class SendWho { ALL_CLIENT, -#define ALL_CLIENT SendWho::ALL_CLIENT ALL_SAMEMAP, -#define ALL_SAMEMAP SendWho::ALL_SAMEMAP AREA, -#define AREA SendWho::AREA AREA_WOS, -#define AREA_WOS SendWho::AREA_WOS AREA_WOC, -#define AREA_WOC SendWho::AREA_WOC AREA_WOSC, -#define AREA_WOSC SendWho::AREA_WOSC AREA_CHAT_WOC, -#define AREA_CHAT_WOC SendWho::AREA_CHAT_WOC - // temporary rename to avoid collision with BL::CHAT_ - CHAT_, -#define CHAT_ SendWho::CHAT_ + CHAT, CHAT_WOS, -#define CHAT_WOS SendWho::CHAT_WOS PARTY, -#define PARTY SendWho::PARTY PARTY_WOS, -#define PARTY_WOS SendWho::PARTY_WOS PARTY_SAMEMAP, -#define PARTY_SAMEMAP SendWho::PARTY_SAMEMAP PARTY_SAMEMAP_WOS, -#define PARTY_SAMEMAP_WOS SendWho::PARTY_SAMEMAP_WOS PARTY_AREA, -#define PARTY_AREA SendWho::PARTY_AREA PARTY_AREA_WOS, -#define PARTY_AREA_WOS SendWho::PARTY_AREA_WOS SELF, -#define SELF SendWho::SELF }; inline @@ -252,7 +213,7 @@ char *clif_validate_chat(struct map_session_data *sd, int type, const char **message, size_t *message_len); /*========================================== - * clif_sendでAREA*指定時用 + * clif_sendでSendWho::AREA*指定時用 *------------------------------------------ */ static @@ -264,12 +225,12 @@ void clif_send_sub(struct block_list *bl, const unsigned char *buf, int len, switch (type) { - case AREA_WOS: + case SendWho::AREA_WOS: if (bl && bl == src_bl) return; break; - case AREA_CHAT_WOC: + case SendWho::AREA_CHAT_WOC: if (is_deaf(bl) && !(bl->type == BL::PC && pc_isGM((struct map_session_data *) src_bl))) @@ -278,12 +239,12 @@ void clif_send_sub(struct block_list *bl, const unsigned char *buf, int len, return; } FALLTHROUGH; - case AREA_WOC: + case SendWho::AREA_WOC: if ((sd && sd->chatID) || (bl && bl == src_bl)) return; break; - case AREA_WOSC: + case SendWho::AREA_WOSC: if ((sd) && sd->chatID && sd->chatID == ((struct map_session_data *) src_bl)->chatID) return; @@ -302,8 +263,9 @@ void clif_send_sub(struct block_list *bl, const unsigned char *buf, int len, } else { - if (packet_len_table[RBUFW(buf, 0)]) - { // packet must exist + if (clif_parse_func_table[RBUFW(buf, 0)].len) + { + // packet must exist memcpy(WFIFOP(sd->fd, 0), buf, len); WFIFOSET(sd->fd, len); } @@ -324,7 +286,7 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) struct party *p = NULL; int x0 = 0, x1 = 0, y0 = 0, y1 = 0; - if (type != ALL_CLIENT) + if (type != SendWho::ALL_CLIENT) { nullpo_ret(bl); @@ -337,13 +299,13 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) switch (type) { - case AREA: - case AREA_WOC: - type = SELF; + case SendWho::AREA: + case SendWho::AREA_WOC: + type = SendWho::SELF; break; - case AREA_WOS: - case AREA_WOSC: + case SendWho::AREA_WOS: + case SendWho::AREA_WOSC: return 1; default: @@ -355,13 +317,13 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) switch (type) { - case ALL_CLIENT: // 全クライアントに送信 + case SendWho::ALL_CLIENT: // 全クライアントに送信 for (i = 0; i < fd_max; i++) { if (session[i] && (sd = (struct map_session_data *)session[i]->session_data) != NULL && sd->state.auth) { - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(i, 0), buf, len); WFIFOSET(i, len); @@ -369,13 +331,13 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) } } break; - case ALL_SAMEMAP: // 同じマップの全クライアントに送信 + case SendWho::ALL_SAMEMAP: // 同じマップの全クライアントに送信 for (i = 0; i < fd_max; i++) { if (session[i] && (sd = (struct map_session_data *)session[i]->session_data) != NULL && sd->state.auth && sd->bl.m == bl->m) { - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(i, 0), buf, len); WFIFOSET(i, len); @@ -383,21 +345,21 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) } } break; - case AREA: - case AREA_WOS: - case AREA_WOC: - case AREA_WOSC: + case SendWho::AREA: + case SendWho::AREA_WOS: + case SendWho::AREA_WOC: + case SendWho::AREA_WOSC: map_foreachinarea(std::bind(clif_send_sub, ph::_1, buf, len, bl, type), bl->m, bl->x - AREA_SIZE, bl->y - AREA_SIZE, bl->x + AREA_SIZE, bl->y + AREA_SIZE, BL::PC); break; - case AREA_CHAT_WOC: - map_foreachinarea(std::bind(clif_send_sub, ph::_1, buf, len, bl, AREA_CHAT_WOC), + case SendWho::AREA_CHAT_WOC: + map_foreachinarea(std::bind(clif_send_sub, ph::_1, buf, len, bl, SendWho::AREA_CHAT_WOC), bl->m, bl->x - (AREA_SIZE), bl->y - (AREA_SIZE), bl->x + (AREA_SIZE), bl->y + (AREA_SIZE), BL::PC); break; - case CHAT_: - case CHAT_WOS: + case SendWho::CHAT: + case SendWho::CHAT_WOS: cd = (struct chat_data *) bl; if (bl->type == BL::PC) { @@ -410,10 +372,10 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) break; for (i = 0; i < cd->users; i++) { - if (type == CHAT_WOS + if (type == SendWho::CHAT_WOS && cd->usersd[i] == (struct map_session_data *) bl) continue; - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(cd->usersd[i]->fd, 0), buf, len); WFIFOSET(cd->usersd[i]->fd, len); @@ -421,17 +383,17 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) } break; - case PARTY_AREA: // 同じ画面内の全パーティーメンバに送信 - case PARTY_AREA_WOS: // 自分以外の同じ画面内の全パーティーメンバに送信 + case SendWho::PARTY_AREA: // 同じ画面内の全パーティーメンバに送信 + case SendWho::PARTY_AREA_WOS: // 自分以外の同じ画面内の全パーティーメンバに送信 x0 = bl->x - AREA_SIZE; y0 = bl->y - AREA_SIZE; x1 = bl->x + AREA_SIZE; y1 = bl->y + AREA_SIZE; FALLTHROUGH; - case PARTY: // 全パーティーメンバに送信 - case PARTY_WOS: // 自分以外の全パーティーメンバに送信 - case PARTY_SAMEMAP: // 同じマップの全パーティーメンバに送信 - case PARTY_SAMEMAP_WOS: // 自分以外の同じマップの全パーティーメンバに送信 + case SendWho::PARTY: // 全パーティーメンバに送信 + case SendWho::PARTY_WOS: // 自分以外の全パーティーメンバに送信 + case SendWho::PARTY_SAMEMAP: // 同じマップの全パーティーメンバに送信 + case SendWho::PARTY_SAMEMAP_WOS: // 自分以外の同じマップの全パーティーメンバに送信 if (bl->type == BL::PC) { sd = (struct map_session_data *) bl; @@ -451,18 +413,18 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) { if ((sd = p->member[i].sd) != NULL) { - if (sd->bl.id == bl->id && (type == PARTY_WOS || - type == PARTY_SAMEMAP_WOS + if (sd->bl.id == bl->id && (type == SendWho::PARTY_WOS || + type == SendWho::PARTY_SAMEMAP_WOS || type == - PARTY_AREA_WOS)) + SendWho::PARTY_AREA_WOS)) continue; - if (type != PARTY && type != PARTY_WOS && bl->m != sd->bl.m) // マップチェック + if (type != SendWho::PARTY && type != SendWho::PARTY_WOS && bl->m != sd->bl.m) // マップチェック continue; - if ((type == PARTY_AREA || type == PARTY_AREA_WOS) && + if ((type == SendWho::PARTY_AREA || type == SendWho::PARTY_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1)) continue; - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(sd->fd, 0), buf, len); WFIFOSET(sd->fd, len); @@ -476,7 +438,7 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) { if (sd->partyspy == p->party_id) { - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(sd->fd, 0), buf, len); WFIFOSET(sd->fd, len); @@ -486,9 +448,9 @@ int clif_send(const uint8_t *buf, int len, struct block_list *bl, SendWho type) } } break; - case SELF: + case SendWho::SELF: sd = (struct map_session_data *) bl; - if (packet_len_table[RBUFW(buf, 0)]) + if (clif_parse_func_table[RBUFW(buf, 0)].len) { // packet must exist memcpy(WFIFOP(sd->fd, 0), buf, len); WFIFOSET(sd->fd, len); @@ -526,11 +488,11 @@ int clif_authok(struct map_session_data *sd) fd = sd->fd; WFIFOW(fd, 0) = 0x73; - WFIFOL(fd, 2) = gettick(); + WFIFOL(fd, 2) = gettick().time_since_epoch().count(); WFIFOPOS(fd, 6, sd->bl.x, sd->bl.y); WFIFOB(fd, 9) = 5; WFIFOB(fd, 10) = 5; - WFIFOSET(fd, packet_len_table[0x73]); + WFIFOSET(fd, clif_parse_func_table[0x73].len); return 0; } @@ -546,7 +508,7 @@ int clif_authfail_fd(int fd, int type) WFIFOW(fd, 0) = 0x81; WFIFOL(fd, 2) = type; - WFIFOSET(fd, packet_len_table[0x81]); + WFIFOSET(fd, clif_parse_func_table[0x81].len); clif_setwaitclose(fd); @@ -571,7 +533,7 @@ int clif_charselectok(int id) fd = sd->fd; WFIFOW(fd, 0) = 0xb3; WFIFOB(fd, 2) = 1; - WFIFOSET(fd, packet_len_table[0xb3]); + WFIFOSET(fd, clif_parse_func_table[0xb3].len); return 0; } @@ -601,7 +563,7 @@ int clif_set009e(struct flooritem_data *fitem, uint8_t *buf) WBUFB(buf, 14) = fitem->suby; WBUFW(buf, 15) = fitem->item_data.amount; - return packet_len_table[0x9e]; + return clif_parse_func_table[0x9e].len; } /*========================================== @@ -617,7 +579,7 @@ int clif_dropflooritem(struct flooritem_data *fitem) if (fitem->item_data.nameid <= 0) return 0; clif_set009e(fitem, buf); - clif_send(buf, packet_len_table[0x9e], &fitem->bl, AREA); + clif_send(buf, clif_parse_func_table[0x9e].len, &fitem->bl, SendWho::AREA); return 0; } @@ -637,12 +599,12 @@ int clif_clearflooritem(struct flooritem_data *fitem, int fd) if (fd == 0) { - clif_send(buf, packet_len_table[0xa1], &fitem->bl, AREA); + clif_send(buf, clif_parse_func_table[0xa1].len, &fitem->bl, SendWho::AREA); } else { memcpy(WFIFOP(fd, 0), buf, 6); - WFIFOSET(fd, packet_len_table[0xa1]); + WFIFOSET(fd, clif_parse_func_table[0xa1].len); } return 0; @@ -663,35 +625,36 @@ int clif_clearchar(struct block_list *bl, BeingRemoveWhy type) if (type == BeingRemoveWhy::DISGUISE) { WBUFB(buf, 6) = static_cast(BeingRemoveWhy::GONE); - clif_send(buf, packet_len_table[0x80], bl, AREA); + clif_send(buf, clif_parse_func_table[0x80].len, bl, SendWho::AREA); } else { WBUFB(buf, 6) = static_cast(type); - clif_send(buf, packet_len_table[0x80], bl, - type == BeingRemoveWhy::DEAD ? AREA : AREA_WOS); + clif_send(buf, clif_parse_func_table[0x80].len, bl, + type == BeingRemoveWhy::DEAD ? SendWho::AREA : SendWho::AREA_WOS); } return 0; } static -void clif_clearchar_delay_sub(timer_id, tick_t, custom_id_t id, - custom_data_t data) +void clif_clearchar_delay_sub(TimerData *, tick_t, + struct block_list *bl, BeingRemoveWhy type) { - struct block_list *bl = (struct block_list *) id; - - clif_clearchar(bl, static_cast(data)); + clif_clearchar(bl, type); map_freeblock(bl); } -int clif_clearchar_delay(unsigned int tick, struct block_list *bl, BeingRemoveWhy type) +int clif_clearchar_delay(tick_t tick, + struct block_list *bl, BeingRemoveWhy type) { struct block_list *tmpbl; CREATE(tmpbl, struct block_list, 1); memcpy(tmpbl, bl, sizeof(struct block_list)); - add_timer(tick, clif_clearchar_delay_sub, (custom_id_t) tmpbl, static_cast(type)); + add_timer(tick, + std::bind(clif_clearchar_delay_sub, ph::_1, ph::_2, + tmpbl, type)); return 0; } @@ -708,23 +671,11 @@ int clif_clearchar_id(int id, BeingRemoveWhy type, int fd) WBUFL(buf, 2) = id; WBUFB(buf, 6) = static_cast(type); memcpy(WFIFOP(fd, 0), buf, 7); - WFIFOSET(fd, packet_len_table[0x80]); + WFIFOSET(fd, clif_parse_func_table[0x80].len); return 0; } -/* -static -int current_weapon(struct map_session_data *sd) -{ - if (sd->attack_spell_override) - return sd->attack_spell_look_override; - else { - return sd->status.weapon; - } -} -*/ - /*========================================== * *------------------------------------------ @@ -736,10 +687,10 @@ int clif_set0078(struct map_session_data *sd, unsigned char *buf) WBUFW(buf, 0) = 0x1d8; WBUFL(buf, 2) = sd->bl.id; - WBUFW(buf, 6) = sd->speed; - WBUFW(buf, 8) = uint16_t(sd->opt1); - WBUFW(buf, 10) = uint16_t(sd->opt2); - WBUFW(buf, 12) = uint16_t(sd->status.option); + WBUFW(buf, 6) = static_cast(sd->speed.count()); + WBUFW(buf, 8) = static_cast(sd->opt1); + WBUFW(buf, 10) = static_cast(sd->opt2); + WBUFW(buf, 12) = static_cast(sd->status.option); WBUFW(buf, 14) = sd->status.species; WBUFW(buf, 16) = sd->status.hair; if (sd->attack_spell_override) @@ -791,7 +742,7 @@ int clif_set0078(struct map_session_data *sd, unsigned char *buf) WBUFB(buf, 51) = sd->state.dead_sit; WBUFW(buf, 52) = 0; - return packet_len_table[0x1d8]; + return clif_parse_func_table[0x1d8].len; } /*========================================== @@ -805,10 +756,10 @@ int clif_set007b(struct map_session_data *sd, unsigned char *buf) WBUFW(buf, 0) = 0x1da; WBUFL(buf, 2) = sd->bl.id; - WBUFW(buf, 6) = sd->speed; - WBUFW(buf, 8) = uint16_t(sd->opt1); - WBUFW(buf, 10) = uint16_t(sd->opt2); - WBUFW(buf, 12) = uint16_t(sd->status.option); + WBUFW(buf, 6) = static_cast(sd->speed.count()); + WBUFW(buf, 8) = static_cast(sd->opt1); + WBUFW(buf, 10) = static_cast(sd->opt2); + WBUFW(buf, 12) = static_cast(sd->status.option); WBUFW(buf, 14) = sd->status.species; WBUFW(buf, 16) = sd->status.hair; if (sd->equip_index[EQUIP::WEAPON] >= 0 @@ -833,7 +784,7 @@ int clif_set007b(struct map_session_data *sd, unsigned char *buf) else WBUFW(buf, 20) = 0; WBUFW(buf, 22) = sd->status.head_bottom; - WBUFL(buf, 24) = gettick(); + WBUFL(buf, 24) = gettick().time_since_epoch().count(); WBUFW(buf, 28) = sd->status.head_top; WBUFW(buf, 30) = sd->status.head_mid; WBUFW(buf, 32) = sd->status.hair_color; @@ -850,7 +801,7 @@ int clif_set007b(struct map_session_data *sd, unsigned char *buf) WBUFB(buf, 57) = 5; WBUFW(buf, 58) = 0; - return packet_len_table[0x1da]; + return clif_parse_func_table[0x1da].len; } /*========================================== @@ -862,16 +813,16 @@ int clif_mob0078(struct mob_data *md, unsigned char *buf) { int level; - memset(buf, 0, packet_len_table[0x78]); + memset(buf, 0, clif_parse_func_table[0x78].len); nullpo_ret(md); WBUFW(buf, 0) = 0x78; WBUFL(buf, 2) = md->bl.id; - WBUFW(buf, 6) = battle_get_speed(&md->bl); - WBUFW(buf, 8) = uint16_t(md->opt1); - WBUFW(buf, 10) = uint16_t(md->opt2); - WBUFW(buf, 12) = uint16_t(md->option); + WBUFW(buf, 6) = static_cast(battle_get_speed(&md->bl).count()); + WBUFW(buf, 8) = static_cast(md->opt1); + WBUFW(buf, 10) = static_cast(md->opt2); + WBUFW(buf, 12) = static_cast(md->option); WBUFW(buf, 14) = md->mob_class; // snip: stuff do do with disguise as a PC WBUFPOS(buf, 46, md->bl.x, md->bl.y); @@ -885,7 +836,7 @@ int clif_mob0078(struct mob_data *md, unsigned char *buf) battle_get_lv(&md->bl)) > battle_config.max_lv) ? battle_config.max_lv : level; - return packet_len_table[0x78]; + return clif_parse_func_table[0x78].len; } /*========================================== @@ -897,19 +848,19 @@ int clif_mob007b(struct mob_data *md, unsigned char *buf) { int level; - memset(buf, 0, packet_len_table[0x7b]); + memset(buf, 0, clif_parse_func_table[0x7b].len); nullpo_ret(md); WBUFW(buf, 0) = 0x7b; WBUFL(buf, 2) = md->bl.id; - WBUFW(buf, 6) = battle_get_speed(&md->bl); - WBUFW(buf, 8) = uint16_t(md->opt1); - WBUFW(buf, 10) = uint16_t(md->opt2); - WBUFW(buf, 12) = uint16_t(md->option); + WBUFW(buf, 6) = static_cast(battle_get_speed(&md->bl).count()); + WBUFW(buf, 8) = static_cast(md->opt1); + WBUFW(buf, 10) = static_cast(md->opt2); + WBUFW(buf, 12) = static_cast(md->option); WBUFW(buf, 14) = md->mob_class; // snip: stuff for monsters disguised as PCs - WBUFL(buf, 22) = gettick(); + WBUFL(buf, 22) = gettick().time_since_epoch().count(); WBUFPOS2(buf, 50, md->bl.x, md->bl.y, md->to_x, md->to_y); WBUFB(buf, 56) = 5; @@ -919,7 +870,7 @@ int clif_mob007b(struct mob_data *md, unsigned char *buf) battle_get_lv(&md->bl)) > battle_config.max_lv) ? battle_config.max_lv : level; - return packet_len_table[0x7b]; + return clif_parse_func_table[0x7b].len; } /*========================================== @@ -931,11 +882,11 @@ int clif_npc0078(struct npc_data *nd, unsigned char *buf) { nullpo_ret(nd); - memset(buf, 0, packet_len_table[0x78]); + memset(buf, 0, clif_parse_func_table[0x78].len); WBUFW(buf, 0) = 0x78; WBUFL(buf, 2) = nd->bl.id; - WBUFW(buf, 6) = nd->speed; + WBUFW(buf, 6) = static_cast(nd->speed.count()); WBUFW(buf, 14) = nd->npc_class; WBUFPOS(buf, 46, nd->bl.x, nd->bl.y); // work around ICE in gcc 4.6 @@ -944,7 +895,7 @@ int clif_npc0078(struct npc_data *nd, unsigned char *buf) WBUFB(buf, 49) = 5; WBUFB(buf, 50) = 5; - return packet_len_table[0x78]; + return clif_parse_func_table[0x78].len; } /* These indices are derived from equip_pos in pc.c and some guesswork */ @@ -981,7 +932,7 @@ int clif_spawnpc(struct map_session_data *sd) WBUFW(buf, 0) = 0x1d9; WBUFW(buf, 51) = 0; - clif_send(buf, packet_len_table[0x1d9], &sd->bl, AREA_WOS); + clif_send(buf, clif_parse_func_table[0x1d9].len, &sd->bl, SendWho::AREA_WOS); if (map[sd->bl.m].flag.snow) clif_specialeffect(&sd->bl, 162, 1); @@ -1013,18 +964,18 @@ int clif_spawnnpc(struct npc_data *nd) if (nd->npc_class < 0 || nd->flag & 1 || nd->npc_class == INVISIBLE_CLASS) return 0; - memset(buf, 0, packet_len_table[0x7c]); + memset(buf, 0, clif_parse_func_table[0x7c].len); WBUFW(buf, 0) = 0x7c; WBUFL(buf, 2) = nd->bl.id; - WBUFW(buf, 6) = nd->speed; + WBUFW(buf, 6) = static_cast(nd->speed.count()); WBUFW(buf, 20) = nd->npc_class; WBUFPOS(buf, 36, nd->bl.x, nd->bl.y); - clif_send(buf, packet_len_table[0x7c], &nd->bl, AREA); + clif_send(buf, clif_parse_func_table[0x7c].len, &nd->bl, SendWho::AREA); len = clif_npc0078(nd, buf); - clif_send(buf, len, &nd->bl, AREA); + clif_send(buf, len, &nd->bl, SendWho::AREA); return 0; } @@ -1047,7 +998,7 @@ int clif_spawn_fake_npc_for_player(struct map_session_data *sd, int fake_npc_id) WFIFOW(fd, 12) = 0; WFIFOW(fd, 20) = 127; WFIFOPOS(fd, 36, sd->bl.x, sd->bl.y); - WFIFOSET(fd, packet_len_table[0x7c]); + WFIFOSET(fd, clif_parse_func_table[0x7c].len); WFIFOW(fd, 0) = 0x78; WFIFOL(fd, 2) = fake_npc_id; @@ -1061,7 +1012,7 @@ int clif_spawn_fake_npc_for_player(struct map_session_data *sd, int fake_npc_id) WFIFOPOS(fd, 36, sd->bl.x, sd->bl.y); WFIFOB(fd, 49) = 5; WFIFOB(fd, 50) = 5; - WFIFOSET(fd, packet_len_table[0x78]); + WFIFOSET(fd, clif_parse_func_table[0x78].len); return 0; } @@ -1078,7 +1029,7 @@ int clif_spawnmob(struct mob_data *md) nullpo_ret(md); { - memset(buf, 0, packet_len_table[0x7c]); + memset(buf, 0, clif_parse_func_table[0x7c].len); WBUFW(buf, 0) = 0x7c; WBUFL(buf, 2) = md->bl.id; @@ -1088,11 +1039,11 @@ int clif_spawnmob(struct mob_data *md) WBUFW(buf, 12) = uint16_t(md->option); WBUFW(buf, 20) = md->mob_class; WBUFPOS(buf, 36, md->bl.x, md->bl.y); - clif_send(buf, packet_len_table[0x7c], &md->bl, AREA); + clif_send(buf, clif_parse_func_table[0x7c].len, &md->bl, SendWho::AREA); } len = clif_mob0078(md, buf); - clif_send(buf, len, &md->bl, AREA); + clif_send(buf, len, &md->bl, SendWho::AREA); return 0; } @@ -1110,8 +1061,8 @@ int clif_servertick(struct map_session_data *sd) fd = sd->fd; WFIFOW(fd, 0) = 0x7f; - WFIFOL(fd, 2) = sd->server_tick; - WFIFOSET(fd, packet_len_table[0x7f]); + WFIFOL(fd, 2) = sd->server_tick.time_since_epoch().count(); + WFIFOSET(fd, clif_parse_func_table[0x7f].len); return 0; } @@ -1128,10 +1079,10 @@ int clif_walkok(struct map_session_data *sd) fd = sd->fd; WFIFOW(fd, 0) = 0x87; - WFIFOL(fd, 2) = gettick();; + WFIFOL(fd, 2) = gettick().time_since_epoch().count(); WFIFOPOS2(fd, 6, sd->bl.x, sd->bl.y, sd->to_x, sd->to_y); WFIFOB(fd, 11) = 0; - WFIFOSET(fd, packet_len_table[0x87]); + WFIFOSET(fd, clif_parse_func_table[0x87].len); return 0; } @@ -1149,7 +1100,7 @@ int clif_movechar(struct map_session_data *sd) len = clif_set007b(sd, buf); - clif_send(buf, len, &sd->bl, AREA_WOS); + clif_send(buf, len, &sd->bl, SendWho::AREA_WOS); if (battle_config.save_clothcolor == 1 && sd->status.clothes_color > 0) clif_changelook(&sd->bl, LOOK::CLOTHES_COLOR, @@ -1173,8 +1124,10 @@ void clif_quitsave(int, struct map_session_data *sd) *------------------------------------------ */ static -void clif_waitclose(timer_id, tick_t, custom_id_t id, custom_data_t) +void clif_waitclose(TimerData *, tick_t, int id) { + // TODO: what happens if the player disconnects + // and someone else connects? if (session[id]) session[id]->eof = 1; } @@ -1185,7 +1138,9 @@ void clif_waitclose(timer_id, tick_t, custom_id_t id, custom_data_t) */ void clif_setwaitclose(int fd) { - add_timer(gettick() + 5000, clif_waitclose, fd, 0); + add_timer(gettick() + std::chrono::seconds(5), + std::bind(clif_waitclose, ph::_1, ph::_2, + fd)); } /*========================================== @@ -1204,7 +1159,7 @@ int clif_changemap(struct map_session_data *sd, const char *mapname, int x, int memcpy(WFIFOP(fd, 2), mapname, 16); WFIFOW(fd, 18) = x; WFIFOW(fd, 20) = y; - WFIFOSET(fd, packet_len_table[0x91]); + WFIFOSET(fd, clif_parse_func_table[0x91].len); return 0; } @@ -1227,7 +1182,7 @@ int clif_changemapserver(struct map_session_data *sd, const char *mapname, int x WFIFOW(fd, 20) = y; WFIFOL(fd, 22) = ip.s_addr; WFIFOW(fd, 26) = port; - WFIFOSET(fd, packet_len_table[0x92]); + WFIFOSET(fd, clif_parse_func_table[0x92].len); return 0; } @@ -1247,7 +1202,7 @@ int clif_fixpos(struct block_list *bl) WBUFW(buf, 6) = bl->x; WBUFW(buf, 8) = bl->y; - clif_send(buf, packet_len_table[0x88], bl, AREA); + clif_send(buf, clif_parse_func_table[0x88].len, bl, SendWho::AREA); return 0; } @@ -1265,7 +1220,7 @@ int clif_npcbuysell(struct map_session_data *sd, int id) fd = sd->fd; WFIFOW(fd, 0) = 0xc4; WFIFOL(fd, 2) = id; - WFIFOSET(fd, packet_len_table[0xc4]); + WFIFOSET(fd, clif_parse_func_table[0xc4].len); return 0; } @@ -1366,7 +1321,7 @@ int clif_scriptnext(struct map_session_data *sd, int npcid) fd = sd->fd; WFIFOW(fd, 0) = 0xb5; WFIFOL(fd, 2) = npcid; - WFIFOSET(fd, packet_len_table[0xb5]); + WFIFOSET(fd, clif_parse_func_table[0xb5].len); return 0; } @@ -1384,7 +1339,7 @@ int clif_scriptclose(struct map_session_data *sd, int npcid) fd = sd->fd; WFIFOW(fd, 0) = 0xb6; WFIFOL(fd, 2) = npcid; - WFIFOSET(fd, packet_len_table[0xb6]); + WFIFOSET(fd, clif_parse_func_table[0xb6].len); return 0; } @@ -1422,7 +1377,7 @@ int clif_scriptinput(struct map_session_data *sd, int npcid) fd = sd->fd; WFIFOW(fd, 0) = 0x142; WFIFOL(fd, 2) = npcid; - WFIFOSET(fd, packet_len_table[0x142]); + WFIFOSET(fd, clif_parse_func_table[0x142].len); return 0; } @@ -1440,7 +1395,7 @@ int clif_scriptinputstr(struct map_session_data *sd, int npcid) fd = sd->fd; WFIFOW(fd, 0) = 0x1d4; WFIFOL(fd, 2) = npcid; - WFIFOSET(fd, packet_len_table[0x1d4]); + WFIFOSET(fd, clif_parse_func_table[0x1d4].len); return 0; } @@ -1464,7 +1419,7 @@ int clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, WFIFOL(fd, 14) = y; WFIFOB(fd, 18) = id; WFIFOL(fd, 19) = color; - WFIFOSET(fd, packet_len_table[0x144]); + WFIFOSET(fd, clif_parse_func_table[0x144].len); return 0; } @@ -1483,7 +1438,7 @@ int clif_cutin(struct map_session_data *sd, const char *image, int type) WFIFOW(fd, 0) = 0x1b3; memcpy(WFIFOP(fd, 2), image, 64); WFIFOB(fd, 66) = type; - WFIFOSET(fd, packet_len_table[0x1b3]); + WFIFOSET(fd, clif_parse_func_table[0x1b3].len); return 0; } @@ -1573,7 +1528,7 @@ int clif_additem(struct map_session_data *sd, int n, int amount, PickupFail fail WFIFOB(fd, 22) = uint8_t(fail); } - WFIFOSET(fd, packet_len_table[0xa0]); + WFIFOSET(fd, clif_parse_func_table[0xa0].len); return 0; } @@ -1592,7 +1547,7 @@ int clif_delitem(struct map_session_data *sd, int n, int amount) WFIFOW(fd, 2) = n + 2; WFIFOW(fd, 4) = amount; - WFIFOSET(fd, packet_len_table[0xaf]); + WFIFOSET(fd, clif_parse_func_table[0xaf].len); return 0; } @@ -1863,7 +1818,7 @@ int clif_updatestatus(struct map_session_data *sd, SP type) fd = sd->fd; WFIFOW(fd, 0) = 0xb0; - WFIFOW(fd, 2) = uint16_t(type); + WFIFOW(fd, 2) = static_cast(type); switch (type) { // 00b0 @@ -1871,14 +1826,15 @@ int clif_updatestatus(struct map_session_data *sd, SP type) pc_checkweighticon(sd); // is this because pc_checkweighticon can send other packets? WFIFOW(fd, 0) = 0xb0; - WFIFOW(fd, 2) = uint16_t(type); + WFIFOW(fd, 2) = static_cast(type); WFIFOL(fd, 4) = sd->weight; break; case SP::MAXWEIGHT: WFIFOL(fd, 4) = sd->max_weight; break; case SP::SPEED: - WFIFOL(fd, 4) = sd->speed; + // ... + WFIFOL(fd, 4) = static_cast(sd->speed.count()); break; case SP::BASELEVEL: WFIFOL(fd, 4) = sd->status.base_level; @@ -1914,7 +1870,7 @@ int clif_updatestatus(struct map_session_data *sd, SP type) WFIFOL(fd, 4) = sd->status.sp; break; case SP::ASPD: - WFIFOL(fd, 4) = sd->aspd; + WFIFOL(fd, 4) = static_cast(sd->aspd.count()); break; case SP::ATK1: WFIFOL(fd, 4) = sd->base_atk + sd->watk; @@ -2105,9 +2061,9 @@ int clif_changelook_towards(struct block_list *bl, LOOK type, int val, WBUFW(buf, 9) = 0; } if (dstsd) - clif_send(buf, packet_len_table[0x1d7], &dstsd->bl, SELF); + clif_send(buf, clif_parse_func_table[0x1d7].len, &dstsd->bl, SendWho::SELF); else - clif_send(buf, packet_len_table[0x1d7], bl, AREA); + clif_send(buf, clif_parse_func_table[0x1d7].len, bl, SendWho::AREA); } else { @@ -2117,9 +2073,9 @@ int clif_changelook_towards(struct block_list *bl, LOOK type, int val, WBUFW(buf, 7) = val; WBUFW(buf, 9) = 0; if (dstsd) - clif_send(buf, packet_len_table[0x1d7], &dstsd->bl, SELF); + clif_send(buf, clif_parse_func_table[0x1d7].len, &dstsd->bl, SendWho::SELF); else - clif_send(buf, packet_len_table[0x1d7], bl, AREA); + clif_send(buf, clif_parse_func_table[0x1d7].len, bl, SendWho::AREA); } return 0; } @@ -2166,7 +2122,7 @@ int clif_initialstatus(struct map_session_data *sd) WFIFOW(fd, 40) = sd->status.karma; WFIFOW(fd, 42) = sd->status.manner; - WFIFOSET(fd, packet_len_table[0xbd]); + WFIFOSET(fd, clif_parse_func_table[0xbd].len); clif_updatestatus(sd, SP::STR); clif_updatestatus(sd, SP::AGI); @@ -2198,7 +2154,7 @@ int clif_arrowequip(struct map_session_data *sd, int val) WFIFOW(fd, 0) = 0x013c; WFIFOW(fd, 2) = val + 2; //矢のアイテムID - WFIFOSET(fd, packet_len_table[0x013c]); + WFIFOSET(fd, clif_parse_func_table[0x013c].len); return 0; } @@ -2217,7 +2173,7 @@ int clif_arrow_fail(struct map_session_data *sd, int type) WFIFOW(fd, 0) = 0x013b; WFIFOW(fd, 2) = type; - WFIFOSET(fd, packet_len_table[0x013b]); + WFIFOSET(fd, clif_parse_func_table[0x013b].len); return 0; } @@ -2237,7 +2193,7 @@ int clif_statusupack(struct map_session_data *sd, SP type, int ok, int val) WFIFOW(fd, 2) = uint16_t(type); WFIFOB(fd, 4) = ok; WFIFOB(fd, 5) = val; - WFIFOSET(fd, packet_len_table[0xbc]); + WFIFOSET(fd, clif_parse_func_table[0xbc].len); return 0; } @@ -2257,7 +2213,7 @@ int clif_equipitemack(struct map_session_data *sd, int n, EPOS pos, int ok) WFIFOW(fd, 2) = n + 2; WFIFOW(fd, 4) = uint16_t(pos); WFIFOB(fd, 6) = ok; - WFIFOSET(fd, packet_len_table[0xaa]); + WFIFOSET(fd, clif_parse_func_table[0xaa].len); return 0; } @@ -2277,7 +2233,7 @@ int clif_unequipitemack(struct map_session_data *sd, int n, EPOS pos, int ok) WFIFOW(fd, 2) = n + 2; WFIFOW(fd, 4) = uint16_t(pos); WFIFOB(fd, 6) = ok; - WFIFOSET(fd, packet_len_table[0xac]); + WFIFOSET(fd, clif_parse_func_table[0xac].len); return 0; } @@ -2296,7 +2252,7 @@ int clif_misceffect(struct block_list *bl, int type) WBUFL(buf, 2) = bl->id; WBUFL(buf, 6) = type; - clif_send(buf, packet_len_table[0x19b], bl, AREA); + clif_send(buf, clif_parse_func_table[0x19b].len, bl, SendWho::AREA); return 0; } @@ -2322,7 +2278,7 @@ int clif_changeoption(struct block_list *bl) WBUFW(buf, 10) = uint16_t(option); WBUFB(buf, 12) = 0; // ?? - clif_send(buf, packet_len_table[0x119], bl, AREA); + clif_send(buf, clif_parse_func_table[0x119].len, bl, SendWho::AREA); return 0; } @@ -2343,7 +2299,7 @@ int clif_useitemack(struct map_session_data *sd, int index, int amount, WFIFOW(fd, 2) = index + 2; WFIFOW(fd, 4) = amount; WFIFOB(fd, 6) = ok; - WFIFOSET(fd, packet_len_table[0xa8]); + WFIFOSET(fd, clif_parse_func_table[0xa8].len); } else { @@ -2359,7 +2315,7 @@ int clif_useitemack(struct map_session_data *sd, int index, int amount, WBUFL(buf, 6) = sd->bl.id; WBUFW(buf, 10) = amount; WBUFB(buf, 12) = ok; - clif_send(buf, packet_len_table[0x1c8], &sd->bl, SELF); + clif_send(buf, clif_parse_func_table[0x1c8].len, &sd->bl, SendWho::SELF); } return 0; @@ -2378,7 +2334,7 @@ int clif_traderequest(struct map_session_data *sd, const char *name) fd = sd->fd; WFIFOW(fd, 0) = 0xe5; strcpy((char *)WFIFOP(fd, 2), name); - WFIFOSET(fd, packet_len_table[0xe5]); + WFIFOSET(fd, clif_parse_func_table[0xe5].len); return 0; } @@ -2396,7 +2352,7 @@ int clif_tradestart(struct map_session_data *sd, int type) fd = sd->fd; WFIFOW(fd, 0) = 0xe7; WFIFOB(fd, 2) = type; - WFIFOSET(fd, packet_len_table[0xe7]); + WFIFOSET(fd, clif_parse_func_table[0xe7].len); return 0; } @@ -2478,7 +2434,7 @@ int clif_tradeadditem(struct map_session_data *sd, WFIFOW(fd, 17) = sd->status.inventory[index].card[3]; } } - WFIFOSET(fd, packet_len_table[0xe9]); + WFIFOSET(fd, clif_parse_func_table[0xe9].len); return 0; } @@ -2499,7 +2455,7 @@ int clif_tradeitemok(struct map_session_data *sd, int index, int amount, WFIFOW(fd, 2) = index; WFIFOW(fd, 4) = amount; WFIFOB(fd, 6) = fail; - WFIFOSET(fd, packet_len_table[0x1b1]); + WFIFOSET(fd, clif_parse_func_table[0x1b1].len); return 0; } @@ -2517,7 +2473,7 @@ int clif_tradedeal_lock(struct map_session_data *sd, int fail) fd = sd->fd; WFIFOW(fd, 0) = 0xec; WFIFOB(fd, 2) = fail; // 0=you 1=the other person - WFIFOSET(fd, packet_len_table[0xec]); + WFIFOSET(fd, clif_parse_func_table[0xec].len); return 0; } @@ -2534,7 +2490,7 @@ int clif_tradecancelled(struct map_session_data *sd) fd = sd->fd; WFIFOW(fd, 0) = 0xee; - WFIFOSET(fd, packet_len_table[0xee]); + WFIFOSET(fd, clif_parse_func_table[0xee].len); return 0; } @@ -2552,7 +2508,7 @@ int clif_tradecompleted(struct map_session_data *sd, int fail) fd = sd->fd; WFIFOW(fd, 0) = 0xf0; WFIFOB(fd, 2) = fail; - WFIFOSET(fd, packet_len_table[0xf0]); + WFIFOSET(fd, clif_parse_func_table[0xf0].len); return 0; } @@ -2573,7 +2529,7 @@ int clif_updatestorageamount(struct map_session_data *sd, WFIFOW(fd, 0) = 0xf2; // update storage amount WFIFOW(fd, 2) = stor->storage_amount; //items WFIFOW(fd, 4) = MAX_STORAGE; //items max - WFIFOSET(fd, packet_len_table[0xf2]); + WFIFOSET(fd, clif_parse_func_table[0xf2].len); return 0; } @@ -2636,7 +2592,7 @@ int clif_storageitemadded(struct map_session_data *sd, struct storage *stor, else WFIFOW(fd, 19) = stor->storage_[index].card[3]; } - WFIFOSET(fd, packet_len_table[0xf4]); + WFIFOSET(fd, clif_parse_func_table[0xf4].len); return 0; } @@ -2656,7 +2612,7 @@ int clif_storageitemremoved(struct map_session_data *sd, int index, WFIFOW(fd, 0) = 0xf6; // Storage item removed WFIFOW(fd, 2) = index + 1; WFIFOL(fd, 4) = amount; - WFIFOSET(fd, packet_len_table[0xf6]); + WFIFOSET(fd, clif_parse_func_table[0xf6].len); return 0; } @@ -2673,7 +2629,7 @@ int clif_storageclose(struct map_session_data *sd) fd = sd->fd; WFIFOW(fd, 0) = 0xf8; // Storage Closed - WFIFOSET(fd, packet_len_table[0xf8]); + WFIFOSET(fd, clif_parse_func_table[0xf8].len); return 0; } @@ -2704,7 +2660,7 @@ void clif_getareachar_pc(struct map_session_data *sd, nullpo_retv(sd); nullpo_retv(dstsd); - if (dstsd->walktimer != -1) + if (dstsd->walktimer) { len = clif_set007b(dstsd, static_cast(WFIFOP(sd->fd, 0))); WFIFOSET(sd->fd, len); @@ -2754,7 +2710,7 @@ int clif_movemob(struct mob_data *md) nullpo_ret(md); len = clif_mob007b(md, buf); - clif_send(buf, len, &md->bl, AREA); + clif_send(buf, len, &md->bl, SendWho::AREA); return 0; } @@ -2773,12 +2729,12 @@ int clif_fixmobpos(struct mob_data *md) if (md->state.state == MS::WALK) { len = clif_mob007b(md, buf); - clif_send(buf, len, &md->bl, AREA); + clif_send(buf, len, &md->bl, SendWho::AREA); } else { len = clif_mob0078(md, buf); - clif_send(buf, len, &md->bl, AREA); + clif_send(buf, len, &md->bl, SendWho::AREA); } return 0; @@ -2795,15 +2751,15 @@ int clif_fixpcpos(struct map_session_data *sd) nullpo_ret(sd); - if (sd->walktimer != -1) + if (sd->walktimer) { len = clif_set007b(sd, buf); - clif_send(buf, len, &sd->bl, AREA); + clif_send(buf, len, &sd->bl, SendWho::AREA); } else { len = clif_set0078(sd, buf); - clif_send(buf, len, &sd->bl, AREA); + clif_send(buf, len, &sd->bl, SendWho::AREA); } clif_changelook_accessories(&sd->bl, NULL); @@ -2815,8 +2771,8 @@ int clif_fixpcpos(struct map_session_data *sd) *------------------------------------------ */ int clif_damage(struct block_list *src, struct block_list *dst, - unsigned int tick, int sdelay, int ddelay, int damage, - int div, DamageType type, int damage2) + tick_t tick, interval_t sdelay, interval_t ddelay, int damage, + int div, DamageType type, int damage2) { unsigned char buf[256]; eptr sc_data; @@ -2829,14 +2785,14 @@ int clif_damage(struct block_list *src, struct block_list *dst, WBUFW(buf, 0) = 0x8a; WBUFL(buf, 2) = src->id; WBUFL(buf, 6) = dst->id; - WBUFL(buf, 10) = tick; - WBUFL(buf, 14) = sdelay; - WBUFL(buf, 18) = ddelay; + WBUFL(buf, 10) = tick.time_since_epoch().count(); + WBUFL(buf, 14) = sdelay.count(); + WBUFL(buf, 18) = ddelay.count(); WBUFW(buf, 22) = (damage > 0x7fff) ? 0x7fff : damage; WBUFW(buf, 24) = div; WBUFB(buf, 26) = static_cast(type); WBUFW(buf, 27) = damage2; - clif_send(buf, packet_len_table[0x8a], src, AREA); + clif_send(buf, clif_parse_func_table[0x8a].len, src, SendWho::AREA); return 0; } @@ -2892,7 +2848,7 @@ void clif_getareachar_item(struct map_session_data *sd, WFIFOB(fd, 15) = fitem->subx; WFIFOB(fd, 16) = fitem->suby; - WFIFOSET(fd, packet_len_table[0x9d]); + WFIFOSET(fd, clif_parse_func_table[0x9d].len); } /*========================================== @@ -3065,7 +3021,7 @@ int clif_skillinfo(struct map_session_data *sd, SkillID skillid, int type, memset(WFIFOP(fd, 14), 0, 24); WFIFOB(fd, 38) = (sd->status.skill[skillid].lv < skill_get_max_raise(id)) ? 1 : 0; - WFIFOSET(fd, packet_len_table[0x147]); + WFIFOSET(fd, clif_parse_func_table[0x147].len); return 0; } @@ -3134,7 +3090,7 @@ int clif_skillup(struct map_session_data *sd, SkillID skill_num) WFIFOB(fd, 10) = (sd->status.skill[skill_num].lv < skill_get_max_raise(sd->status.skill[skill_num].id)) ? 1 : 0; - WFIFOSET(fd, packet_len_table[0x10e]); + WFIFOSET(fd, clif_parse_func_table[0x10e].len); return 0; } @@ -3151,7 +3107,7 @@ int clif_skillcastcancel(struct block_list *bl) WBUFW(buf, 0) = 0x1b9; WBUFL(buf, 2) = bl->id; - clif_send(buf, packet_len_table[0x1b9], bl, AREA); + clif_send(buf, clif_parse_func_table[0x1b9].len, bl, SendWho::AREA); return 0; } @@ -3180,7 +3136,7 @@ int clif_skill_fail(struct map_session_data *sd, SkillID skill_id, int type, WFIFOW(fd, 6) = 0; WFIFOB(fd, 8) = 0; WFIFOB(fd, 9) = type; - WFIFOSET(fd, packet_len_table[0x110]); + WFIFOSET(fd, clif_parse_func_table[0x110].len); return 0; } @@ -3190,8 +3146,8 @@ int clif_skill_fail(struct map_session_data *sd, SkillID skill_id, int type, *------------------------------------------ */ int clif_skill_damage(struct block_list *src, struct block_list *dst, - unsigned int tick, int sdelay, int ddelay, int damage, - int div, SkillID skill_id, int skill_lv, int type) + tick_t tick, interval_t sdelay, interval_t ddelay, int damage, + int div, SkillID skill_id, int skill_lv, int type) { unsigned char buf[64]; eptr sc_data; @@ -3205,14 +3161,14 @@ int clif_skill_damage(struct block_list *src, struct block_list *dst, WBUFW(buf, 2) = uint16_t(skill_id); WBUFL(buf, 4) = src->id; WBUFL(buf, 8) = dst->id; - WBUFL(buf, 12) = tick; - WBUFL(buf, 16) = sdelay; - WBUFL(buf, 20) = ddelay; + WBUFL(buf, 12) = static_cast(tick.time_since_epoch().count()); + WBUFL(buf, 16) = static_cast(sdelay.count()); + WBUFL(buf, 20) = static_cast(ddelay.count()); WBUFL(buf, 24) = damage; WBUFW(buf, 28) = skill_lv; WBUFW(buf, 30) = div; WBUFB(buf, 32) = (type > 0) ? type : skill_get_hit(skill_id); - clif_send(buf, packet_len_table[0x1de], src, AREA); + clif_send(buf, clif_parse_func_table[0x1de].len, src, SendWho::AREA); return 0; } @@ -3231,7 +3187,7 @@ int clif_status_change(struct block_list *bl, StatusChange type, int flag) WBUFW(buf, 2) = uint16_t(type); WBUFL(buf, 4) = bl->id; WBUFB(buf, 8) = flag; - clif_send(buf, packet_len_table[0x196], bl, AREA); + clif_send(buf, clif_parse_func_table[0x196].len, bl, SendWho::AREA); return 0; } @@ -3268,10 +3224,10 @@ void clif_GMmessage(struct block_list *bl, const_string mes, int flag) WBUFB(buf, lp + mes.size()) = '\0'; flag &= 0x07; clif_send(buf, WBUFW(buf, 2), bl, - (flag == 1) ? ALL_SAMEMAP : - (flag == 2) ? AREA : - (flag == 3) ? SELF : - ALL_CLIENT); + (flag == 1) ? SendWho::ALL_SAMEMAP : + (flag == 2) ? SendWho::AREA : + (flag == 3) ? SendWho::SELF : + SendWho::ALL_CLIENT); } /*========================================== @@ -3288,7 +3244,7 @@ int clif_resurrection(struct block_list *bl, int type) WBUFL(buf, 2) = bl->id; WBUFW(buf, 6) = type; - clif_send(buf, packet_len_table[0x148], bl, type == 1 ? AREA : AREA_WOS); + clif_send(buf, clif_parse_func_table[0x148].len, bl, type == 1 ? SendWho::AREA : SendWho::AREA_WOS); return 0; } @@ -3315,7 +3271,7 @@ int clif_wis_end(int fd, int flag) // R 0098 .B: 0: success to send wisper { WFIFOW(fd, 0) = 0x98; WFIFOW(fd, 2) = flag; - WFIFOSET(fd, packet_len_table[0x98]); + WFIFOSET(fd, clif_parse_func_table[0x98].len); return 0; } @@ -3340,7 +3296,7 @@ int clif_party_created(struct map_session_data *sd, int flag) fd = sd->fd; WFIFOW(fd, 0) = 0xfa; WFIFOB(fd, 2) = flag; - WFIFOSET(fd, packet_len_table[0xfa]); + WFIFOSET(fd, clif_parse_func_table[0xfa].len); return 0; } @@ -3381,7 +3337,7 @@ int clif_party_info(struct party *p, int fd) return 9; } if (sd != NULL) - clif_send(buf, WBUFW(buf, 2), &sd->bl, PARTY); + clif_send(buf, WBUFW(buf, 2), &sd->bl, SendWho::PARTY); return 0; } @@ -3409,7 +3365,7 @@ int clif_party_invite(struct map_session_data *sd, WFIFOW(fd, 0) = 0xfe; WFIFOL(fd, 2) = sd->status.account_id; memcpy(WFIFOP(fd, 6), p->name, 24); - WFIFOSET(fd, packet_len_table[0xfe]); + WFIFOSET(fd, clif_parse_func_table[0xfe].len); return 0; } @@ -3437,7 +3393,7 @@ int clif_party_inviteack(struct map_session_data *sd, const char *nick, int flag WFIFOW(fd, 0) = 0xfd; memcpy(WFIFOP(fd, 2), nick, 24); WFIFOB(fd, 26) = flag; - WFIFOSET(fd, packet_len_table[0xfd]); + WFIFOSET(fd, clif_parse_func_table[0xfd].len); return 0; } @@ -3469,11 +3425,11 @@ int clif_party_option(struct party *p, struct map_session_data *sd, int flag) WBUFW(buf, 2) = ((flag & 0x01) ? 2 : p->exp); WBUFW(buf, 4) = ((flag & 0x10) ? 2 : p->item); if (flag == 0) - clif_send(buf, packet_len_table[0x101], &sd->bl, PARTY); + clif_send(buf, clif_parse_func_table[0x101].len, &sd->bl, SendWho::PARTY); else { - memcpy(WFIFOP(sd->fd, 0), buf, packet_len_table[0x101]); - WFIFOSET(sd->fd, packet_len_table[0x101]); + memcpy(WFIFOP(sd->fd, 0), buf, clif_parse_func_table[0x101].len); + WFIFOSET(sd->fd, clif_parse_func_table[0x101].len); } return 0; } @@ -3502,12 +3458,12 @@ int clif_party_leaved(struct party *p, struct map_session_data *sd, if ((sd = p->member[i].sd) != NULL) break; if (sd != NULL) - clif_send(buf, packet_len_table[0x105], &sd->bl, PARTY); + clif_send(buf, clif_parse_func_table[0x105].len, &sd->bl, SendWho::PARTY); } else if (sd != NULL) { - memcpy(WFIFOP(sd->fd, 0), buf, packet_len_table[0x105]); - WFIFOSET(sd->fd, packet_len_table[0x105]); + memcpy(WFIFOP(sd->fd, 0), buf, clif_parse_func_table[0x105].len); + WFIFOSET(sd->fd, clif_parse_func_table[0x105].len); } return 0; } @@ -3536,7 +3492,7 @@ int clif_party_message(struct party *p, int account_id, const char *mes, int len WBUFW(buf, 2) = len + 8; WBUFL(buf, 4) = account_id; memcpy(WBUFP(buf, 8), mes, len); - clif_send(buf, len + 8, &sd->bl, PARTY); + clif_send(buf, len + 8, &sd->bl, SendWho::PARTY); } return 0; } @@ -3555,7 +3511,7 @@ int clif_party_xy(struct party *, struct map_session_data *sd) WBUFL(buf, 2) = sd->status.account_id; WBUFW(buf, 6) = sd->bl.x; WBUFW(buf, 8) = sd->bl.y; - clif_send(buf, packet_len_table[0x107], &sd->bl, PARTY_SAMEMAP_WOS); + clif_send(buf, clif_parse_func_table[0x107].len, &sd->bl, SendWho::PARTY_SAMEMAP_WOS); // if(battle_config.etc_log) // PRINTF("clif_party_xy %d\n",sd->status.account_id); return 0; @@ -3576,7 +3532,7 @@ int clif_party_hp(struct party *, struct map_session_data *sd) WBUFW(buf, 6) = (sd->status.hp > 0x7fff) ? 0x7fff : sd->status.hp; WBUFW(buf, 8) = (sd->status.max_hp > 0x7fff) ? 0x7fff : sd->status.max_hp; - clif_send(buf, packet_len_table[0x106], &sd->bl, PARTY_AREA_WOS); + clif_send(buf, clif_parse_func_table[0x106].len, &sd->bl, SendWho::PARTY_AREA_WOS); // if(battle_config.etc_log) // PRINTF("clif_party_hp %d\n",sd->status.account_id); return 0; @@ -3601,7 +3557,7 @@ int clif_movetoattack(struct map_session_data *sd, struct block_list *bl) WFIFOW(fd, 10) = sd->bl.x; WFIFOW(fd, 12) = sd->bl.y; WFIFOW(fd, 14) = sd->attackrange; - WFIFOSET(fd, packet_len_table[0x139]); + WFIFOSET(fd, clif_parse_func_table[0x139].len); return 0; } @@ -3617,7 +3573,7 @@ int clif_mvp_effect(struct map_session_data *sd) WBUFW(buf, 0) = 0x10c; WBUFL(buf, 2) = sd->bl.id; - clif_send(buf, packet_len_table[0x10c], &sd->bl, AREA); + clif_send(buf, clif_parse_func_table[0x10c].len, &sd->bl, SendWho::AREA); return 0; } @@ -3634,7 +3590,7 @@ void clif_emotion(struct block_list *bl, int type) WBUFW(buf, 0) = 0xc0; WBUFL(buf, 2) = bl->id; WBUFB(buf, 6) = type; - clif_send(buf, packet_len_table[0xc0], bl, AREA); + clif_send(buf, clif_parse_func_table[0xc0].len, bl, SendWho::AREA); } static @@ -3642,7 +3598,7 @@ void clif_emotion_towards(struct block_list *bl, struct block_list *target, int type) { unsigned char buf[8]; - int len = packet_len_table[0xc0]; + int len = clif_parse_func_table[0xc0].len; struct map_session_data *sd = (struct map_session_data *) target; nullpo_retv(bl); @@ -3672,7 +3628,7 @@ void clif_sitting(int, struct map_session_data *sd) WBUFW(buf, 0) = 0x8a; WBUFL(buf, 2) = sd->bl.id; WBUFB(buf, 26) = 2; - clif_send(buf, packet_len_table[0x8a], &sd->bl, AREA); + clif_send(buf, clif_parse_func_table[0x8a].len, &sd->bl, SendWho::AREA); } /*========================================== @@ -3689,7 +3645,7 @@ int clif_GM_kickack(struct map_session_data *sd, int id) fd = sd->fd; WFIFOW(fd, 0) = 0xcd; WFIFOL(fd, 2) = id; - WFIFOSET(fd, packet_len_table[0xcd]); + WFIFOSET(fd, clif_parse_func_table[0xcd].len); return 0; } @@ -3717,7 +3673,7 @@ int clif_specialeffect(struct block_list *bl, int type, int flag) nullpo_ret(bl); - memset(buf, 0, packet_len_table[0x19b]); + memset(buf, 0, clif_parse_func_table[0x19b].len); WBUFW(buf, 0) = 0x19b; WBUFL(buf, 2) = bl->id; @@ -3736,9 +3692,9 @@ int clif_specialeffect(struct block_list *bl, int type, int flag) } else if (flag == 1) - clif_send(buf, packet_len_table[0x19b], bl, SELF); + clif_send(buf, clif_parse_func_table[0x19b].len, bl, SendWho::SELF); else if (!flag) - clif_send(buf, packet_len_table[0x19b], bl, AREA); + clif_send(buf, clif_parse_func_table[0x19b].len, bl, SendWho::AREA); return 0; @@ -3790,7 +3746,8 @@ void clif_parse_WantToConnection(int fd, struct map_session_data *sd) sd->fd = fd; pc_setnewpc(sd, account_id, RFIFOL(fd, 6), RFIFOL(fd, 10), - RFIFOL(fd, 14), RFIFOB(fd, 18), fd); + tick_t(static_cast(RFIFOL(fd, 14))), + RFIFOB(fd, 18)); map_addiddb(&sd->bl); @@ -3841,7 +3798,7 @@ void clif_parse_LoadEndAck(int, struct map_session_data *sd) if (battle_config.pc_invincible_time > 0) { - pc_setinvincibletimer(sd, battle_config.pc_invincible_time); + pc_setinvincibletimer(sd, static_cast(battle_config.pc_invincible_time)); } map_addblock(&sd->bl); // ブロック登録 @@ -3852,15 +3809,16 @@ void clif_parse_LoadEndAck(int, struct map_session_data *sd) clif_updatestatus(sd, SP::WEIGHT); // pvp - if (sd->pvp_timer != -1 && !battle_config.pk_mode) - delete_timer(sd->pvp_timer, pc_calc_pvprank_timer); + if (sd->pvp_timer && !battle_config.pk_mode) + delete_timer(sd->pvp_timer); if (map[sd->bl.m].flag.pvp) { if (!battle_config.pk_mode) - { // remove pvp stuff for pk_mode [Valaris] - sd->pvp_timer = - add_timer(gettick() + 200, pc_calc_pvprank_timer, sd->bl.id, - 0); + { + // remove pvp stuff for pk_mode [Valaris] + sd->pvp_timer = add_timer(gettick() + std::chrono::milliseconds(200), + std::bind(pc_calc_pvprank_timer, ph::_1, ph::_2, + sd->bl.id)); sd->pvp_rank = 0; sd->pvp_lastusers = 0; sd->pvp_point = 5; @@ -3868,7 +3826,7 @@ void clif_parse_LoadEndAck(int, struct map_session_data *sd) } else { - sd->pvp_timer = -1; + sd->pvp_timer = nullptr; } sd->state.connect_new = 0; @@ -3879,9 +3837,6 @@ void clif_parse_LoadEndAck(int, struct map_session_data *sd) clif_changelook(&sd->bl, LOOK::CLOTHES_COLOR, sd->status.clothes_color); - if (battle_config.muting_players && sd->status.manner < 0) - skill_status_change_start(&sd->bl, StatusChange::SC_NOCHAT, 0, 0, 0, 0, 0, 0); - // option clif_changeoption(&sd->bl); for (i = 0; i < MAX_INVENTORY; i++) @@ -3889,13 +3844,11 @@ void clif_parse_LoadEndAck(int, struct map_session_data *sd) if (bool(sd->status.inventory[i].equip) && bool(sd->status.inventory[i].equip & EPOS::WEAPON) && sd->status.inventory[i].broken == 1) - skill_status_change_start(&sd->bl, StatusChange::SC_BROKNWEAPON, 0, 0, 0, 0, 0, - 0); + skill_status_change_start(&sd->bl, StatusChange::SC_BROKNWEAPON, 0, interval_t::zero()); if (bool(sd->status.inventory[i].equip) && bool(sd->status.inventory[i].equip & EPOS::MISC1) && sd->status.inventory[i].broken == 1) - skill_status_change_start(&sd->bl, StatusChange::SC_BROKNARMOR, 0, 0, 0, 0, 0, - 0); + skill_status_change_start(&sd->bl, StatusChange::SC_BROKNARMOR, 0, interval_t::zero()); } // clif_changelook_accessories(sd, NULL); @@ -3914,7 +3867,7 @@ void clif_parse_TickSend(int fd, struct map_session_data *sd) { nullpo_retv(sd); - sd->client_tick = RFIFOL(fd, 2); + sd->client_tick = tick_t(static_cast(RFIFOL(fd, 2))); sd->server_tick = gettick(); clif_servertick(sd); } @@ -3949,7 +3902,7 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd) if (bool(sd->opt1) && sd->opt1 != (Opt1::_stone6)) return; - if (sd->invincible_timer != -1) + if (sd->invincible_timer) pc_delinvincibletimer(sd); pc_stopattack(sd); @@ -3966,27 +3919,22 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd) */ void clif_parse_QuitGame(int fd, struct map_session_data *sd) { - unsigned int tick = gettick(); + tick_t tick = gettick(); nullpo_retv(sd); WFIFOW(fd, 0) = 0x18b; - if ((!pc_isdead(sd) - && (sd->opt1 != Opt1::ZERO - || (sd->opt2 != Opt2::ZERO - && !(night_flag == 1 && sd->opt2 == Opt2::BLIND)))) - || (DIFF_TICK(tick, sd->canact_tick) < 0) - ) + if ((!pc_isdead(sd) && (sd->opt1 != Opt1::ZERO || sd->opt2 != Opt2::ZERO)) + || (tick < sd->canact_tick)) { WFIFOW(fd, 2) = 1; - WFIFOSET(fd, packet_len_table[0x18b]); + WFIFOSET(fd, clif_parse_func_table[0x18b].len); return; } /* Rovert's prevent logout option fixed [Valaris] */ - if ((battle_config.prevent_logout - && (gettick() - sd->canlog_tick) >= 10000) - || (!battle_config.prevent_logout)) + if (!battle_config.prevent_logout + || tick >= sd->canlog_tick + std::chrono::seconds(10)) { clif_setwaitclose(fd); WFIFOW(fd, 2) = 0; @@ -3995,7 +3943,7 @@ void clif_parse_QuitGame(int fd, struct map_session_data *sd) { WFIFOW(fd, 2) = 1; } - WFIFOSET(fd, packet_len_table[0x18b]); + WFIFOSET(fd, clif_parse_func_table[0x18b].len); } @@ -4029,7 +3977,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) memset(WFIFOP(fd, 6), 0, 24); else memcpy(WFIFOP(fd, 6), ssd->status.name, 24); - WFIFOSET(fd, packet_len_table[0x95]); + WFIFOSET(fd, clif_parse_func_table[0x95].len); struct party *p = NULL; @@ -4051,7 +3999,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) memcpy(WFIFOP(fd, 30), "", 24); memcpy(WFIFOP(fd, 54), "", 24); memcpy(WFIFOP(fd, 78), "", 24); // We send this value twice because the client expects it - WFIFOSET(fd, packet_len_table[0x195]); + WFIFOSET(fd, clif_parse_func_table[0x195].len); } @@ -4066,7 +4014,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) WFIFOL(fd, 2) = account_id; WFIFOL(fd, 6) = ip.s_addr; - WFIFOSET(fd, packet_len_table[0x20C]); + WFIFOSET(fd, clif_parse_func_table[0x20C].len); } } @@ -4084,7 +4032,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) while (*start == '_') *start++ = ' '; } - WFIFOSET(fd, packet_len_table[0x95]); + WFIFOSET(fd, clif_parse_func_table[0x95].len); break; case BL::MOB: { @@ -4093,7 +4041,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) nullpo_retv(md); memcpy(WFIFOP(fd, 6), md->name, 24); - WFIFOSET(fd, packet_len_table[0x95]); + WFIFOSET(fd, clif_parse_func_table[0x95].len); } break; default: @@ -4128,8 +4076,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) return; } - if (is_atcommand(fd, sd, message, 0) - || (sd->sc_data[StatusChange::SC_NOCHAT].timer != -1)) //チャット禁止 + if (is_atcommand(fd, sd, message, 0)) //チャット禁止 { free(buf); return; @@ -4152,7 +4099,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) // evil multiuse buffer! clif_send((const uint8_t *)buf, msg_len + 8, &sd->bl, - sd->chatID ? CHAT_WOS : AREA_CHAT_WOC); + sd->chatID ? SendWho::CHAT_WOS : SendWho::AREA_CHAT_WOC); } /* Send the message back to the speaker. */ @@ -4179,7 +4126,7 @@ int clif_message(struct block_list *bl, const char *msg) WBUFL(buf, 4) = bl->id; memcpy(WBUFP(buf, 8), msg, msg_len); - clif_send(buf, WBUFW(buf, 2), bl, AREA); + clif_send(buf, WBUFW(buf, 2), bl, SendWho::AREA); return 0; } @@ -4210,7 +4157,7 @@ void clif_parse_ChangeDir(int fd, struct map_session_data *sd) WBUFW(buf, 6) = 0; WBUFB(buf, 8) = static_cast(dir); - clif_send(buf, packet_len_table[0x9c], &sd->bl, AREA_WOS); + clif_send(buf, clif_parse_func_table[0x9c].len, &sd->bl, SendWho::AREA_WOS); } @@ -4231,7 +4178,7 @@ void clif_parse_Emotion(int fd, struct map_session_data *sd) WBUFW(buf, 0) = 0xc0; WBUFL(buf, 2) = sd->bl.id; WBUFB(buf, 6) = RFIFOB(fd, 2); - clif_send(buf, packet_len_table[0xc0], &sd->bl, AREA); + clif_send(buf, clif_parse_func_table[0xc0].len, &sd->bl, SendWho::AREA); } else clif_skill_fail(sd, SkillID::ONE, 0, 1); @@ -4246,7 +4193,7 @@ void clif_parse_HowManyConnections(int fd, struct map_session_data *) { WFIFOW(fd, 0) = 0xc2; WFIFOL(fd, 2) = map_getusers(); - WFIFOSET(fd, packet_len_table[0xc2]); + WFIFOSET(fd, clif_parse_func_table[0xc2].len); } /*========================================== @@ -4256,7 +4203,6 @@ void clif_parse_HowManyConnections(int fd, struct map_session_data *) static void clif_parse_ActionRequest(int fd, struct map_session_data *sd) { - unsigned int tick; unsigned char buf[64]; int action_type, target_id; @@ -4272,7 +4218,7 @@ void clif_parse_ActionRequest(int fd, struct map_session_data *sd) || sd->state.storage_open) return; - tick = gettick(); + tick_t tick = gettick(); pc_stop_walking(sd, 0); pc_stopattack(sd); @@ -4288,13 +4234,13 @@ void clif_parse_ActionRequest(int fd, struct map_session_data *sd) return; if (!battle_config.sdelay_attack_enable) { - if (DIFF_TICK(tick, sd->canact_tick) < 0) + if (tick < sd->canact_tick) { clif_skill_fail(sd, SkillID::ONE, 4, 0); return; } } - if (sd->invincible_timer != -1) + if (sd->invincible_timer) pc_delinvincibletimer(sd); if (sd->attacktarget > 0) // [Valaris] sd->attacktarget = 0; @@ -4312,7 +4258,7 @@ void clif_parse_ActionRequest(int fd, struct map_session_data *sd) WBUFW(buf, 0) = 0x8a; WBUFL(buf, 2) = sd->bl.id; WBUFB(buf, 26) = 3; - clif_send(buf, packet_len_table[0x8a], &sd->bl, AREA); + clif_send(buf, clif_parse_func_table[0x8a].len, &sd->bl, SendWho::AREA); break; } } @@ -4340,9 +4286,8 @@ void clif_parse_Restart(int fd, struct map_session_data *sd) break; case 0x01: /* Rovert's Prevent logout option - Fixed [Valaris] */ - if ((battle_config.prevent_logout - && (gettick() - sd->canlog_tick) >= 10000) - || (!battle_config.prevent_logout)) + if (!battle_config.prevent_logout + || gettick() >= sd->canlog_tick + std::chrono::seconds(10)) { chrif_charselectreq(sd); } @@ -4351,7 +4296,7 @@ void clif_parse_Restart(int fd, struct map_session_data *sd) WFIFOW(fd, 0) = 0x18b; WFIFOW(fd, 2) = 1; - WFIFOSET(fd, packet_len_table[0x018b]); + WFIFOSET(fd, clif_parse_func_table[0x018b].len); } break; } @@ -4383,8 +4328,7 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) return; } - if (is_atcommand(fd, sd, message, 0) - || (sd->sc_data[StatusChange::SC_NOCHAT].timer != -1)) + if (is_atcommand(fd, sd, message, 0)) { free(buf); return; @@ -4472,8 +4416,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) } if (sd->npc_id != 0 - || sd->opt1 != Opt1::ZERO - || sd->sc_data[StatusChange::SC_NOCHAT].timer != -1) //会話禁止 + || sd->opt1 != Opt1::ZERO) //会話禁止 return; if (fitem == NULL || fitem->bl.m != sd->bl.m) @@ -4538,11 +4481,10 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) return; } if (sd->npc_id != 0 - || sd->opt1 != Opt1::ZERO - || sd->sc_data[StatusChange::SC_NOCHAT].timer != -1) //会話禁止 + || sd->opt1 != Opt1::ZERO) //会話禁止 return; - if (sd->invincible_timer != -1) + if (sd->invincible_timer) pc_delinvincibletimer(sd); pc_useitem(sd, RFIFOW(fd, 2) - 2); @@ -4606,10 +4548,10 @@ void clif_parse_UnequipItem(int fd, struct map_session_data *sd) return; } index = RFIFOW(fd, 2) - 2; - if (sd->status.inventory[index].broken == 1 && sd->sc_data[StatusChange::SC_BROKNWEAPON].timer != -1) - skill_status_change_end(&sd->bl, StatusChange::SC_BROKNWEAPON, -1); - if (sd->status.inventory[index].broken == 1 && sd->sc_data[StatusChange::SC_BROKNARMOR].timer != -1) - skill_status_change_end(&sd->bl, StatusChange::SC_BROKNARMOR, -1); + if (sd->status.inventory[index].broken == 1 && sd->sc_data[StatusChange::SC_BROKNWEAPON].timer) + skill_status_change_end(&sd->bl, StatusChange::SC_BROKNWEAPON, nullptr); + if (sd->status.inventory[index].broken == 1 && sd->sc_data[StatusChange::SC_BROKNARMOR].timer) + skill_status_change_end(&sd->bl, StatusChange::SC_BROKNARMOR, nullptr); if (sd->npc_id != 0 || sd->opt1 != Opt1::ZERO) @@ -4661,7 +4603,7 @@ void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd) WFIFOW(fd, 0) = 0xca; WFIFOB(fd, 2) = fail; - WFIFOSET(fd, packet_len_table[0xca]); + WFIFOSET(fd, clif_parse_func_table[0xca].len); } /*========================================== @@ -4679,7 +4621,7 @@ void clif_parse_NpcSellListSend(int fd, struct map_session_data *sd) WFIFOW(fd, 0) = 0xcb; WFIFOB(fd, 2) = fail; - WFIFOSET(fd, packet_len_table[0xcb]); + WFIFOSET(fd, clif_parse_func_table[0xcb].len); } /*========================================== @@ -5028,8 +4970,7 @@ void clif_parse_PartyMessage(int fd, struct map_session_data *sd) return; } - if (is_atcommand(fd, sd, message, 0) - || (sd->sc_data[StatusChange::SC_NOCHAT].timer != -1)) //チャット禁止 + if (is_atcommand(fd, sd, message, 0)) //チャット禁止 { free(buf); return; @@ -5060,12 +5001,12 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { sd->ignoreAll = 1; WFIFOB(fd, 3) = 0; // success - WFIFOSET(fd, packet_len_table[0x0d2]); + WFIFOSET(fd, clif_parse_func_table[0x0d2].len); } else { WFIFOB(fd, 3) = 1; // fail - WFIFOSET(fd, packet_len_table[0x0d2]); + WFIFOSET(fd, clif_parse_func_table[0x0d2].len); clif_wis_message(fd, wisp_server_name, "You already block everyone.", strlen("You already block everyone.") + 1); @@ -5079,12 +5020,12 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { sd->ignoreAll = 0; WFIFOB(fd, 3) = 0; // success - WFIFOSET(fd, packet_len_table[0x0d2]); + WFIFOSET(fd, clif_parse_func_table[0x0d2].len); } else { WFIFOB(fd, 3) = 1; // fail - WFIFOSET(fd, packet_len_table[0x0d2]); + WFIFOSET(fd, clif_parse_func_table[0x0d2].len); clif_wis_message(fd, wisp_server_name, "You already allow everyone.", strlen("You already allow everyone.") + 1); @@ -5094,580 +5035,566 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) return; } -// functions list. Rate is how many milliseconds are required between -// calls. Packets exceeding this rate will be dropped. flood_rates in -// map.h must be the same length as this table. rate 0 is default -// rate -1 is unlimited - -// TODO: merge this with the packet length table, and put the pointer last -typedef struct func_table -{ - void(*func)(int fd, struct map_session_data *sd); - int rate; -} func_table; -// *INDENT-OFF* -static -func_table clif_parse_func_table[0x220] = -{ - { NULL, 0 }, // 0 - { NULL, 0 }, // 1 - { NULL, 0 }, // 2 - { NULL, 0 }, // 3 - { NULL, 0 }, // 4 - { NULL, 0 }, // 5 - { NULL, 0 }, // 6 - { NULL, 0 }, // 7 - { NULL, 0 }, // 8 - { NULL, 0 }, // 9 - { NULL, 0 }, // a - { NULL, 0 }, // b - { NULL, 0 }, // c - { NULL, 0 }, // d - { NULL, 0 }, // e - { NULL, 0 }, // f - { NULL, 0 }, // 10 - { NULL, 0 }, // 11 - { NULL, 0 }, // 12 - { NULL, 0 }, // 13 - { NULL, 0 }, // 14 - { NULL, 0 }, // 15 - { NULL, 0 }, // 16 - { NULL, 0 }, // 17 - { NULL, 0 }, // 18 - { NULL, 0 }, // 19 - { NULL, 0 }, // 1a - { NULL, 0 }, // 1b - { NULL, 0 }, // 1c - { NULL, 0 }, // 1d - { NULL, 0 }, // 1e - { NULL, 0 }, // 1f - { NULL, 0 }, // 20 - { NULL, 0 }, // 21 - { NULL, 0 }, // 22 - { NULL, 0 }, // 23 - { NULL, 0 }, // 24 - { NULL, 0 }, // 25 - { NULL, 0 }, // 26 - { NULL, 0 }, // 27 - { NULL, 0 }, // 28 - { NULL, 0 }, // 29 - { NULL, 0 }, // 2a - { NULL, 0 }, // 2b - { NULL, 0 }, // 2c - { NULL, 0 }, // 2d - { NULL, 0 }, // 2e - { NULL, 0 }, // 2f - { NULL, 0 }, // 30 - { NULL, 0 }, // 31 - { NULL, 0 }, // 32 - { NULL, 0 }, // 33 - { NULL, 0 }, // 34 - { NULL, 0 }, // 35 - { NULL, 0 }, // 36 - { NULL, 0 }, // 37 - { NULL, 0 }, // 38 - { NULL, 0 }, // 39 - { NULL, 0 }, // 3a - { NULL, 0 }, // 3b - { NULL, 0 }, // 3c - { NULL, 0 }, // 3d - { NULL, 0 }, // 3e - { NULL, 0 }, // 3f - { NULL, 0 }, // 40 - { NULL, 0 }, // 41 - { NULL, 0 }, // 42 - { NULL, 0 }, // 43 - { NULL, 0 }, // 44 - { NULL, 0 }, // 45 - { NULL, 0 }, // 46 - { NULL, 0 }, // 47 - { NULL, 0 }, // 48 - { NULL, 0 }, // 49 - { NULL, 0 }, // 4a - { NULL, 0 }, // 4b - { NULL, 0 }, // 4c - { NULL, 0 }, // 4d - { NULL, 0 }, // 4e - { NULL, 0 }, // 4f - { NULL, 0 }, // 50 - { NULL, 0 }, // 51 - { NULL, 0 }, // 52 - { NULL, 0 }, // 53 - { NULL, 0 }, // 54 - { NULL, 0 }, // 55 - { NULL, 0 }, // 56 - { NULL, 0 }, // 57 - { NULL, 0 }, // 58 - { NULL, 0 }, // 59 - { NULL, 0 }, // 5a - { NULL, 0 }, // 5b - { NULL, 0 }, // 5c - { NULL, 0 }, // 5d - { NULL, 0 }, // 5e - { NULL, 0 }, // 5f - { NULL, 0 }, // 60 - { NULL, 0 }, // 61 - { NULL, 0 }, // 62 - { NULL, 0 }, // 63 - { NULL, 0 }, // 64 - { NULL, 0 }, // 65 - { NULL, 0 }, // 66 - { NULL, 0 }, // 67 - { NULL, 0 }, // 68 - { NULL, 0 }, // 69 - { NULL, 0 }, // 6a - { NULL, 0 }, // 6b - { NULL, 0 }, // 6c - { NULL, 0 }, // 6d - { NULL, 0 }, // 6e - { NULL, 0 }, // 6f - { NULL, 0 }, // 70 - { NULL, 0 }, // 71 - { clif_parse_WantToConnection, 0 }, // 72 - { NULL, 0 }, // 73 - { NULL, 0 }, // 74 - { NULL, 0 }, // 75 - { NULL, 0 }, // 76 - { NULL, 0 }, // 77 - { NULL, 0 }, // 78 - { NULL, 0 }, // 79 - { NULL, 0 }, // 7a - { NULL, 0 }, // 7b - { NULL, 0 }, // 7c - { clif_parse_LoadEndAck, -1 }, // 7d - { clif_parse_TickSend, 0 }, // 7e - { NULL, 0 }, // 7f - { NULL, 0 }, // 80 - { NULL, 0 }, // 81 - { NULL, 0 }, // 82 - { NULL, 0 }, // 83 - { NULL, 0 }, // 84 - { clif_parse_WalkToXY, -1 }, // 85 Walk code limits this on it's own - { NULL, 0 }, // 86 - { NULL, 0 }, // 87 - { NULL, 0 }, // 88 - { clif_parse_ActionRequest, 1000 }, // 89 Special case - see below - { NULL, 0 }, // 8a - { NULL, 0 }, // 8b - { clif_parse_GlobalMessage, 300 }, // 8c - { NULL, 0 }, // 8d - { NULL, 0 }, // 8e - { NULL, 0 }, // 8f - { clif_parse_NpcClicked, 500 }, // 90 - { NULL, 0 }, // 91 - { NULL, 0 }, // 92 - { NULL, 0 }, // 93 - { clif_parse_GetCharNameRequest, -1 }, // 94 - { NULL, 0 }, // 95 - { clif_parse_Wis, 300 }, // 96 - { NULL, 0 }, // 97 - { NULL, 0 }, // 98 - { NULL, 300 }, // 99 - { NULL, 0 }, // 9a - { clif_parse_ChangeDir, -1 }, // 9b - { NULL, 0 }, // 9c - { NULL, 0 }, // 9d - { NULL, 0 }, // 9e - { clif_parse_TakeItem, 400 }, // 9f - { NULL, 0 }, // a0 - { NULL, 0 }, // a1 - { clif_parse_DropItem, 50 }, // a2 - { NULL, 0 }, // a3 - { NULL, 0 }, // a4 - { NULL, 0 }, // a5 - { NULL, 0 }, // a6 - { clif_parse_UseItem, 0 }, // a7 - { NULL, 0 }, // a8 - { clif_parse_EquipItem, -1 }, // a9 Special case - outfit window (not implemented yet - needs to allow bursts) - { NULL, 0 }, // aa - { clif_parse_UnequipItem, -1 }, // ab Special case - outfit window (not implemented yet - needs to allow bursts) - { NULL, 0 }, // ac - { NULL, 0 }, // ad - { NULL, 0 }, // ae - { NULL, 0 }, // af - { NULL, 0 }, // b0 - { NULL, 0 }, // b1 - { clif_parse_Restart, 0 }, // b2 - { NULL, 0 }, // b3 - { NULL, 0 }, // b4 - { NULL, 0 }, // b5 - { NULL, 0 }, // b6 - { NULL, 0 }, // b7 - { clif_parse_NpcSelectMenu, 0 }, // b8 - { clif_parse_NpcNextClicked, -1 }, // b9 - { NULL, 0 }, // ba - { clif_parse_StatusUp, -1 }, // bb People click this very quickly - { NULL, 0 }, // bc - { NULL, 0 }, // bd - { NULL, 0 }, // be - { clif_parse_Emotion, 1000 }, // bf - { NULL, 0 }, // c0 - { clif_parse_HowManyConnections, 0 }, // c1 - { NULL, 0 }, // c2 - { NULL, 0 }, // c3 - { NULL, 0 }, // c4 - { clif_parse_NpcBuySellSelected, 0 }, // c5 - { NULL, 0 }, // c6 - { NULL, 0 }, // c7 - { clif_parse_NpcBuyListSend, -1 }, // c8 - { clif_parse_NpcSellListSend, -1 }, // c9 Selling multiple 1-slot items - { NULL, 0 }, // ca - { NULL, 0 }, // cb - { NULL, 0 }, // cc - { NULL, 0 }, // cd - { NULL, 0 }, // ce - { NULL, 0 }, // cf - { clif_parse_PMIgnoreAll, 0 }, // d0 - { NULL, 0 }, // d1 - { NULL, 0 }, // d2 - { NULL, 0 }, // d3 - { NULL, 0 }, // d4 - { NULL, 0 }, // d5 - { NULL, 0 }, // d6 - { NULL, 0 }, // d7 - { NULL, 0 }, // d8 - { NULL, 0 }, // d9 - { NULL, 0 }, // da - { NULL, 0 }, // db - { NULL, 0 }, // dc - { NULL, 0 }, // dd - { NULL, 0 }, // de - { NULL, 0 }, // df - { NULL, 0 }, // e0 - { NULL, 0 }, // e1 - { NULL, 0 }, // e2 - { NULL, 0 }, // e3 - { clif_parse_TradeRequest, 2000 }, // e4 - { NULL, 0 }, // e5 - { clif_parse_TradeAck, 0 }, // e6 - { NULL, 0 }, // e7 - { clif_parse_TradeAddItem, 0 }, // e8 - { NULL, 0 }, // e9 - { NULL, 0 }, // ea - { clif_parse_TradeOk, 0 }, // eb - { NULL, 0 }, // ec - { clif_parse_TradeCansel, 0 }, // ed - { NULL, 0 }, // ee - { clif_parse_TradeCommit, 0 }, // ef - { NULL, 0 }, // f0 - { NULL, 0 }, // f1 - { NULL, 0 }, // f2 - { clif_parse_MoveToKafra, -1 }, // f3 - { NULL, 0 }, // f4 - { clif_parse_MoveFromKafra, -1 }, // f5 - { NULL, 0 }, // f6 - { clif_parse_CloseKafra, 0 }, // f7 - { NULL, 0 }, // f8 - { clif_parse_CreateParty, 2000 }, // f9 - { NULL, 0 }, // fa - { NULL, 0 }, // fb - { clif_parse_PartyInvite, 2000 }, // fc - { NULL, 0 }, // fd - { NULL, 0 }, // fe - { clif_parse_ReplyPartyInvite, 0 }, // ff - { clif_parse_LeaveParty, 0 }, // 100 - { NULL, 0 }, // 101 - { clif_parse_PartyChangeOption, 0 }, // 102 - { clif_parse_RemovePartyMember, 0 }, // 103 - { NULL, 0 }, // 104 - { NULL, 0 }, // 105 - { NULL, 0 }, // 106 - { NULL, 0 }, // 107 - { clif_parse_PartyMessage, 300 }, // 108 - { NULL, 0 }, // 109 - { NULL, 0 }, // 10a - { NULL, 0 }, // 10b - { NULL, 0 }, // 10c - { NULL, 0 }, // 10d - { NULL, 0 }, // 10e - { NULL, 0 }, // 10f - { NULL, 0 }, // 110 - { NULL, 0 }, // 111 - { clif_parse_SkillUp, -1 }, // 112 - { NULL, 0 }, // 113 - { NULL, 0 }, // 114 - { NULL, 0 }, // 115 - { NULL, 0 }, // 116 - { NULL, 0 }, // 117 - { clif_parse_StopAttack, 0 }, // 118 - { NULL, 0 }, // 119 - { NULL, 0 }, // 11a - { NULL, 0 }, // 11b - { NULL, 0 }, // 11c - { NULL, 0 }, // 11d - { NULL, 0 }, // 11e - { NULL, 0 }, // 11f - { NULL, 0 }, // 120 - { NULL, 0 }, // 121 - { NULL, 0 }, // 122 - { NULL, 0 }, // 123 - { NULL, 0 }, // 124 - { NULL, 0 }, // 125 - { NULL, 0 }, // 126 - { NULL, 0 }, // 127 - { NULL, 0 }, // 128 - { NULL, 0 }, // 129 - { NULL, 0 }, // 12a - { NULL, 0 }, // 12b - { NULL, 0 }, // 12c - { NULL, 0 }, // 12d - { NULL, 0 }, // 12e - { NULL, 0 }, // 12f - { NULL, 0 }, // 130 - { NULL, 0 }, // 131 - { NULL, 0 }, // 132 - { NULL, 0 }, // 133 - { NULL, 0 }, // 134 - { NULL, 0 }, // 135 - { NULL, 0 }, // 136 - { NULL, 0 }, // 137 - { NULL, 0 }, // 138 - { NULL, 0 }, // 139 - { NULL, 0 }, // 13a - { NULL, 0 }, // 13b - { NULL, 0 }, // 13c - { NULL, 0 }, // 13d - { NULL, 0 }, // 13e - { NULL, 0 }, // 13f - { NULL, 0 }, // 140 - { NULL, 0 }, // 141 - { NULL, 0 }, // 142 - { clif_parse_NpcAmountInput, 300 }, // 143 - { NULL, 0 }, // 144 - { NULL, 0 }, // 145 - { clif_parse_NpcCloseClicked, 300 }, // 146 - { NULL, 0 }, // 147 - { NULL, 0 }, // 148 - { NULL, 0 }, // 149 - { NULL, 0 }, // 14a - { NULL, 0 }, // 14b - { NULL, 0 }, // 14c - { NULL, 0 }, // 14d - { NULL, 0 }, // 14e - { NULL, 0 }, // 14f - { NULL, 0 }, // 150 - { NULL, 0 }, // 151 - { NULL, 0 }, // 152 - { NULL, 0 }, // 153 - { NULL, 0 }, // 154 - { NULL, 0 }, // 155 - { NULL, 0 }, // 156 - { NULL, 0 }, // 157 - { NULL, 0 }, // 158 - { NULL, 0 }, // 159 - { NULL, 0 }, // 15a - { NULL, 0 }, // 15b - { NULL, 0 }, // 15c - { NULL, 0 }, // 15d - { NULL, 0 }, // 15e - { NULL, 0 }, // 15f - { NULL, 0 }, // 160 - { NULL, 0 }, // 161 - { NULL, 0 }, // 162 - { NULL, 0 }, // 163 - { NULL, 0 }, // 164 - { NULL, 0 }, // 165 - { NULL, 0 }, // 166 - { NULL, 0 }, // 167 - { NULL, 0 }, // 168 - { NULL, 0 }, // 169 - { NULL, 0 }, // 16a - { NULL, 0 }, // 16b - { NULL, 0 }, // 16c - { NULL, 0 }, // 16d - { NULL, 0 }, // 16e - { NULL, 0 }, // 16f - { NULL, 0 }, // 170 - { NULL, 0 }, // 171 - { NULL, 0 }, // 172 - { NULL, 0 }, // 173 - { NULL, 0 }, // 174 - { NULL, 0 }, // 175 - { NULL, 0 }, // 176 - { NULL, 0 }, // 177 - { NULL, 0 }, // 178 - { NULL, 0 }, // 179 - { NULL, 0 }, // 17a - { NULL, 0 }, // 17b - { NULL, 0 }, // 17c - { NULL, 0 }, // 17d - { NULL, 0 }, // 17e - { NULL, 0 }, // 17f - { NULL, 0 }, // 180 - { NULL, 0 }, // 181 - { NULL, 0 }, // 182 - { NULL, 0 }, // 183 - { NULL, 0 }, // 184 - { NULL, 0 }, // 185 - { NULL, 0 }, // 186 - { NULL, 0 }, // 187 - { NULL, 0 }, // 188 - { NULL, 0 }, // 189 - { clif_parse_QuitGame, 0 }, // 18a - { NULL, 0 }, // 18b - { NULL, 0 }, // 18c - { NULL, 0 }, // 18d - { NULL, 0 }, // 18e - { NULL, 0 }, // 18f - { NULL, 0 }, // 190 - { NULL, 0 }, // 191 - { NULL, 0 }, // 192 - { NULL, 0 }, // 193 - { NULL, 0 }, // 194 - { NULL, 0 }, // 195 - { NULL, 0 }, // 196 - { NULL, 0 }, // 197 - { NULL, 0 }, // 198 - { NULL, 0 }, // 199 - { NULL, 0 }, // 19a - { NULL, 0 }, // 19b - { NULL, 0 }, // 19c - { NULL, 300 }, // 19d - { NULL, 0 }, // 19e - { NULL, 0 }, // 19f - { NULL, 0 }, // 1a0 - { NULL, 0 }, // 1a1 - { NULL, 0 }, // 1a2 - { NULL, 0 }, // 1a3 - { NULL, 0 }, // 1a4 - { NULL, 0 }, // 1a5 - { NULL, 0 }, // 1a6 - { NULL, 0 }, // 1a7 - { NULL, 0 }, // 1a8 - { NULL, 0 }, // 1a9 - { NULL, 0 }, // 1aa - { NULL, 0 }, // 1ab - { NULL, 0 }, // 1ac - { NULL, 0 }, // 1ad - { NULL, 0 }, // 1ae - { NULL, 0 }, // 1af - { NULL, 0 }, // 1b0 - { NULL, 0 }, // 1b1 - { NULL, 0 }, // 1b2 - { NULL, 0 }, // 1b3 - { NULL, 0 }, // 1b4 - { NULL, 0 }, // 1b5 - { NULL, 0 }, // 1b6 - { NULL, 0 }, // 1b7 - { NULL, 0 }, // 1b8 - { NULL, 0 }, // 1b9 - { NULL, 0 }, // 1ba - { NULL, 0 }, // 1bb - { NULL, 0 }, // 1bc - { NULL, 0 }, // 1bd - { NULL, 0 }, // 1be - { NULL, 0 }, // 1bf - { NULL, 0 }, // 1c0 - { NULL, 0 }, // 1c1 - { NULL, 0 }, // 1c2 - { NULL, 0 }, // 1c3 - { NULL, 0 }, // 1c4 - { NULL, 0 }, // 1c5 - { NULL, 0 }, // 1c6 - { NULL, 0 }, // 1c7 - { NULL, 0 }, // 1c8 - { NULL, 0 }, // 1c9 - { NULL, 0 }, // 1ca - { NULL, 0 }, // 1cb - { NULL, 0 }, // 1cc - { NULL, 0 }, // 1cd - { NULL, 0 }, // 1ce - { NULL, 0 }, // 1cf - { NULL, 0 }, // 1d0 - { NULL, 0 }, // 1d1 - { NULL, 0 }, // 1d2 - { NULL, 0 }, // 1d3 - { NULL, 0 }, // 1d4 - { clif_parse_NpcStringInput, 300 }, // 1d5 - { NULL, 0 }, // 1d6 - { NULL, 0 }, // 1d7 - { NULL, 0 }, // 1d8 - { NULL, 0 }, // 1d9 - { NULL, 0 }, // 1da - { NULL, 0 }, // 1db - { NULL, 0 }, // 1dc - { NULL, 0 }, // 1dd - { NULL, 0 }, // 1de - { NULL, 0 }, // 1df - { NULL, 0 }, // 1e0 - { NULL, 0 }, // 1e1 - { NULL, 0 }, // 1e2 - { NULL, 0 }, // 1e3 - { NULL, 0 }, // 1e4 - { NULL, 0 }, // 1e5 - { NULL, 0 }, // 1e6 - { NULL, 0 }, // 1e7 - { NULL, 0 }, // 1e8 - { NULL, 0 }, // 1e9 - { NULL, 0 }, // 1ea - { NULL, 0 }, // 1eb - { NULL, 0 }, // 1ec - { NULL, 0 }, // 1ed - { NULL, 0 }, // 1ee - { NULL, 0 }, // 1ef - { NULL, 0 }, // 1f0 - { NULL, 0 }, // 1f1 - { NULL, 0 }, // 1f2 - { NULL, 0 }, // 1f3 - { NULL, 0 }, // 1f4 - { NULL, 0 }, // 1f5 - { NULL, 0 }, // 1f6 - { NULL, 0 }, // 1f7 - { NULL, 0 }, // 1f8 - { NULL, 0 }, // 1f9 - { NULL, 0 }, // 1fa - { NULL, 0 }, // 1fb - { NULL, 0 }, // 1fc - { NULL, 0 }, // 1fd - { NULL, 0 }, // 1fe - { NULL, 0 }, // 1ff - { NULL, 0 }, // 200 - { NULL, 0 }, // 201 - { NULL, 0 }, // 202 - { NULL, 0 }, // 203 - { NULL, 0 }, // 204 - { NULL, 0 }, // 205 - { NULL, 0 }, // 206 - { NULL, 0 }, // 207 - { NULL, 0 }, // 208 - { NULL, 0 }, // 209 - { NULL, 0 }, // 20a - { NULL, 0 }, // 20b - { NULL, 0 }, // 20c - { NULL, 0 }, // 20d - { NULL, 0 }, // 20e - { NULL, 0 }, // 20f - { NULL, 0 }, // 210 - { NULL, 0 }, // 211 - { NULL, 0 }, // 212 - { NULL, 0 }, // 213 - { NULL, 0 }, // 214 - { NULL, 0 }, // 215 - { NULL, 0 }, // 216 - { NULL, 0 }, // 217 - { NULL, 0 }, // 218 - { NULL, 0 }, // 219 - { NULL, 0 }, // 21a - { NULL, 0 }, // 21b - { NULL, 0 }, // 21c - { NULL, 0 }, // 21d - { NULL, 0 }, // 21e - { NULL, 0 }, // 21f +func_table clif_parse_func_table[0x0220] = +{ + {0, 10, NULL, }, // 0x0000 + {0, 0, NULL, }, // 0x0001 + {0, 0, NULL, }, // 0x0002 + {0, 0, NULL, }, // 0x0003 + {0, 0, NULL, }, // 0x0004 + {0, 0, NULL, }, // 0x0005 + {0, 0, NULL, }, // 0x0006 + {0, 0, NULL, }, // 0x0007 + {0, 0, NULL, }, // 0x0008 + {0, 0, NULL, }, // 0x0009 + {0, 0, NULL, }, // 0x000a + {0, 0, NULL, }, // 0x000b + {0, 0, NULL, }, // 0x000c + {0, 0, NULL, }, // 0x000d + {0, 0, NULL, }, // 0x000e + {0, 0, NULL, }, // 0x000f + {0, 0, NULL, }, // 0x0010 + {0, 0, NULL, }, // 0x0011 + {0, 0, NULL, }, // 0x0012 + {0, 0, NULL, }, // 0x0013 + {0, 0, NULL, }, // 0x0014 + {0, 0, NULL, }, // 0x0015 + {0, 0, NULL, }, // 0x0016 + {0, 0, NULL, }, // 0x0017 + {0, 0, NULL, }, // 0x0018 + {0, 0, NULL, }, // 0x0019 + {0, 0, NULL, }, // 0x001a + {0, 0, NULL, }, // 0x001b + {0, 0, NULL, }, // 0x001c + {0, 0, NULL, }, // 0x001d + {0, 0, NULL, }, // 0x001e + {0, 0, NULL, }, // 0x001f + {0, 0, NULL, }, // 0x0020 + {0, 0, NULL, }, // 0x0021 + {0, 0, NULL, }, // 0x0022 + {0, 0, NULL, }, // 0x0023 + {0, 0, NULL, }, // 0x0024 + {0, 0, NULL, }, // 0x0025 + {0, 0, NULL, }, // 0x0026 + {0, 0, NULL, }, // 0x0027 + {0, 0, NULL, }, // 0x0028 + {0, 0, NULL, }, // 0x0029 + {0, 0, NULL, }, // 0x002a + {0, 0, NULL, }, // 0x002b + {0, 0, NULL, }, // 0x002c + {0, 0, NULL, }, // 0x002d + {0, 0, NULL, }, // 0x002e + {0, 0, NULL, }, // 0x002f + {0, 0, NULL, }, // 0x0030 + {0, 0, NULL, }, // 0x0031 + {0, 0, NULL, }, // 0x0032 + {0, 0, NULL, }, // 0x0033 + {0, 0, NULL, }, // 0x0034 + {0, 0, NULL, }, // 0x0035 + {0, 0, NULL, }, // 0x0036 + {0, 0, NULL, }, // 0x0037 + {0, 0, NULL, }, // 0x0038 + {0, 0, NULL, }, // 0x0039 + {0, 0, NULL, }, // 0x003a + {0, 0, NULL, }, // 0x003b + {0, 0, NULL, }, // 0x003c + {0, 0, NULL, }, // 0x003d + {0, 0, NULL, }, // 0x003e + {0, 0, NULL, }, // 0x003f + {0, 0, NULL, }, // 0x0040 + {0, 0, NULL, }, // 0x0041 + {0, 0, NULL, }, // 0x0042 + {0, 0, NULL, }, // 0x0043 + {0, 0, NULL, }, // 0x0044 + {0, 0, NULL, }, // 0x0045 + {0, 0, NULL, }, // 0x0046 + {0, 0, NULL, }, // 0x0047 + {0, 0, NULL, }, // 0x0048 + {0, 0, NULL, }, // 0x0049 + {0, 0, NULL, }, // 0x004a + {0, 0, NULL, }, // 0x004b + {0, 0, NULL, }, // 0x004c + {0, 0, NULL, }, // 0x004d + {0, 0, NULL, }, // 0x004e + {0, 0, NULL, }, // 0x004f + {0, 0, NULL, }, // 0x0050 + {0, 0, NULL, }, // 0x0051 + {0, 0, NULL, }, // 0x0052 + {0, 0, NULL, }, // 0x0053 + {0, 0, NULL, }, // 0x0054 + {0, 0, NULL, }, // 0x0055 + {0, 0, NULL, }, // 0x0056 + {0, 0, NULL, }, // 0x0057 + {0, 0, NULL, }, // 0x0058 + {0, 0, NULL, }, // 0x0059 + {0, 0, NULL, }, // 0x005a + {0, 0, NULL, }, // 0x005b + {0, 0, NULL, }, // 0x005c + {0, 0, NULL, }, // 0x005d + {0, 0, NULL, }, // 0x005e + {0, 0, NULL, }, // 0x005f + {0, 0, NULL, }, // 0x0060 + {0, 0, NULL, }, // 0x0061 + {0, 0, NULL, }, // 0x0062 + {0, VAR,NULL, }, // 0x0063 + {0, 55, NULL, }, // 0x0064 + {0, 17, NULL, }, // 0x0065 + {0, 3, NULL, }, // 0x0066 + {0, 37, NULL, }, // 0x0067 + {0, 46, NULL, }, // 0x0068 + {0, VAR,NULL, }, // 0x0069 + {0, 23, NULL, }, // 0x006a + {0, VAR,NULL, }, // 0x006b + {0, 3, NULL, }, // 0x006c + {0, 108,NULL, }, // 0x006d + {0, 3, NULL, }, // 0x006e + {0, 2, NULL, }, // 0x006f + {0, 3, NULL, }, // 0x0070 + {0, 28, NULL, }, // 0x0071 + {0, 19, clif_parse_WantToConnection, }, // 0x0072 + {0, 11, NULL, }, // 0x0073 + {0, 3, NULL, }, // 0x0074 + {0, VAR,NULL, }, // 0x0075 + {0, 9, NULL, }, // 0x0076 + {0, 5, NULL, }, // 0x0077 + {0, 54, NULL, }, // 0x0078 + {0, 53, NULL, }, // 0x0079 + {0, 58, NULL, }, // 0x007a + {0, 60, NULL, }, // 0x007b + {0, 41, NULL, }, // 0x007c + {-1, 2, clif_parse_LoadEndAck, }, // 0x007d + {0, 6, clif_parse_TickSend, }, // 0x007e + {0, 6, NULL, }, // 0x007f + {0, 7, NULL, }, // 0x0080 + {0, 3, NULL, }, // 0x0081 + {0, 2, NULL, }, // 0x0082 + {0, 2, NULL, }, // 0x0083 + {0, 2, NULL, }, // 0x0084 + {-1, 5, clif_parse_WalkToXY, }, // 0x0085 Walk code limits this on it's own + {0, 16, NULL, }, // 0x0086 + {0, 12, NULL, }, // 0x0087 + {0, 10, NULL, }, // 0x0088 + {1000, 7, clif_parse_ActionRequest, }, // 0x0089 Special case - see below + {0, 29, NULL, }, // 0x008a + {0, 23, NULL, }, // 0x008b unknown... size 2 or 23? + {300, VAR,clif_parse_GlobalMessage, }, // 0x008c + {0, VAR,NULL, }, // 0x008d + {0, VAR,NULL, }, // 0x008e + {0, 0, NULL, }, // 0x008f + {500, 7, clif_parse_NpcClicked, }, // 0x0090 + {0, 22, NULL, }, // 0x0091 + {0, 28, NULL, }, // 0x0092 + {0, 2, NULL, }, // 0x0093 + {-1, 6, clif_parse_GetCharNameRequest, }, // 0x0094 + {0, 30, NULL, }, // 0x0095 + {300, VAR,clif_parse_Wis, }, // 0x0096 + {0, VAR,NULL, }, // 0x0097 + {0, 3, NULL, }, // 0x0098 + {300, VAR,NULL, }, // 0x0099 + {0, VAR,NULL, }, // 0x009a + {-1, 5, clif_parse_ChangeDir, }, // 0x009b + {0, 9, NULL, }, // 0x009c + {0, 17, NULL, }, // 0x009d + {0, 17, NULL, }, // 0x009e + {400, 6, clif_parse_TakeItem, }, // 0x009f + {0, 23, NULL, }, // 0x00a0 + {0, 6, NULL, }, // 0x00a1 + {50, 6, clif_parse_DropItem, }, // 0x00a2 + {0, VAR,NULL, }, // 0x00a3 + {0, VAR,NULL, }, // 0x00a4 + {0, VAR,NULL, }, // 0x00a5 + {0, VAR,NULL, }, // 0x00a6 + {0, 8, clif_parse_UseItem, }, // 0x00a7 + {0, 7, NULL, }, // 0x00a8 + {-1, 6, clif_parse_EquipItem, }, // 0x00a9 Special case - outfit window (not implemented yet - needs to allow bursts) + {0, 7, NULL, }, // 0x00aa + {-1, 4, clif_parse_UnequipItem, }, // 0x00ab Special case - outfit window (not implemented yet - needs to allow bursts) + {0, 7, NULL, }, // 0x00ac + {0, 0, NULL, }, // 0x00ad + {0, VAR,NULL, }, // 0x00ae + {0, 6, NULL, }, // 0x00af + {0, 8, NULL, }, // 0x00b0 + {0, 8, NULL, }, // 0x00b1 + {0, 3, clif_parse_Restart, }, // 0x00b2 + {0, 3, NULL, }, // 0x00b3 + {0, VAR,NULL, }, // 0x00b4 + {0, 6, NULL, }, // 0x00b5 + {0, 6, NULL, }, // 0x00b6 + {0, VAR,NULL, }, // 0x00b7 + {0, 7, clif_parse_NpcSelectMenu, }, // 0x00b8 + {-1, 6, clif_parse_NpcNextClicked, }, // 0x00b9 + {0, 2, NULL, }, // 0x00ba + {-1, 5, clif_parse_StatusUp, }, // 0x00bb People click this very quickly + {0, 6, NULL, }, // 0x00bc + {0, 44, NULL, }, // 0x00bd + {0, 5, NULL, }, // 0x00be + {1000, 3, clif_parse_Emotion, }, // 0x00bf + {0, 7, NULL, }, // 0x00c0 + {0, 2, clif_parse_HowManyConnections, }, // 0x00c1 + {0, 6, NULL, }, // 0x00c2 + {0, 8, NULL, }, // 0x00c3 + {0, 6, NULL, }, // 0x00c4 + {0, 7, clif_parse_NpcBuySellSelected, }, // 0x00c5 + {0, VAR,NULL, }, // 0x00c6 + {0, VAR,NULL, }, // 0x00c7 + {-1, VAR,clif_parse_NpcBuyListSend, }, // 0x00c8 + {-1, VAR,clif_parse_NpcSellListSend, }, // 0x00c9 Selling multiple 1-slot items + {0, 3, NULL, }, // 0x00ca + {0, 3, NULL, }, // 0x00cb + {0, 6, NULL, }, // 0x00cc + {0, 6, NULL, }, // 0x00cd + {0, 2, NULL, }, // 0x00ce + {0, 27, NULL, }, // 0x00cf + {0, 3, clif_parse_PMIgnoreAll, }, // 0x00d0 + {0, 4, NULL, }, // 0x00d1 + {0, 4, NULL, }, // 0x00d2 + {0, 2, NULL, }, // 0x00d3 + {0, VAR,NULL, }, // 0x00d4 + {0, VAR,NULL, }, // 0x00d5 + {0, 3, NULL, }, // 0x00d6 + {0, VAR,NULL, }, // 0x00d7 + {0, 6, NULL, }, // 0x00d8 + {0, 14, NULL, }, // 0x00d9 + {0, 3, NULL, }, // 0x00da + {0, VAR,NULL, }, // 0x00db + {0, 28, NULL, }, // 0x00dc + {0, 29, NULL, }, // 0x00dd + {0, VAR,NULL, }, // 0x00de + {0, VAR,NULL, }, // 0x00df + {0, 30, NULL, }, // 0x00e0 + {0, 30, NULL, }, // 0x00e1 + {0, 26, NULL, }, // 0x00e2 + {0, 2, NULL, }, // 0x00e3 + {2000, 6, clif_parse_TradeRequest, }, // 0x00e4 + {0, 26, NULL, }, // 0x00e5 + {0, 3, clif_parse_TradeAck, }, // 0x00e6 + {0, 3, NULL, }, // 0x00e7 + {0, 8, clif_parse_TradeAddItem, }, // 0x00e8 + {0, 19, NULL, }, // 0x00e9 + {0, 5, NULL, }, // 0x00ea + {0, 2, clif_parse_TradeOk, }, // 0x00eb + {0, 3, NULL, }, // 0x00ec + {0, 2, clif_parse_TradeCansel, }, // 0x00ed + {0, 2, NULL, }, // 0x00ee + {0, 2, clif_parse_TradeCommit, }, // 0x00ef + {0, 3, NULL, }, // 0x00f0 + {0, 2, NULL, }, // 0x00f1 + {0, 6, NULL, }, // 0x00f2 + {-1, 8, clif_parse_MoveToKafra, }, // 0x00f3 + {0, 21, NULL, }, // 0x00f4 + {-1, 8, clif_parse_MoveFromKafra, }, // 0x00f5 + {0, 8, NULL, }, // 0x00f6 + {0, 2, clif_parse_CloseKafra, }, // 0x00f7 + {0, 2, NULL, }, // 0x00f8 + {2000, 26, clif_parse_CreateParty, }, // 0x00f9 + {0, 3, NULL, }, // 0x00fa + {0, VAR,NULL, }, // 0x00fb + {2000, 6, clif_parse_PartyInvite, }, // 0x00fc + {0, 27, NULL, }, // 0x00fd + {0, 30, NULL, }, // 0x00fe + {0, 10, clif_parse_ReplyPartyInvite, }, // 0x00ff + {0, 2, clif_parse_LeaveParty, }, // 0x0100 + {0, 6, NULL, }, // 0x0101 + {0, 6, clif_parse_PartyChangeOption, }, // 0x0102 + {0, 30, clif_parse_RemovePartyMember, }, // 0x0103 + {0, 79, NULL, }, // 0x0104 + {0, 31, NULL, }, // 0x0105 + {0, 10, NULL, }, // 0x0106 + {0, 10, NULL, }, // 0x0107 + {300, VAR,clif_parse_PartyMessage, }, // 0x0108 + {0, VAR,NULL, }, // 0x0109 + {0, 4, NULL, }, // 0x010a + {0, 6, NULL, }, // 0x010b + {0, 6, NULL, }, // 0x010c + {0, 2, NULL, }, // 0x010d + {0, 11, NULL, }, // 0x010e + {0, VAR,NULL, }, // 0x010f + {0, 10, NULL, }, // 0x0110 + {0, 39, NULL, }, // 0x0111 + {-1, 4, clif_parse_SkillUp, }, // 0x0112 + {0, 10, NULL, }, // 0x0113 + {0, 31, NULL, }, // 0x0114 + {0, 35, NULL, }, // 0x0115 + {0, 10, NULL, }, // 0x0116 + {0, 18, NULL, }, // 0x0117 + {0, 2, clif_parse_StopAttack, }, // 0x0118 + {0, 13, NULL, }, // 0x0119 + {0, 15, NULL, }, // 0x011a + {0, 20, NULL, }, // 0x011b + {0, 68, NULL, }, // 0x011c + {0, 2, NULL, }, // 0x011d + {0, 3, NULL, }, // 0x011e + {0, 16, NULL, }, // 0x011f + {0, 6, NULL, }, // 0x0120 + {0, 14, NULL, }, // 0x0121 + {0, VAR,NULL, }, // 0x0122 + {0, VAR,NULL, }, // 0x0123 + {0, 21, NULL, }, // 0x0124 + {0, 8, NULL, }, // 0x0125 + {0, 8, NULL, }, // 0x0126 + {0, 8, NULL, }, // 0x0127 + {0, 8, NULL, }, // 0x0128 + {0, 8, NULL, }, // 0x0129 + {0, 2, NULL, }, // 0x012a + {0, 2, NULL, }, // 0x012b + {0, 3, NULL, }, // 0x012c + {0, 4, NULL, }, // 0x012d + {0, 2, NULL, }, // 0x012e + {0, VAR,NULL, }, // 0x012f + {0, 6, NULL, }, // 0x0130 + {0, 86, NULL, }, // 0x0131 + {0, 6, NULL, }, // 0x0132 + {0, VAR,NULL, }, // 0x0133 + {0, VAR,NULL, }, // 0x0134 + {0, 7, NULL, }, // 0x0135 + {0, VAR,NULL, }, // 0x0136 + {0, 6, NULL, }, // 0x0137 + {0, 3, NULL, }, // 0x0138 + {0, 16, NULL, }, // 0x0139 + {0, 4, NULL, }, // 0x013a + {0, 4, NULL, }, // 0x013b + {0, 4, NULL, }, // 0x013c + {0, 6, NULL, }, // 0x013d + {0, 24, NULL, }, // 0x013e + {0, 26, NULL, }, // 0x013f + {0, 22, NULL, }, // 0x0140 + {0, 14, NULL, }, // 0x0141 + {0, 6, NULL, }, // 0x0142 + {300, 10, clif_parse_NpcAmountInput, }, // 0x0143 + {0, 23, NULL, }, // 0x0144 + {0, 19, NULL, }, // 0x0145 + {300, 6, clif_parse_NpcCloseClicked, }, // 0x0146 + {0, 39, NULL, }, // 0x0147 + {0, 8, NULL, }, // 0x0148 + {0, 9, NULL, }, // 0x0149 + {0, 6, NULL, }, // 0x014a + {0, 27, NULL, }, // 0x014b + {0, VAR,NULL, }, // 0x014c + {0, 2, NULL, }, // 0x014d + {0, 6, NULL, }, // 0x014e + {0, 6, NULL, }, // 0x014f + {0, 110,NULL, }, // 0x0150 + {0, 6, NULL, }, // 0x0151 + {0, VAR,NULL, }, // 0x0152 + {0, VAR,NULL, }, // 0x0153 + {0, VAR,NULL, }, // 0x0154 + {0, VAR,NULL, }, // 0x0155 + {0, VAR,NULL, }, // 0x0156 + {0, 6, NULL, }, // 0x0157 + {0, VAR,NULL, }, // 0x0158 + {0, 54, NULL, }, // 0x0159 + {0, 66, NULL, }, // 0x015a + {0, 54, NULL, }, // 0x015b + {0, 90, NULL, }, // 0x015c + {0, 42, NULL, }, // 0x015d + {0, 6, NULL, }, // 0x015e + {0, 42, NULL, }, // 0x015f + {0, VAR,NULL, }, // 0x0160 + {0, VAR,NULL, }, // 0x0161 + {0, VAR,NULL, }, // 0x0162 + {0, VAR,NULL, }, // 0x0163 + {0, VAR,NULL, }, // 0x0164 + {0, 30, NULL, }, // 0x0165 + {0, VAR,NULL, }, // 0x0166 + {0, 3, NULL, }, // 0x0167 + {0, 14, NULL, }, // 0x0168 + {0, 3, NULL, }, // 0x0169 + {0, 30, NULL, }, // 0x016a + {0, 10, NULL, }, // 0x016b + {0, 43, NULL, }, // 0x016c + {0, 14, NULL, }, // 0x016d + {0, 186,NULL, }, // 0x016e + {0, 182,NULL, }, // 0x016f + {0, 14, NULL, }, // 0x0170 + {0, 30, NULL, }, // 0x0171 + {0, 10, NULL, }, // 0x0172 + {0, 3, NULL, }, // 0x0173 + {0, VAR,NULL, }, // 0x0174 + {0, 6, NULL, }, // 0x0175 + {0, 106,NULL, }, // 0x0176 + {0, VAR,NULL, }, // 0x0177 + {0, 4, NULL, }, // 0x0178 + {0, 5, NULL, }, // 0x0179 + {0, 4, NULL, }, // 0x017a + {0, VAR,NULL, }, // 0x017b + {0, 6, NULL, }, // 0x017c + {0, 7, NULL, }, // 0x017d + {0, VAR,NULL, }, // 0x017e + {0, VAR,NULL, }, // 0x017f + {0, 6, NULL, }, // 0x0180 + {0, 3, NULL, }, // 0x0181 + {0, 106,NULL, }, // 0x0182 + {0, 10, NULL, }, // 0x0183 + {0, 10, NULL, }, // 0x0184 + {0, 34, NULL, }, // 0x0185 + {0, 0, NULL, }, // 0x0186 + {0, 6, NULL, }, // 0x0187 + {0, 8, NULL, }, // 0x0188 + {0, 4, NULL, }, // 0x0189 + {0, 4, clif_parse_QuitGame, }, // 0x018a + {0, 4, NULL, }, // 0x018b + {0, 29, NULL, }, // 0x018c + {0, VAR,NULL, }, // 0x018d + {0, 10, NULL, }, // 0x018e + {0, 6, NULL, }, // 0x018f + {0, 90, NULL, }, // 0x0190 + {0, 86, NULL, }, // 0x0191 + {0, 24, NULL, }, // 0x0192 + {0, 6, NULL, }, // 0x0193 + {0, 30, NULL, }, // 0x0194 + {0, 102,NULL, }, // 0x0195 + {0, 9, NULL, }, // 0x0196 + {0, 4, NULL, }, // 0x0197 + {0, 8, NULL, }, // 0x0198 + {0, 4, NULL, }, // 0x0199 + {0, 14, NULL, }, // 0x019a + {0, 10, NULL, }, // 0x019b + {0, VAR,NULL, }, // 0x019c + {300, 6, NULL, }, // 0x019d + {0, 2, NULL, }, // 0x019e + {0, 6, NULL, }, // 0x019f + {0, 3, NULL, }, // 0x01a0 + {0, 3, NULL, }, // 0x01a1 + {0, 35, NULL, }, // 0x01a2 + {0, 5, NULL, }, // 0x01a3 + {0, 11, NULL, }, // 0x01a4 + {0, 26, NULL, }, // 0x01a5 + {0, VAR,NULL, }, // 0x01a6 + {0, 4, NULL, }, // 0x01a7 + {0, 4, NULL, }, // 0x01a8 + {0, 6, NULL, }, // 0x01a9 + {0, 10, NULL, }, // 0x01aa + {0, 12, NULL, }, // 0x01ab + {0, 6, NULL, }, // 0x01ac + {0, VAR,NULL, }, // 0x01ad + {0, 4, NULL, }, // 0x01ae + {0, 4, NULL, }, // 0x01af + {0, 11, NULL, }, // 0x01b0 + {0, 7, NULL, }, // 0x01b1 + {0, VAR,NULL, }, // 0x01b2 + {0, 67, NULL, }, // 0x01b3 + {0, 12, NULL, }, // 0x01b4 + {0, 18, NULL, }, // 0x01b5 + {0, 114,NULL, }, // 0x01b6 + {0, 6, NULL, }, // 0x01b7 + {0, 3, NULL, }, // 0x01b8 + {0, 6, NULL, }, // 0x01b9 + {0, 26, NULL, }, // 0x01ba + {0, 26, NULL, }, // 0x01bb + {0, 26, NULL, }, // 0x01bc + {0, 26, NULL, }, // 0x01bd + {0, 2, NULL, }, // 0x01be + {0, 3, NULL, }, // 0x01bf + {0, 2, NULL, }, // 0x01c0 + {0, 14, NULL, }, // 0x01c1 + {0, 10, NULL, }, // 0x01c2 + {0, VAR,NULL, }, // 0x01c3 + {0, 22, NULL, }, // 0x01c4 + {0, 22, NULL, }, // 0x01c5 + {0, 4, NULL, }, // 0x01c6 + {0, 2, NULL, }, // 0x01c7 + {0, 13, NULL, }, // 0x01c8 + {0, 97, NULL, }, // 0x01c9 + {0, 0, NULL, }, // 0x01ca + {0, 9, NULL, }, // 0x01cb + {0, 9, NULL, }, // 0x01cc + {0, 30, NULL, }, // 0x01cd + {0, 6, NULL, }, // 0x01ce + {0, 28, NULL, }, // 0x01cf + {0, 8, NULL, }, // 0x01d0 + {0, 14, NULL, }, // 0x01d1 + {0, 10, NULL, }, // 0x01d2 + {0, 35, NULL, }, // 0x01d3 + {0, 6, NULL, }, // 0x01d4 + {300, VAR,clif_parse_NpcStringInput, }, // 0x01d5 - set to -1 + {0, 4, NULL, }, // 0x01d6 + {0, 11, NULL, }, // 0x01d7 + {0, 54, NULL, }, // 0x01d8 + {0, 53, NULL, }, // 0x01d9 + {0, 60, NULL, }, // 0x01da + {0, 2, NULL, }, // 0x01db + {0, VAR,NULL, }, // 0x01dc + {0, 47, NULL, }, // 0x01dd + {0, 33, NULL, }, // 0x01de + {0, 6, NULL, }, // 0x01df + {0, 30, NULL, }, // 0x01e0 + {0, 8, NULL, }, // 0x01e1 + {0, 34, NULL, }, // 0x01e2 + {0, 14, NULL, }, // 0x01e3 + {0, 2, NULL, }, // 0x01e4 + {0, 6, NULL, }, // 0x01e5 + {0, 26, NULL, }, // 0x01e6 + {0, 2, NULL, }, // 0x01e7 + {0, 28, NULL, }, // 0x01e8 + {0, 81, NULL, }, // 0x01e9 + {0, 6, NULL, }, // 0x01ea + {0, 10, NULL, }, // 0x01eb + {0, 26, NULL, }, // 0x01ec + {0, 2, NULL, }, // 0x01ed + {0, VAR,NULL, }, // 0x01ee + {0, VAR,NULL, }, // 0x01ef + {0, VAR,NULL, }, // 0x01f0 + {0, VAR,NULL, }, // 0x01f1 + {0, 20, NULL, }, // 0x01f2 + {0, 10, NULL, }, // 0x01f3 + {0, 32, NULL, }, // 0x01f4 + {0, 9, NULL, }, // 0x01f5 + {0, 34, NULL, }, // 0x01f6 + {0, 14, NULL, }, // 0x01f7 + {0, 2, NULL, }, // 0x01f8 + {0, 6, NULL, }, // 0x01f9 + {0, 48, NULL, }, // 0x01fa + {0, 56, NULL, }, // 0x01fb + {0, VAR,NULL, }, // 0x01fc + {0, 4, NULL, }, // 0x01fd + {0, 5, NULL, }, // 0x01fe + {0, 10, NULL, }, // 0x01ff + {0, 26, NULL, }, // 0x0200 + {0, VAR,NULL, }, // 0x0201 + {0, 26, NULL, }, // 0x0202 + {0, 10, NULL, }, // 0x0203 + {0, 18, NULL, }, // 0x0204 + {0, 26, NULL, }, // 0x0205 + {0, 11, NULL, }, // 0x0206 + {0, 34, NULL, }, // 0x0207 + {0, 14, NULL, }, // 0x0208 + {0, 36, NULL, }, // 0x0209 + {0, 10, NULL, }, // 0x020a + {0, 19, NULL, }, // 0x020b + {0, 10, NULL, }, // 0x020c + {0, VAR,NULL, }, // 0x020d + {0, 24, NULL, }, // 0x020e + {0, 0, NULL, }, // 0x020f + {0, 0, NULL, }, // 0x0210 + {0, 0, NULL, }, // 0x0211 + {0, 0, NULL, }, // 0x0212 + {0, 0, NULL, }, // 0x0213 + {0, 0, NULL, }, // 0x0214 + {0, 0, NULL, }, // 0x0215 + {0, 0, NULL, }, // 0x0216 + {0, 0, NULL, }, // 0x0217 + {0, 0, NULL, }, // 0x0218 + {0, 0, NULL, }, // 0x0219 + {0, 0, NULL, }, // 0x021a + {0, 0, NULL, }, // 0x021b + {0, 0, NULL, }, // 0x021c + {0, 0, NULL, }, // 0x021d + {0, 0, NULL, }, // 0x021e + {0, 0, NULL, }, // 0x021f }; -// *INDENT-ON* // Checks for packet flooding static int clif_check_packet_flood(int fd, int cmd) { struct map_session_data *sd = (struct map_session_data *)session[fd]->session_data; - unsigned int rate, tick = gettick(); + tick_t tick = gettick(); // sd will not be set if the client hasn't requested // WantToConnection yet. Do not apply flood logic to GMs // as approved bots (GMlvl1) should not have to work around // flood logic. - if (!sd || pc_isGM(sd) || clif_parse_func_table[cmd].rate == -1) + if (!sd || pc_isGM(sd) || clif_parse_func_table[cmd].rate == static_cast(-1)) return 0; // Timer has wrapped @@ -5678,17 +5605,18 @@ int clif_check_packet_flood(int fd, int cmd) } // Default rate is 100ms - if ((rate = clif_parse_func_table[cmd].rate) == 0) - rate = 100; + interval_t rate = clif_parse_func_table[cmd].rate; + if (rate == interval_t::zero()) + rate = std::chrono::milliseconds(100); // ActionRequest - attacks are allowed a faster rate than sit/stand if (cmd == 0x89) { int action_type = RFIFOB(fd, 6); if (action_type == 0x00 || action_type == 0x07) - rate = 20; + rate = std::chrono::milliseconds(20); else - rate = 1000; + rate = std::chrono::seconds(1); } // Restore this code when mana1.0 is released @@ -5944,8 +5872,8 @@ void clif_parse(int fd) return; // パケット長を計算 - packet_len = packet_len_table[cmd]; - if (packet_len == -1) + packet_len = clif_parse_func_table[cmd].len; + if (packet_len == VAR) { if (RFIFOREST(fd) < 4) { -- cgit v1.2.3-70-g09d2