summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-11-15 17:43:49 +0300
committerAndrei Karas <akaras@inbox.ru>2014-11-15 17:43:49 +0300
commit77db5d34b091c366750410281369ff4ce926b9b6 (patch)
tree3aaa39b3f2442fa42e248293b39e74e5fc40f23a
parentd8d87bbaf74bf6b013b5cdcd2e9602f1892bbd71 (diff)
downloadevol-hercules-77db5d34b091c366750410281369ff4ce926b9b6.tar.gz
evol-hercules-77db5d34b091c366750410281369ff4ce926b9b6.tar.bz2
evol-hercules-77db5d34b091c366750410281369ff4ce926b9b6.tar.xz
evol-hercules-77db5d34b091c366750410281369ff4ce926b9b6.zip
Impliment script function npctalk3.
-rw-r--r--src/map/init.c2
-rw-r--r--src/map/script.c43
-rw-r--r--src/map/script.h1
-rw-r--r--src/map/send.c22
-rw-r--r--src/map/send.h1
5 files changed, 68 insertions, 1 deletions
diff --git a/src/map/init.c b/src/map/init.c
index 09c0a10..b74a3b4 100644
--- a/src/map/init.c
+++ b/src/map/init.c
@@ -44,7 +44,7 @@ HPExport void plugin_init (void)
addScriptCommand("setcamnpc", "*", setCamNpc);
addScriptCommand("restorecam", "", restoreCam);
- addScriptCommand("npctalk3", "s", dummy);
+ addScriptCommand("npctalk3", "s", npcTalk3);
addScriptCommand("closedialog", "", dummy);
addScriptCommand("shop", "s", dummy);
addScriptCommand("getitemlink", "s", dummyStr);
diff --git a/src/map/script.c b/src/map/script.c
index fffaa70..54bf82c 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -85,3 +85,46 @@ BUILDIN(restoreCam)
send_npccommand(sd, st->oid, 3);
return 0;
}
+
+BUILDIN(npcTalk3)
+{
+ getSD();
+
+ char *str;
+ char *msg;
+ struct npc_data *nd = NULL;
+
+ if (script_hasdata(st, 3))
+ {
+ nd = npc->name2id (script_getstr(st, 2));
+ str = script_getstr(st, 3);
+ }
+ else
+ {
+ nd = (struct npc_data *) map->id2bl (st->oid);
+ str = script_getstr(st, 2);
+ }
+
+ if (!nd)
+ return 0;
+
+ msg = nd->name;
+// +++ after restore lang support need translate here
+/*
+ if (sd)
+ msg = (char*)lang_pctrans (nd->name, sd);
+ else
+ msg = nd->name;
+*/
+ if (strlen(str) + strlen(msg) > 450)
+ return 0;
+
+ if (nd)
+ {
+ char message[500];
+ strcpy (message, msg);
+ strcat (message, " : ");
+ strcat (message, str);
+ send_local_message (sd, &(nd->bl), message);
+ }
+}
diff --git a/src/map/script.h b/src/map/script.h
index 7bd1abe..9116aaa 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -10,5 +10,6 @@ BUILDIN(getLang);
BUILDIN(setLang);
BUILDIN(setCamNpc);
BUILDIN(restoreCam);
+BUILDIN(npcTalk3);
#endif // EVOL_MAP_SCRIPT
diff --git a/src/map/send.c b/src/map/send.c
index 9218a21..ccfb052 100644
--- a/src/map/send.c
+++ b/src/map/send.c
@@ -46,3 +46,25 @@ void send_npccommand2 (struct map_session_data *sd, int npcId, int cmd, int id,
WFIFOW (fd, 14) = y;
WFIFOSET (fd, 16);
}
+
+void send_local_message(int fd, struct block_list* bl, const char* msg)
+{
+ unsigned short msg_len = strlen(msg) + 1;
+ uint8 buf[256];
+ if (!bl)
+ return;
+
+ int len = sizeof(buf) - 8;
+ if (msg_len > len)
+ {
+ ShowWarning("clif_message: Truncating too long message '%s' (len=%u).\n", msg, msg_len);
+ msg_len = len;
+ }
+
+ WFIFOHEAD (fd, msg_len + 8);
+ WBUFW (fd, 0) = 0x8d;
+ WBUFW (fd, 2) = msg_len + 8;
+ WBUFL (fd, 4) = bl->id;
+ safestrncpy((char*)WBUFP(fd, 8), msg, msg_len);
+ WFIFOSET (fd, msg_len + 8);
+}
diff --git a/src/map/send.h b/src/map/send.h
index 6a324b9..d9c6daa 100644
--- a/src/map/send.h
+++ b/src/map/send.h
@@ -6,5 +6,6 @@
void send_npccommand (struct map_session_data *sd, int npcId, int cmd);
void send_npccommand2 (struct map_session_data *sd, int npcId, int cmd, int id, int x, int y);
+void send_local_message(int fd, struct block_list* bl, const char* msg);
#endif // EVOL_MAP_PC