X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_weaponsystem.qc;h=b990085ba15f05a09f68fdf9b6326a165c38f90c;hb=05e03031f2c966fc296c93408c2bf78e3bc337cd;hp=e961e29415ff16f26a0c53c9b915a2a99a58f930;hpb=2bb2db9c0f8016645a23381d7493588d748ecacf;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc index e961e2941..b990085ba 100644 --- a/qcsrc/server/cl_weaponsystem.qc +++ b/qcsrc/server/cl_weaponsystem.qc @@ -93,12 +93,12 @@ void W_HitPlotAnalysis(entity player, vector screenforward, vector screenright, lag = ANTILAG_LATENCY(player); if(lag < 0.001) lag = 0; - if(clienttype(player) != CLIENTTYPE_REAL) + if not(IS_REAL_CLIENT(player)) lag = 0; // only antilag for clients org = player.origin + player.view_ofs; traceline_antilag_force(player, org, org + screenforward * MAX_SHOT_DISTANCE, MOVE_NORMAL, player, lag); - if(trace_ent.flags & FL_CLIENT) + if(IS_CLIENT(trace_ent)) { antilag_takeback(trace_ent, time - lag); hitplot = W_HitPlotNormalizedUntransform(org, trace_ent, screenforward, screenright, screenup, trace_endpos); @@ -197,7 +197,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m if (!trace_ent.takedamage) { traceline_antilag_force (ent, w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent)); - if (trace_ent.takedamage && trace_ent.classname == "player") + if (trace_ent.takedamage && IS_PLAYER(trace_ent)) { entity e; e = trace_ent; @@ -213,7 +213,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m if (ent.cursor_trace_ent) // client was aiming at someone if (ent.cursor_trace_ent != ent) // just to make sure if (ent.cursor_trace_ent.takedamage) // and that person is killable - if (ent.cursor_trace_ent.classname == "player") // and actually a player + if (IS_PLAYER(ent.cursor_trace_ent)) // and actually a player { // verify that the shot would miss without antilag // (avoids an issue where guns would always shoot at their origin) @@ -233,8 +233,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX) - if (!g_norecoil) - ent.punchangle_x = recoil * -1; + ent.punchangle_x = recoil * -1; if (snd != "") { @@ -255,7 +254,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m float CL_Weaponentity_CustomizeEntityForClient() { self.viewmodelforclient = self.owner; - if(other.classname == "spectator") + if(IS_SPEC(other)) if(other.enemy == self.owner) self.viewmodelforclient = other; return TRUE; @@ -541,15 +540,20 @@ void CL_Weaponentity_Think() } self.angles = '0 0 0'; - float f; + + float f = (self.owner.weapon_nextthink - time); if (self.state == WS_RAISE && !intermission_running) { - f = (self.owner.weapon_nextthink - time) * g_weaponratefactor / autocvar_g_balance_weaponswitchdelay; + entity newwep = get_weaponinfo(self.owner.switchweapon); + f = f * g_weaponratefactor / max(f, cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname))); + //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), (self.owner.weapon_nextthink - time))); self.angles_x = -90 * f * f; } else if (self.state == WS_DROP && !intermission_running) { - f = 1 - (self.owner.weapon_nextthink - time) * g_weaponratefactor / autocvar_g_balance_weaponswitchdelay; + entity oldwep = get_weaponinfo(self.owner.weapon); + f = 1 - f * g_weaponratefactor / max(f, cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname))); + //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), (self.owner.weapon_nextthink - time))); self.angles_x = -90 * f * f; } else if (self.state == WS_CLEAR) @@ -695,7 +699,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain) if (!f) { if (complain) - if(clienttype(cl) == CLIENTTYPE_REAL) + if(IS_REAL_CLIENT(cl)) { play2(cl, "weapons/unavailable.wav"); Send_WeaponComplain (cl, wpn, W_Name(wpn), 0); @@ -1352,7 +1356,7 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri if(!self.(self.current_ammo) && self.reload_ammo_min) if not(self.items & IT_UNLIMITED_WEAPON_AMMO) { - if(clienttype(self) == CLIENTTYPE_REAL && self.reload_complain < time) + if(IS_REAL_CLIENT(self) && self.reload_complain < time) { play2(self, "weapons/unavailable.wav"); sprint(self, strcat("You don't have enough ammo to reload the ^2", W_Name(self.weapon), "\n"));