Cleaned up whisper code between map-servers (#2763)

Fixes #2760
Fixes #2762

Thanks to @LunarSHINING
This commit is contained in:
Lemongrass3110
2018-01-24 18:33:09 +01:00
committed by GitHub
parent c4a57c571c
commit 3a8c8a9da4
5 changed files with 77 additions and 67 deletions

View File

@@ -303,6 +303,8 @@ int intif_main_message(struct map_session_data* sd, const char* message)
*/
int intif_wis_message(struct map_session_data *sd, char *nick, char *mes, int mes_len)
{
int headersize = 8 + 2 * NAME_LENGTH;
nullpo_ret(sd);
if (CheckForCharServer())
return 0;
@@ -313,12 +315,13 @@ int intif_wis_message(struct map_session_data *sd, char *nick, char *mes, int me
return 0;
}
WFIFOHEAD(inter_fd,mes_len + 52);
WFIFOHEAD(inter_fd,mes_len + headersize);
WFIFOW(inter_fd,0) = 0x3001;
WFIFOW(inter_fd,2) = mes_len + 52;
memcpy(WFIFOP(inter_fd,4), sd->status.name, NAME_LENGTH);
memcpy(WFIFOP(inter_fd,4+NAME_LENGTH), nick, NAME_LENGTH);
memcpy(WFIFOP(inter_fd,4+2*NAME_LENGTH), mes, mes_len);
WFIFOW(inter_fd,2) = mes_len + headersize;
WFIFOL(inter_fd,4) = pc_get_group_level(sd);
safestrncpy(WFIFOCP(inter_fd,8), sd->status.name, NAME_LENGTH);
safestrncpy(WFIFOCP(inter_fd,8+NAME_LENGTH), nick, NAME_LENGTH);
safestrncpy(WFIFOCP(inter_fd,8+2*NAME_LENGTH), mes, mes_len);
WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
if (battle_config.etc_log)
@@ -333,7 +336,7 @@ int intif_wis_message(struct map_session_data *sd, char *nick, char *mes, int me
* @param flag : 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
* @return 0=no char-serv connected, 1=msg sent
*/
int intif_wis_replay(int id, int flag)
int intif_wis_reply(int id, int flag)
{
if (CheckForCharServer())
return 0;
@@ -344,7 +347,7 @@ int intif_wis_replay(int id, int flag)
WFIFOSET(inter_fd,7);
if (battle_config.etc_log)
ShowInfo("intif_wis_replay: id: %d, flag:%d\n", id, flag);
ShowInfo("intif_wis_reply: id: %d, flag:%d\n", id, flag);
return 1;
}
@@ -365,9 +368,9 @@ int intif_wis_message_to_gm(char *wisp_name, int permission, char *mes)
WFIFOHEAD(inter_fd, mes_len + 8 + NAME_LENGTH);
WFIFOW(inter_fd,0) = 0x3003;
WFIFOW(inter_fd,2) = mes_len + 32;
memcpy(WFIFOP(inter_fd,4), wisp_name, NAME_LENGTH);
safestrncpy(WFIFOCP(inter_fd,4), wisp_name, NAME_LENGTH);
WFIFOL(inter_fd,4+NAME_LENGTH) = permission;
memcpy(WFIFOP(inter_fd,8+NAME_LENGTH), mes, mes_len);
safestrncpy(WFIFOCP(inter_fd,8+NAME_LENGTH), mes, mes_len);
WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
if (battle_config.etc_log)
@@ -1245,22 +1248,23 @@ int intif_parse_WisMessage(int fd)
struct map_session_data* sd;
char *wisp_source;
char name[NAME_LENGTH];
int id, i;
int id, i, gmlvl;
id=RFIFOL(fd,4);
gmlvl=RFIFOL(fd,8);
safestrncpy(name, RFIFOCP(fd,32), NAME_LENGTH);
safestrncpy(name, RFIFOCP(fd,12+NAME_LENGTH), NAME_LENGTH);
sd = map_nick2sd(name,false);
if(sd == NULL || strcmp(sd->status.name, name) != 0)
{ //Not found
intif_wis_replay(id,1);
intif_wis_reply(id,1);
return 0;
}
if(sd->state.ignoreAll) {
intif_wis_replay(id, 2);
intif_wis_reply(id, 2);
return 0;
}
wisp_source = RFIFOCP(fd,8); // speed up [Yor]
wisp_source = RFIFOCP(fd,12); // speed up [Yor]
for(i=0; i < MAX_IGNORE_LIST &&
sd->ignore[i].name[0] != '\0' &&
strcmp(sd->ignore[i].name, wisp_source) != 0
@@ -1268,12 +1272,12 @@ int intif_parse_WisMessage(int fd)
if (i < MAX_IGNORE_LIST && sd->ignore[i].name[0] != '\0')
{ //Ignored
intif_wis_replay(id, 2);
intif_wis_reply(id, 2);
return 0;
}
//Success to send whisper.
clif_wis_message(sd->fd, wisp_source, RFIFOCP(fd,56),RFIFOW(fd,2)-56);
intif_wis_replay(id,0); // success
clif_wis_message(sd, wisp_source, RFIFOCP(fd,12+2*NAME_LENGTH),RFIFOW(fd,2)-12+2*NAME_LENGTH, gmlvl);
intif_wis_reply(id,0); // success
return 1;
}
@@ -1313,7 +1317,7 @@ static int mapif_parse_WisToGM_sub(struct map_session_data* sd,va_list va)
wisp_name = va_arg(va, char*);
message = va_arg(va, char*);
len = va_arg(va, int);
clif_wis_message(sd->fd, wisp_name, message, len);
clif_wis_message(sd, wisp_name, message, len,0);
return 1;
}
@@ -1334,8 +1338,8 @@ int mapif_parse_WisToGM(int fd)
mes_len = RFIFOW(fd,2) - 8+NAME_LENGTH;
message = (char *) aMalloc(mes_len+1);
permission = RFIFOL(fd,4+NAME_LENGTH);
safestrncpy(Wisp_name, RFIFOCP(fd,4), NAME_LENGTH);
permission = RFIFOL(fd, 4 + NAME_LENGTH);
safestrncpy(message, RFIFOCP(fd,8+NAME_LENGTH), mes_len+1);
// information is sent to all online GM
map_foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len);