#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"
#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"
void crosshair_trace(entity pl)
{
- traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * MAX_SHOT_DISTANCE, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
+ traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
}
.bool ctrace_solidchanged;
void crosshair_trace_plusvisibletriggers(entity pl)
}
void WarpZone_crosshair_trace(entity pl)
{
- WarpZone_traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * MAX_SHOT_DISTANCE, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
+ WarpZone_traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
}
return ret;
}
+string AmmoNameFromWeaponentity(entity wpn)
+{
+ string ammoitems = "batteries";
+ switch((wpn.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;
+ }
+ return ammoitems;
+}
+
string formatmessage(entity this, string msg)
{
float p, p1, p2;
entity cursor_ent;
string escape;
string replacement;
- string ammoitems;
p = 0;
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;
-
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
replacement = substring(msg, p, 2);
escape = substring(msg, p + 1, 1);
+ .entity weaponentity = weaponentities[0]; // TODO: unhardcode
+
switch(escape)
{
case "%": replacement = "%"; break;
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 = ammoitems; 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 = AmmoNameFromWeaponentity(this.(weaponentity)); 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;
case "S": replacement = ftos(vlen(this.velocity)); break;
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);
}
}
// decolorizes and team colors the player name when needed
-string playername(entity p)
+string playername(entity p, bool team_colorize)
{
string t;
- if (teamplay && !intermission_running && IS_PLAYER(p))
+ if (team_colorize && teamplay && !intermission_running && IS_PLAYER(p))
{
t = Team_ColorCode(p.team);
return strcat(t, strdecolorize(p.netname));
}
else
- return p.netname;
+ return ColorTranslateRGB(p.netname);
}
float want_weapon(entity weaponinfo, float allguns) // WEAPONTODO: what still needs done?
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;
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);