X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fclient.qc;h=ee87e2ea286015561b4ae48d76b26e3f2dee47fd;hb=0dec7bcf5fa101452e59fe30b74daf24251d93e8;hp=0164444950cb09e1d5d7ab0989d9b9eba301cbe9;hpb=76dd66af43f0f01131d019c3a8dacfe35a6f6a18;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index 016444495..ee87e2ea2 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -2713,7 +2713,7 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc teamsay = false; } - if(game_stopped) + if (intermission_running) teamsay = false; if (!source) { @@ -2746,6 +2746,24 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc int privatemsgprefixlen = 0; if (msgin != "") { + bool found_me = false; + if(strstrofs(msgin, "/me", 0) >= 0) + { + string newmsgin = ""; + string newnamestr = ((teamsay) ? strcat(colorstr, "(", colorprefix, namestr, colorstr, ")", colorprefix) : strcat(colorprefix, namestr, colorprefix)); + FOREACH_WORD(msgin, true, + { + if(strdecolorize(it) == "/me") + { + found_me = true; + newmsgin = cons(newmsgin, newnamestr); + } + else + newmsgin = cons(newmsgin, it); + }); + msgin = newmsgin; + } + if(privatesay) { msgstr = strcat("\{1}\{13}* ", colorprefix, namestr, "^3 tells you: ^7"); @@ -2756,11 +2774,11 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc } else if(teamsay) { - if(strstrofs(msgin, "/me", 0) >= 0) + if(found_me) { //msgin = strreplace("/me", "", msgin); //msgin = substring(msgin, 3, strlen(msgin)); - msgin = strreplace("/me", strcat(colorstr, "(", colorprefix, namestr, colorstr, ")^7"), msgin); + //msgin = strreplace("/me", strcat(colorstr, "(", colorprefix, namestr, colorstr, ")^7"), msgin); msgstr = strcat("\{1}\{13}^4* ", "^7", msgin); } else @@ -2769,12 +2787,12 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc } else { - if(strstrofs(msgin, "/me", 0) >= 0) + if(found_me) { //msgin = strreplace("/me", "", msgin); //msgin = substring(msgin, 3, strlen(msgin)); - msgin = strreplace("/me", strcat(colorprefix, namestr), msgin); - msgstr = strcat("\{1}^4* ", "^7", msgin); + //msgin = strreplace("/me", strcat(colorprefix, namestr), msgin); + msgstr = strcat("\{1}^4* ^7", msgin); } else { msgstr = "\{1}"; @@ -2929,6 +2947,8 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc MUTATOR_CALLHOOK(ChatMessage, source, ret); ret = M_ARGV(1, int); + string event_log_msg = ""; + if(sourcemsgstr != "" && ret != 0) { if(ret < 0) // faked message, because the player is muted @@ -2955,6 +2975,8 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source && CS(it).active_minigame == CS(source).active_minigame && !MUTATOR_CALLHOOK(ChatMessageTo, it, source), { sprint(it, msgstr); }); + event_log_msg = sprintf(":chat_minigame:%d:%s:%s", source.playerid, CS(source).active_minigame.netname, msgin); + } else if(teamsay > 0) // team message, only sent to team mates { @@ -2967,6 +2989,7 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc if(cmsgstr != "") centerprint(it, cmsgstr); }); + event_log_msg = sprintf(":chat_team:%d:%d:%s", source.playerid, source.team, strreplace("\n", " ", msgin)); } else if(teamsay < 0) // spectator message, only sent to spectators { @@ -2975,6 +2998,7 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc FOREACH_CLIENT(!(IS_PLAYER(it) || it.caplayer) && IS_REAL_CLIENT(it) && it != source && !MUTATOR_CALLHOOK(ChatMessageTo, it, source), { sprint(it, msgstr); }); + event_log_msg = sprintf(":chat_spec:%d:%s", source.playerid, strreplace("\n", " ", msgin)); } else { @@ -2986,9 +3010,14 @@ int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodc FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source && !MUTATOR_CALLHOOK(ChatMessageTo, it, source), { sprint(it, msgstr); }); + event_log_msg = sprintf(":chat:%d:%s", source.playerid, strreplace("\n", " ", msgin)); } } + if (autocvar_sv_eventlog && (event_log_msg != "")) { + GameLogEcho(event_log_msg); + } + return ret; }