From ea2bf33373f52c67a94bd1ba8ad6a39c1da800be Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 11 Nov 2010 23:07:29 +0100 Subject: [PATCH] fix a crash with crylink when only using 1 shot; fix fade_rate networking --- qcsrc/server/csqcprojectile.qc | 2 +- qcsrc/server/w_crylink.qc | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/qcsrc/server/csqcprojectile.qc b/qcsrc/server/csqcprojectile.qc index d250d39def..31e5b77885 100644 --- a/qcsrc/server/csqcprojectile.qc +++ b/qcsrc/server/csqcprojectile.qc @@ -13,7 +13,7 @@ float CSQCProjectile_SendEntity(entity to, float sf) if(self.flags & FL_ONGROUND) sf |= 0x40; - if(self.fade_time != 0 && self.fade_rate != 0) + if(self.fade_time != 0 || self.fade_rate != 0) { ft = (self.fade_time - time) / sys_frametime; fr = (1 / self.fade_rate) / sys_frametime; diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 5925827497..b783f5be69 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -284,7 +284,11 @@ void W_Crylink_Attack (void) proj.classname = "spike"; proj.bot_dodge = TRUE; proj.bot_dodgerating = cvar("g_balance_crylink_primary_damage"); - if(counter == 0) { // first projectile, store in firstproj for now + if(shots == 1) { + proj.queuenext = proj; + proj.queueprev = proj; + } + else if(counter == 0) { // first projectile, store in firstproj for now firstproj = proj; } else if(counter == shots - 1) { // last projectile, link up with first projectile @@ -326,13 +330,13 @@ void W_Crylink_Attack (void) if(counter == 0) { proj.fade_time = time + cvar("g_balance_crylink_primary_middle_lifetime"); - self.fade_rate = 1 / cvar("g_balance_crylink_primary_middle_fadetime"); + proj.fade_rate = 1 / cvar("g_balance_crylink_primary_middle_fadetime"); proj.nextthink = time + cvar("g_balance_crylink_primary_middle_lifetime") + cvar("g_balance_crylink_primary_middle_fadetime"); } else { proj.fade_time = time + cvar("g_balance_crylink_primary_other_lifetime"); - self.fade_rate = 1 / cvar("g_balance_crylink_primary_other_fadetime"); + proj.fade_rate = 1 / cvar("g_balance_crylink_primary_other_fadetime"); proj.nextthink = time + cvar("g_balance_crylink_primary_other_lifetime") + cvar("g_balance_crylink_primary_other_fadetime"); } proj.cnt = cvar("g_balance_crylink_primary_bounces"); @@ -373,7 +377,11 @@ void W_Crylink_Attack2 (void) proj.classname = "spike"; proj.bot_dodge = TRUE; proj.bot_dodgerating = cvar("g_balance_crylink_secondary_damage"); - if(counter == 0) { // first projectile, store in firstproj for now + if(shots == 1) { + proj.queuenext = proj; + proj.queueprev = proj; + } + else if(counter == 0) { // first projectile, store in firstproj for now firstproj = proj; } else if(counter == shots - 1) { // last projectile, link up with first projectile @@ -403,13 +411,13 @@ void W_Crylink_Attack2 (void) if(counter == (shots - 1) / 2) { proj.fade_time = time + cvar("g_balance_crylink_secondary_middle_lifetime"); - self.fade_rate = 1 / cvar("g_balance_crylink_secondary_middle_fadetime"); + proj.fade_rate = 1 / cvar("g_balance_crylink_secondary_middle_fadetime"); proj.nextthink = time + cvar("g_balance_crylink_secondary_middle_lifetime") + cvar("g_balance_crylink_secondary_middle_fadetime"); } else { proj.fade_time = time + cvar("g_balance_crylink_secondary_line_lifetime"); - self.fade_rate = 1 / cvar("g_balance_crylink_secondary_line_fadetime"); + proj.fade_rate = 1 / cvar("g_balance_crylink_secondary_line_fadetime"); proj.nextthink = time + cvar("g_balance_crylink_secondary_line_lifetime") + cvar("g_balance_crylink_secondary_line_fadetime"); } proj.cnt = cvar("g_balance_crylink_secondary_bounces"); -- 2.39.2