]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/client.qc
Merge branch 'master' into Mario/fix_me
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / client.qc
index 0164444950cb09e1d5d7ab0989d9b9eba301cbe9..ee87e2ea286015561b4ae48d76b26e3f2dee47fd 100644 (file)
@@ -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;
 }