X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fserver%2Fw_fireball.qc;h=4408ccf88f202ec907dc5252f9bb4545a8a5fa35;hb=6e63a9d07ccfc1f6730dfe8860ac4cafa868e3e3;hp=64ea41d3e517cd95f2d11ab97b5720ce6e3cd138;hpb=bcab32df965a80b27c814c0c30b625082584171a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/w_fireball.qc b/qcsrc/server/w_fireball.qc index 64ea41d3e..4408ccf88 100644 --- a/qcsrc/server/w_fireball.qc +++ b/qcsrc/server/w_fireball.qc @@ -1,70 +1,11 @@ #ifdef REGISTER_WEAPON -REGISTER_WEAPON(FIREBALL, w_fireball, IT_FUEL, 9, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "fireball", "fireball", _("Fireball")); +REGISTER_WEAPON(FIREBALL, w_fireball, IT_FUEL, 9, WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "fireball", "fireball", _("Fireball")); #else #ifdef SVQC .float bot_primary_fireballmooth; // whatever a mooth is .vector fireball_impactvec; .float fireball_primarytime; -// weapon load persistence, for weapons that support reloading -.float fireball_load; - -void W_Fireball_SetAmmoCounter() -{ - // set clip_load to the weapon we have switched to, if the gun uses reloading - if(!autocvar_g_balance_fireball_reload_ammo) - self.clip_load = 0; // also keeps crosshair ammo from displaying - else - { - self.clip_load = self.fireball_load; - self.clip_size = autocvar_g_balance_fireball_reload_ammo; // for the crosshair ammo display - } -} - -void W_Fireball_ReloadedAndReady() -{ - float t; - - // now do the ammo transfer - self.clip_load = self.old_clip_load; // restore the ammo counter, in case we still had ammo in the weapon before reloading - while(self.clip_load < autocvar_g_balance_fireball_reload_ammo && self.ammo_fuel) // make sure we don't add more ammo than we have - { - self.clip_load += 1; - self.ammo_fuel -= 1; - - // fuel can be a non-whole number, which brakes stuff here when between 0 and 1 - if(self.ammo_fuel < 1) - self.ammo_fuel = 0; - } - self.fireball_load = self.clip_load; - - t = ATTACK_FINISHED(self) - autocvar_g_balance_fireball_reload_time - 1; - ATTACK_FINISHED(self) = t; - w_ready(); -} - -void W_Fireball_Reload() -{ - // return if reloading is disabled for this weapon - if(!autocvar_g_balance_fireball_reload_ammo) - return; - - if(!W_ReloadCheck(self.ammo_fuel, min(autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_secondary_ammo))) - return; - - float t; - - sound (self, CHAN_WEAPON2, "weapons/reload.wav", VOL_BASE, ATTN_NORM); - - t = max(time, ATTACK_FINISHED(self)) + autocvar_g_balance_fireball_reload_time + 1; - ATTACK_FINISHED(self) = t; - - weapon_thinkf(WFRAME_RELOAD, autocvar_g_balance_fireball_reload_time, W_Fireball_ReloadedAndReady); - - self.old_clip_load = self.clip_load; - self.clip_load = -1; -} - void W_Fireball_Explode (void) { entity e; @@ -253,17 +194,7 @@ void W_Fireball_Attack1_Frame1() void W_Fireball_Attack1_Frame0() { - // if this weapon is reloadable, decrease its load. Else decrease the player's ammo - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) - { - if(autocvar_g_balance_fireball_reload_ammo) - { - self.clip_load -= autocvar_g_balance_fireball_primary_ammo; - self.fireball_load = self.clip_load; - } - else - self.ammo_fuel -= autocvar_g_balance_fireball_primary_ammo; - } + W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_reload_ammo); W_Fireball_AttackEffect(0, '-1.25 -3.75 0'); sound (self, CHAN_WEAPON, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM); @@ -314,17 +245,7 @@ void W_Fireball_Attack2() vector f_diff; float c; - // if this weapon is reloadable, decrease its load. Else decrease the player's ammo - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) - { - if(autocvar_g_balance_fireball_reload_ammo) - { - self.clip_load -= autocvar_g_balance_fireball_secondary_ammo; - self.fireball_load = self.clip_load; - } - else - self.ammo_fuel -= autocvar_g_balance_fireball_secondary_ammo; - } + W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_fireball_secondary_ammo, autocvar_g_balance_fireball_reload_ammo); c = mod(self.bulletcounter, 4); switch(c) @@ -406,7 +327,7 @@ float w_fireball(float req) else if (req == WR_THINK) { if(autocvar_g_balance_fireball_reload_ammo && self.clip_load < min(autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_secondary_ammo)) // forced reload - W_Fireball_Reload(); + weapon_action(self.weapon, WR_RELOAD); else if (self.BUTTON_ATCK) { if (time >= self.fireball_primarytime) @@ -434,35 +355,36 @@ float w_fireball(float req) precache_sound ("weapons/fireball_fire.wav"); precache_sound ("weapons/fireball_fire2.wav"); precache_sound ("weapons/fireball_prefire2.wav"); - precache_sound ("weapons/reload.wav"); + //precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound somewhere else } else if (req == WR_SETUP) { weapon_setup(WEP_FIREBALL); - W_Fireball_SetAmmoCounter(); + self.current_ammo = ammo_fuel; } else if (req == WR_CHECKAMMO1) { ammo_amount = self.ammo_fuel >= autocvar_g_balance_fireball_primary_ammo; - ammo_amount += self.fireball_load >= autocvar_g_balance_fireball_primary_ammo; + ammo_amount += self.weapon_load[WEP_FIREBALL] >= autocvar_g_balance_fireball_primary_ammo; return ammo_amount; } else if (req == WR_CHECKAMMO2) { ammo_amount = self.ammo_fuel >= autocvar_g_balance_fireball_secondary_ammo; - ammo_amount += self.fireball_load >= autocvar_g_balance_fireball_secondary_ammo; + ammo_amount += self.weapon_load[WEP_FIREBALL] >= autocvar_g_balance_fireball_secondary_ammo; return ammo_amount; } else if (req == WR_RESETPLAYER) { self.fireball_primarytime = time; - - // all weapons must be fully loaded when we spawn - self.fireball_load = autocvar_g_balance_fireball_reload_ammo; } else if (req == WR_RELOAD) { - W_Fireball_Reload(); + // fuel can be a non-whole number, which brakes stuff here when between 0 and 1 + if(self.ammo_fuel < 1) + self.ammo_fuel = 0; + + W_Reload(min(autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_secondary_ammo), autocvar_g_balance_fireball_reload_ammo, autocvar_g_balance_fireball_reload_time, "weapons/reload.wav"); } return TRUE; };