From 4e9aeafc6a648b55d4978299746137a0d4e4a972 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 13 Oct 2018 15:47:15 +1000 Subject: [PATCH 1/1] Add an option to alternate between weapons when dual wielding --- qcsrc/server/autocvars.qh | 1 + qcsrc/server/weapons/weaponsystem.qc | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index b3d23256f0..b23f6f1481 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -518,5 +518,6 @@ float autocvar_sv_airstopaccelerate; float autocvar_sv_track_canjump; bool autocvar_sv_showspectators; bool autocvar_g_weaponswitch_debug; +bool autocvar_g_weaponswitch_debug_alternate; bool autocvar_g_allow_checkpoints; bool autocvar_sv_vq3compat_changehitbox = false; diff --git a/qcsrc/server/weapons/weaponsystem.qc b/qcsrc/server/weapons/weaponsystem.qc index 1f8c58be14..50a30fed89 100644 --- a/qcsrc/server/weapons/weaponsystem.qc +++ b/qcsrc/server/weapons/weaponsystem.qc @@ -321,6 +321,22 @@ void weapon_prepareattack_do(entity actor, .entity weaponentity, bool secondary, // dprint("resetting attack finished to ", ftos(time), "\n"); } ATTACK_FINISHED(actor, slot) = ATTACK_FINISHED(actor, slot) + attacktime * W_WeaponRateFactor(actor); + + if(autocvar_g_weaponswitch_debug_alternate && W_DualWielding(actor)) + { + for(int wepslot = 0; wepslot < MAX_WEAPONSLOTS; ++wepslot) + { + if(slot == wepslot) + continue; + .entity wepent = weaponentities[wepslot]; + if(actor.(wepent) && actor.(wepent).m_weapon != WEP_Null) + { + if (ATTACK_FINISHED(actor, wepslot) < time - actor.(wepent).weapon_frametime * 1.5) + ATTACK_FINISHED(actor, wepslot) = time; + ATTACK_FINISHED(actor, wepslot) = ATTACK_FINISHED(actor, wepslot) + (attacktime * W_WeaponRateFactor(actor)) * 0.5; + } + } + } } this.bulletcounter += 1; // dprint("attack finished ", ftos(ATTACK_FINISHED(actor, slot)), "\n"); -- 2.39.2