From dff7e258eb1e4eefc5d455212a912fe454b7d3d3 Mon Sep 17 00:00:00 2001 From: Asheraf Date: Sat, 26 May 2018 23:42:02 +0000 Subject: add support for send target in unittalk --- src/map/atcommand.c | 8 ++++---- src/map/clif.c | 14 +++++++++----- src/map/clif.h | 2 +- src/map/script.c | 24 +++++++++++++++++++----- src/map/skill.c | 2 +- 5 files changed, 34 insertions(+), 16 deletions(-) (limited to 'src/map') diff --git a/src/map/atcommand.c b/src/map/atcommand.c index ae0c776c6..a9b8fb7b0 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6228,7 +6228,7 @@ ACMD(npctalk) snprintf(temp, sizeof(temp), "%s : %s", name, mes); if(ifcolor) clif->messagecolor(&nd->bl,color,temp); - else clif->disp_overhead(&nd->bl, temp); + else clif->disp_overhead(&nd->bl, temp, AREA_CHAT_WOC, NULL); return true; } @@ -6288,7 +6288,7 @@ ACMD(pettalk) } snprintf(temp, sizeof temp ,"%s : %s", pd->pet.name, mes); - clif->disp_overhead(&pd->bl, temp); + clif->disp_overhead(&pd->bl, temp, AREA_CHAT_WOC, NULL); return true; } @@ -7063,7 +7063,7 @@ ACMD(homtalk) } snprintf(temp, sizeof temp ,"%s : %s", sd->hd->homunculus.name, mes); - clif->disp_overhead(&sd->hd->bl, temp); + clif->disp_overhead(&sd->hd->bl, temp, AREA_CHAT_WOC, NULL); return true; } @@ -7423,7 +7423,7 @@ ACMD(me) } safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,270), sd->status.name, tempmes); // *%s %s* - clif->disp_overhead(&sd->bl, atcmd_output); + clif->disp_overhead(&sd->bl, atcmd_output, AREA_CHAT_WOC, NULL); return true; } diff --git a/src/map/clif.c b/src/map/clif.c index 654c43b53..18fb063ef 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8965,7 +8965,7 @@ void clif_slide(struct block_list *bl, int x, int y) /// Public chat message (ZC_NOTIFY_CHAT). lordalfa/Skotlex - used by @me as well /// 008d .W .L .?B -void clif_disp_overhead(struct block_list *bl, const char *mes) +void clif_disp_overhead(struct block_list *bl, const char *mes, enum send_target target, struct block_list *target_bl) { char buf[CHAT_SIZE_MAX + (int)sizeof(struct PACKET_ZC_NOTIFY_CHAT)]; uint32 max_len = CHAT_SIZE_MAX - (int)sizeof(struct PACKET_ZC_NOTIFY_CHAT); @@ -8986,11 +8986,15 @@ void clif_disp_overhead(struct block_list *bl, const char *mes) p->PacketLength = mes_len + (int)sizeof(struct PACKET_ZC_NOTIFY_CHAT); // len of message + 8 (command+len+id) p->GID = bl->id; safestrncpy(p->Message, mes, mes_len); - clif->send(p, p->PacketLength, bl, AREA_CHAT_WOC); + if (target == SELF && target_bl != NULL) { + clif->send(p, p->PacketLength, target_bl, SELF); + } else { + clif->send(p, p->PacketLength, bl, AREA_CHAT_WOC); - // send back message to the speaker - if (bl->type == BL_PC) - clif->notify_playerchat(bl, mes); + // send back message to the speaker + if (bl->type == BL_PC) + clif->notify_playerchat(bl, mes); + } } void clif_notify_playerchat(struct block_list *bl, const char *mes) diff --git a/src/map/clif.h b/src/map/clif.h index 6c07998d5..1dffc2711 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -939,7 +939,7 @@ struct clif_interface { void (*broadcast2) (struct block_list *bl, const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, enum send_target target); void (*messagecolor_self) (int fd, uint32 color, const char *msg); void (*messagecolor) (struct block_list* bl, uint32 color, const char* msg); - void (*disp_overhead) (struct block_list *bl, const char* mes); + void (*disp_overhead) (struct block_list *bl, const char *mes, enum send_target target, struct block_list *target_bl); void (*notify_playerchat) (struct block_list *bl, const char *mes); void (*msgtable) (struct map_session_data* sd, enum clif_messages msg_id); void (*msgtable_num) (struct map_session_data *sd, enum clif_messages msg_id, int value); diff --git a/src/map/script.c b/src/map/script.c index 94a991d06..e1d26e731 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -15594,7 +15594,7 @@ BUILDIN(npctalk) } else { safesnprintf(message, sizeof(message), "%s", str); } - clif->disp_overhead(&nd->bl, message); + clif->disp_overhead(&nd->bl, message, AREA_CHAT_WOC, NULL); } return true; @@ -20117,12 +20117,13 @@ BUILDIN(unitstop) { /// Makes the unit say the message /// -/// unittalk(,""{, show_name}); +/// unittalk(,""{, show_name{, {, }}}); BUILDIN(unittalk) { int unit_id; const char* message; - struct block_list* bl; + struct block_list *bl, *target_bl = NULL; bool show_name = true; + enum send_target target = AREA_CHAT_WOC; unit_id = script_getnum(st,2); message = script_getstr(st, 3); @@ -20131,6 +20132,14 @@ BUILDIN(unittalk) { show_name = (script_getnum(st, 4) != 0) ? true : false; } + if (script_hasdata(st, 5)) { + target = script_getnum(st, 5); + } + + if (script_hasdata(st, 6)) { + target_bl = map->id2bl(script_getnum(st, 6)); + } + bl = map->id2bl(unit_id); if( bl != NULL ) { struct StringBuf sbuf; @@ -20144,7 +20153,12 @@ BUILDIN(unittalk) { } else { StrBuf->Printf(&sbuf, "%s", message); } - clif->disp_overhead(bl, StrBuf->Value(&sbuf)); + + if (bl->type == BL_PC && target == SELF && (target_bl == NULL || bl == target_bl)) { + clif->notify_playerchat(bl, StrBuf->Value(&sbuf)); + } else { + clif->disp_overhead(bl, StrBuf->Value(&sbuf), target, target_bl); + } StrBuf->Destroy(&sbuf); } @@ -24789,7 +24803,7 @@ void script_parse_builtin(void) { BUILDIN_DEF(unitwarp,"isii"), BUILDIN_DEF(unitattack,"iv?"), BUILDIN_DEF(unitstop,"i"), - BUILDIN_DEF(unittalk,"is?"), + BUILDIN_DEF(unittalk,"is???"), BUILDIN_DEF(unitemote,"ii"), BUILDIN_DEF(unitskilluseid,"ivi?"), // originally by Qamera [Celest] BUILDIN_DEF(unitskillusepos,"iviii"), // [Celest] diff --git a/src/map/skill.c b/src/map/skill.c index 34c36d7f3..f437ce66c 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7168,7 +7168,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin //NOTE: mobs don't have the sprite animation that is used when performing this skill (will cause glitches) char temp[70]; snprintf(temp, sizeof(temp), "%s : %s !!", md->name, skill->get_desc(skill_id)); - clif->disp_overhead(&md->bl,temp); + clif->disp_overhead(&md->bl, temp, AREA_CHAT_WOC, NULL); } break; -- cgit v1.2.3-60-g2f50