summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/atcommand.c18
-rw-r--r--src/map/intif.c37
-rw-r--r--src/map/intif.h3
-rw-r--r--src/map/npc_chat.c2
4 files changed, 58 insertions, 2 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 691cf2560..cad37b28f 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -8452,6 +8452,23 @@ ACMD_FUNC(new_mount) {
return 0;
}
+ACMD_FUNC(accinfo) {
+ char query[NAME_LENGTH];
+
+ if (!message || !*message || strlen(message) > NAME_LENGTH ) {
+ clif_displaymessage(fd, "(usage: @accinfo/@accountinfo <account_id/char name>).");
+ clif_displaymessage(fd, "You may search partial name by making use of '%' in the search, \"@accinfo %Mario%\" lists all characters whose name contain \"Mario\"");
+ return -1;
+ }
+
+ //remove const type
+ safestrncpy(query, message, NAME_LENGTH);
+
+ intif_request_accinfo( sd->fd, sd->bl.id, sd->group_id, query );
+
+ return 0;
+}
+
/**
* Fills the reference of available commands in atcommand DBMap
**/
@@ -8695,6 +8712,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(delitem),
ACMD_DEF(charcommands),
ACMD_DEF(font),
+ ACMD_DEF(accinfo),
/**
* For Testing Purposes, not going to be here after we're done.
**/
diff --git a/src/map/intif.c b/src/map/intif.c
index ce0ad8e6a..c88d4a579 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -34,7 +34,7 @@
static const int packet_len_table[]={
- -1,-1,27,-1, -1, 0,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3800-0x380f
+ -1,-1,27,-1, -1, 0,37, 522, 0, 0, 0, 0, 0, 0, 0, 0, //0x3800-0x380f
0, 0, 0, 0, 0, 0, 0, 0, -1,11, 0, 0, 0, 0, 0, 0, //0x3810
39,-1,15,15, 14,19, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0, //0x3820
10,-1,15, 0, 79,19, 7,-1, 0,-1,-1,-1, 14,67,186,-1, //0x3830
@@ -2077,6 +2077,40 @@ int intif_parse_elemental_saved(int fd)
return 0;
}
+void intif_request_accinfo( int u_fd, int aid, int group_id, char* query ) {
+
+
+ WFIFOHEAD(inter_fd,2 + 4 + 4 + 4 + NAME_LENGTH);
+
+ WFIFOW(inter_fd,0) = 0x3007;
+ WFIFOL(inter_fd,2) = u_fd;
+ WFIFOL(inter_fd,6) = aid;
+ WFIFOL(inter_fd,10) = group_id;
+ safestrncpy(WFIFOP(inter_fd,14), query, NAME_LENGTH);
+
+ WFIFOSET(inter_fd,2 + 4 + 4 + 4 + NAME_LENGTH);
+
+ return;
+}
+
+void intif_parse_MessageToFD(int fd) {
+ int u_fd = RFIFOL(fd,2);
+
+ if( session[u_fd] && session[u_fd]->session_data ) {
+ int aid = RFIFOL(fd,6);
+ struct map_session_data * sd = session[u_fd]->session_data;
+ /* matching e.g. previous fd owner didn't dc during request or is still the same */
+ if( sd->bl.id == aid ) {
+ char msg[512];
+ safestrncpy(msg, (char*)RFIFOP(fd,10), 512);
+ clif_displaymessage(u_fd,msg);
+ }
+
+ }
+
+ return;
+}
+
//-----------------------------------------------------------------
// inter serverからの通信
// エラーがあれば0(false)を返すこと
@@ -2115,6 +2149,7 @@ int intif_parse(int fd)
case 0x3803: mapif_parse_WisToGM(fd); break;
case 0x3804: intif_parse_Registers(fd); break;
case 0x3806: intif_parse_ChangeNameOk(fd); break;
+ case 0x3807: intif_parse_MessageToFD(fd); break;
case 0x3818: intif_parse_LoadGuildStorage(fd); break;
case 0x3819: intif_parse_SaveGuildStorage(fd); break;
case 0x3820: intif_parse_PartyCreated(fd); break;
diff --git a/src/map/intif.h b/src/map/intif.h
index c5f6cb158..081667545 100644
--- a/src/map/intif.h
+++ b/src/map/intif.h
@@ -104,6 +104,9 @@ int intif_elemental_request(int ele_id, int char_id);
int intif_elemental_delete(int ele_id);
int intif_elemental_save(struct s_elemental *ele);
+/* @accinfo */
+void intif_request_accinfo( int u_fd, int aid, int group_id, char* query );
+
int CheckForCharServer(void);
#endif /* _INTIF_H_ */
diff --git a/src/map/npc_chat.c b/src/map/npc_chat.c
index 77c875a7e..39a3a8584 100644
--- a/src/map/npc_chat.c
+++ b/src/map/npc_chat.c
@@ -14,7 +14,7 @@
#include "pc.h" // struct map_session_data
#include "script.h" // set_var()
-#include <pcre.h>
+#include "../../3rdparty/pcre/include/pcre.h"
#include <stdio.h>
#include <stdlib.h>