diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-11-21 11:21:53 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-11-21 11:22:28 +0300 |
commit | a2db08ca3b8fa2392ef5d88d66303b64d6a41ec4 (patch) | |
tree | 6d5cf6cc954fae3dc3c66f0f775dfd63f3e7dd79 /src/map | |
parent | b69fb47e606ff06ada9b530ae46a76abbb374fe6 (diff) | |
download | evol-hercules-a2db08ca3b8fa2392ef5d88d66303b64d6a41ec4.tar.gz evol-hercules-a2db08ca3b8fa2392ef5d88d66303b64d6a41ec4.tar.bz2 evol-hercules-a2db08ca3b8fa2392ef5d88d66303b64d6a41ec4.tar.xz evol-hercules-a2db08ca3b8fa2392ef5d88d66303b64d6a41ec4.zip |
map: translate also npc names.
Also disable strict aliasing warnings in plugin.
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/clif.c | 43 | ||||
-rw-r--r-- | src/map/clif.h | 1 | ||||
-rw-r--r-- | src/map/init.c | 1 |
3 files changed, 43 insertions, 2 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index ed83b52..66a7312 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -10,10 +10,13 @@ #include "../../../common/mmo.h" #include "../../../common/socket.h" #include "../../../common/strlib.h" +#include "../../../common/cbasetypes.h" +#include "../../../map/npc.h" #include "../../../map/pc.h" #include "../../../map/quest.h" #include "map/clif.h" +#include "map/lang.h" void eclif_quest_send_list(struct map_session_data *sd) { @@ -44,8 +47,6 @@ void eclif_quest_add(struct map_session_data *sd, struct quest *qd) { hookStop(); int fd = sd->fd; - int i; - struct mob_db *monster; struct quest_db *qi = quest->db(qd->quest_id); WFIFOHEAD(fd, packet_len(0x2b3)); @@ -58,3 +59,41 @@ void eclif_quest_add(struct map_session_data *sd, struct quest *qd) WFIFOSET(fd, 107); } + +void eclif_charnameack(int *fdPtr, struct block_list *bl) +{ + if (!bl) + { + hookStop(); + return; + } + if (bl->type == BL_NPC) + { + hookStop(); + int fd = *fdPtr; + struct map_session_data* sd = (struct map_session_data*)session[fd]->session_data; + const char *tr = lang_pctrans(((TBL_NPC*)bl)->name, sd); + const int len = 8 + strlen(tr) + 1; + // if no recipient specified just update nearby clients + if (fd == 0) + { + char *buf; + CREATE(buf, char, len); + WBUFW(buf, 0) = 0xB01; + WBUFW(buf, 2) = len; + WBUFL(buf, 4) = bl->id; + memcpy(WBUFP(buf, 8), tr, len); + clif->send(buf, len, bl, AREA); + aFree(buf); + } + else + { + WFIFOHEAD(fd, len); + WFIFOW(fd, 0) = 0xB01; + WFIFOW(fd, 2) = len; + WFIFOL(fd, 4) = bl->id; + memcpy(WFIFOP(fd, 8), tr, len); + WFIFOSET(fd, len); + } + } +} diff --git a/src/map/clif.h b/src/map/clif.h index 6f11c5d..5ad3a7b 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -6,5 +6,6 @@ void eclif_quest_send_list(struct map_session_data *sd); void eclif_quest_add(struct map_session_data *sd, struct quest *qd); +void eclif_charnameack(int *fdPtr, struct block_list *bl); #endif // EVOL_MAP_CLIF diff --git a/src/map/init.c b/src/map/init.c index 502e5b3..4e945d7 100644 --- a/src/map/init.c +++ b/src/map/init.c @@ -87,6 +87,7 @@ HPExport void plugin_init (void) addHookPre("npc->checknear", enpc_checknear); addHookPre("clif->quest_send_list", eclif_quest_send_list); addHookPre("clif->quest_add", eclif_quest_add); + addHookPre("clif->charnameack", eclif_charnameack); langScriptId = script->add_str("Lang"); } |