]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/miscfunctions.qc
Fix %W in chat messages
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / miscfunctions.qc
index 58cd949297acefe1af5e3e48d65f8f098f6c58b4..39c42a55695f3e585ecf9f440fe89435d382342b 100644 (file)
@@ -11,6 +11,7 @@
 #include "weapons/selection.qh"
 #include "../common/command/_mod.qh"
 #include "../common/constants.qh"
+#include <common/net_linked.qh>
 #include "../common/deathtypes/all.qh"
 #include "../common/mapinfo.qh"
 #include "../common/notifications/all.qh"
@@ -228,15 +229,23 @@ string formatmessage(entity this, string msg)
        n = 7;
 
        ammoitems = "batteries";
-       if(this.items & ITEM_Plasma.m_itemid) ammoitems = ITEM_Plasma.m_name;
-       if(this.items & ITEM_Cells.m_itemid) ammoitems = ITEM_Cells.m_name;
-       if(this.items & ITEM_Rockets.m_itemid) ammoitems = ITEM_Rockets.m_name;
-       if(this.items & ITEM_Shells.m_itemid) ammoitems = ITEM_Shells.m_name;
+       switch((PS(this).m_weapon).ammo_field)
+       {
+               case ammo_shells:  ammoitems = ITEM_Shells.m_name;      break;
+               case ammo_nails:   ammoitems = ITEM_Bullets.m_name;     break;
+               case ammo_rockets: ammoitems = ITEM_Rockets.m_name;     break;
+               case ammo_cells:   ammoitems = ITEM_Cells.m_name;       break;
+               case ammo_plasma:  ammoitems = ITEM_Plasma.m_name;      break;
+               case ammo_fuel:    ammoitems = ITEM_JetpackFuel.m_name; break;
+       }
 
        WarpZone_crosshair_trace(this);
        cursor = trace_endpos;
        cursor_ent = trace_ent;
 
+       MUTATOR_CALLHOOK(PreFormatMessage, this, msg);
+       msg = M_ARGV(1, string);
+
        while (1) {
                if (n < 1)
                        break; // too many replacements
@@ -457,7 +466,7 @@ void GetCvars(entity this, int f)
 string playername(entity p)
 {
     string t;
-    if (teamplay && !intermission_running && IS_PLAYER(p))
+    if (teamplay && !gameover && IS_PLAYER(p))
     {
         t = Team_ColorCode(p.team);
         return strcat(t, strdecolorize(p.netname));
@@ -1144,7 +1153,6 @@ float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundma
 {
     float m, i;
     vector start, org, delta, end, enddown, mstart;
-    entity sp;
 
     m = e.dphitcontentsmask;
     e.dphitcontentsmask = goodcontents | badcontents;
@@ -1200,16 +1208,26 @@ float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundma
             continue;
 
        // rule 4: we must "see" some spawnpoint or item
-       for(sp = NULL; (sp = find(sp, classname, "info_player_deathmatch")); )
-               if(checkpvs(mstart, sp))
-                       if((traceline(mstart, sp.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
-                               break;
+    entity sp = NULL;
+    IL_EACH(g_spawnpoints, checkpvs(mstart, it),
+    {
+       if((traceline(mstart, it.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
+       {
+               sp = it;
+               break;
+       }
+    });
        if(!sp)
        {
-               for(sp = NULL; (sp = findflags(sp, flags, FL_ITEM)); )
-                       if(checkpvs(mstart, sp))
-                               if((traceline(mstart, sp.origin + (sp.mins + sp.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
-                                       break;
+               IL_EACH(g_items, checkpvs(mstart, it),
+               {
+                       if((traceline(mstart, it.origin + (it.mins + it.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
+                       {
+                               sp = it;
+                               break;
+                       }
+               });
+
                if(!sp)
                        continue;
        }