]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/miscfunctions.qc
Merge branch 'master' into Mario/wepent_experimental
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / miscfunctions.qc
index 1b91304da6452eb605aa7b68936a465d2d5badf9..40352207a2492e77964d8c83d187464bf18f0e8c 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"
@@ -25,6 +26,7 @@
 #include "../common/items/_mod.qh"
 #include "../common/state.qh"
 #include "../common/effects/qc/globalsound.qh"
+#include "../common/wepent.qh"
 #include "../lib/csqcmodel/sv_model.qh"
 #include "../lib/warpzone/anglestransform.qh"
 #include "../lib/warpzone/server.qh"
@@ -237,6 +239,9 @@ string formatmessage(entity this, string msg)
        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
@@ -259,6 +264,8 @@ string formatmessage(entity this, string msg)
                replacement = substring(msg, p, 2);
                escape = substring(msg, p + 1, 1);
 
+               .entity weaponentity = weaponentities[0]; // TODO: unhardcode
+
                switch(escape)
                {
                        case "%": replacement = "%"; break;
@@ -269,7 +276,7 @@ string formatmessage(entity this, string msg)
                        case "l": replacement = NearestLocation(this.origin); break;
                        case "y": replacement = NearestLocation(cursor); break;
                        case "d": replacement = NearestLocation(this.death_origin); break;
-                       case "w": replacement = ((PS(this).m_weapon == WEP_Null) ? ((PS(this).m_switchweapon == WEP_Null) ? Weapons_from(this.cnt) : PS(this).m_switchweapon) : PS(this).m_weapon).m_name; break;
+                       case "w": replacement = ((this.(weaponentity).m_weapon == WEP_Null) ? ((this.(weaponentity).m_switchweapon == WEP_Null) ? Weapons_from(this.(weaponentity).cnt) : this.(weaponentity).m_switchweapon) : this.(weaponentity).m_weapon).m_name; break;
                        case "W": replacement = ammoitems; break;
                        case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break;
                        case "s": replacement = ftos(vlen(this.velocity - this.velocity_z * '0 0 1')); break;
@@ -447,7 +454,14 @@ void GetCvars(entity this, int f)
        if (f > 0)
        {
                if (s == "cl_weaponpriority")
-                       if (PS(this)) PS(this).m_switchweapon = w_getbestweapon(this);
+               {
+                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       {
+                               .entity weaponentity = weaponentities[slot];
+                               if (this.(weaponentity) && (this.(weaponentity).m_weapon != WEP_Null || slot == 0))
+                                       this.(weaponentity).m_switchweapon = w_getbestweapon(this, weaponentity);
+                       }
+               }
                if (s == "cl_allow_uidtracking")
                        PlayerStats_GameReport_AddPlayer(this);
        }
@@ -552,6 +566,15 @@ void readplayerstartcvars()
                                g_weaponarena_weapons |= (it.m_wepset);
                ));
        }
+       else if (s == "devall")
+       {
+               g_weaponarena = 1;
+               g_weaponarena_list = "All Weapons"; // TODO: report as more than just all weapons?
+               FOREACH(Weapons, it != WEP_Null,
+               {
+                       g_weaponarena_weapons |= (it.m_wepset);
+               });
+       }
        else if (s == "most")
        {
                g_weaponarena = 1;
@@ -1073,7 +1096,7 @@ bool WarpZone_Projectile_Touch_ImpactFilter_Callback(entity this, entity toucher
                if(this.classname == "nade")
                        return false; // no checks here
                else if(this.classname == "grapplinghook")
-                       RemoveGrapplingHook(this.realowner);
+                       RemoveHook(this);
                else if(this.classname == "spike")
                {
                        W_Crylink_Dequeue(this);