diff options
-rw-r--r-- | src/map/atcommand.c | 8 | ||||
-rw-r--r-- | src/map/clif.c | 14 | ||||
-rw-r--r-- | src/map/clif.h | 6 |
3 files changed, 19 insertions, 9 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 37f50dc5e..15422a74a 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -242,16 +242,16 @@ ACMD(send) }\ } while(0) //define GET_VALUE - if (type > 0 && type < MAX_PACKET_DB) { + if (type >= MIN_PACKET_DB && type <= MAX_PACKET_DB) { int off = 2; if (len) { // show packet length - safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,904), type, packet_db[type].len); // Packet 0x%x length: %d + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,904), type, clif->packet(type)->len); // Packet 0x%x length: %d clif->message(fd, atcmd_output); return true; } - len=packet_db[type].len; + len = clif->packet(type)->len; if (len == 0) { // unknown packet - ERROR safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,905), type); // Unknown packet: 0x%x @@ -402,7 +402,7 @@ ACMD(send) SKIP_VALUE(message); } - if(packet_db[type].len == -1) {// send dynamic packet + if (clif->packet(type)->len == -1) { // send dynamic packet WFIFOW(sd->fd,2)=TOW(off); WFIFOSET(sd->fd,off); } else {// send static packet diff --git a/src/map/clif.c b/src/map/clif.c index 243aa6a43..59c8a7197 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -18680,6 +18680,19 @@ int clif_parse(int fd) { return 0; } +/** + * Returns information about the given packet ID. + * + * @param packet_id The packet ID. + * @return The corresponding packet_db entry, if any. + */ +const struct s_packet_db *clif_packet(int packet_id) +{ + if (packet_id < MIN_PACKET_DB || packet_id > MAX_PACKET_DB || packet_db[packet_id].len == 0) + return NULL; + return &packet_db[packet_id]; +} + static void __attribute__ ((unused)) packetdb_addpacket(short cmd, int len, ...) { va_list va; int i; @@ -18815,6 +18828,7 @@ void clif_defaults(void) { clif->parse = clif_parse; clif->parse_cmd = clif_parse_cmd_optional; clif->decrypt_cmd = clif_decrypt_cmd; + clif->packet = clif_packet; /* auth */ clif->authok = clif_authok; clif->authrefuse = clif_authrefuse; diff --git a/src/map/clif.h b/src/map/clif.h index f6f0d4fe7..40610b7c1 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -597,6 +597,7 @@ struct clif_interface { int (*send_sub) (struct block_list *bl, va_list ap); int (*send_actual) (int fd, void *buf, int len); int (*parse) (int fd); + const struct s_packet_db *(*packet) (int packet_id); unsigned short (*parse_cmd) ( int fd, struct map_session_data *sd ); unsigned short (*decrypt_cmd) ( int cmd, struct map_session_data *sd ); /* auth */ @@ -1323,11 +1324,6 @@ struct clif_interface { }; #ifdef HERCULES_CORE -/** - * Vars - **/ -extern struct s_packet_db packet_db[MAX_PACKET_DB + 1]; - void clif_defaults(void); #endif // HERCULES_CORE |