X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator_nix.qc;h=dc12b05209eccc70baa32187ab62b033eb8fb961;hb=13a42acaac2ee6b7f0494b0a02cefc1e270d9727;hp=4603a1cca785d0a33a860276cbc362cdfcca26de;hpb=8956fac358b1f67619049037f188cbffd6fe1b36;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/mutator_nix.qc b/qcsrc/server/mutators/mutator_nix.qc index 4603a1cca..dc12b0520 100644 --- a/qcsrc/server/mutators/mutator_nix.qc +++ b/qcsrc/server/mutators/mutator_nix.qc @@ -1,8 +1,10 @@ float g_nix_with_laser; -// WEAPONTODO + float nix_weapon; +float nix_weapon_ammo; float nix_nextchange; float nix_nextweapon; +float nix_nextweapon_ammo; .float nix_lastchange_id; .float nix_lastinfotime; .float nix_nextincr; @@ -20,7 +22,7 @@ float NIX_CanChooseWeapon(float wpn) } else { - if(wpn == WEP_BLASTER && g_nix_with_laser) // WEAPONTODO: rename to g_nix_with_blaster + if(wpn == WEP_LASER && g_nix_with_laser) return FALSE; if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED) return FALSE; @@ -37,6 +39,7 @@ void NIX_ChooseNextWeapon() if(NIX_CanChooseWeapon(j)) RandomSelection_Add(world, j, string_null, 1, (j != nix_weapon)); nix_nextweapon = RandomSelection_chosen_float; + nix_nextweapon_ammo = W_AmmoItemCode(nix_nextweapon); } void NIX_GiveCurrentWeapon() @@ -51,66 +54,65 @@ void NIX_GiveCurrentWeapon() if(dt <= 0) { nix_weapon = nix_nextweapon; + nix_weapon_ammo = nix_nextweapon_ammo; nix_nextweapon = 0; if (!nix_nextchange) // no round played yet? nix_nextchange = time; // start the first round now! else nix_nextchange = time + autocvar_g_balance_nix_roundtime; - //WEP_ACTION(nix_weapon, WR_INIT); // forget it, too slow + //weapon_action(nix_weapon, WR_PRECACHE); // forget it, too slow } - // get weapon info - entity e = get_weaponinfo(nix_weapon); - if(nix_nextchange != self.nix_lastchange_id) // this shall only be called once per round! { - self.ammo_shells = self.ammo_nails = self.ammo_rockets = self.ammo_cells = self.ammo_fuel = 0; - - if(self.items & IT_UNLIMITED_WEAPON_AMMO) + self.nix_lastchange_id = nix_nextchange; + if (self.items & IT_UNLIMITED_WEAPON_AMMO) { - switch(e.ammo_field) - { - case ammo_shells: self.ammo_shells = autocvar_g_pickup_shells_max; break; - case ammo_nails: self.ammo_nails = autocvar_g_pickup_nails_max; break; - case ammo_rockets: self.ammo_rockets = autocvar_g_pickup_rockets_max; break; - case ammo_cells: self.ammo_cells = autocvar_g_pickup_cells_max; break; - case ammo_fuel: self.ammo_fuel = autocvar_g_pickup_fuel_max; break; - } + self.ammo_shells = (nix_weapon_ammo & IT_SHELLS) ? + autocvar_g_pickup_shells_max : 0; + self.ammo_nails = (nix_weapon_ammo & IT_NAILS) ? + autocvar_g_pickup_nails_max : 0; + self.ammo_rockets = (nix_weapon_ammo & IT_ROCKETS) ? + autocvar_g_pickup_rockets_max : 0; + self.ammo_cells = (nix_weapon_ammo & IT_CELLS) ? + autocvar_g_pickup_cells_max : 0; + self.ammo_fuel = (nix_weapon_ammo & IT_FUEL) ? + autocvar_g_pickup_fuel_max : 0; } else { - switch(e.ammo_field) - { - case ammo_shells: self.ammo_shells = autocvar_g_balance_nix_ammo_shells; break; - case ammo_nails: self.ammo_nails = autocvar_g_balance_nix_ammo_nails; break; - case ammo_rockets: self.ammo_rockets = autocvar_g_balance_nix_ammo_rockets; break; - case ammo_cells: self.ammo_cells = autocvar_g_balance_nix_ammo_cells; break; - case ammo_fuel: self.ammo_fuel = autocvar_g_balance_nix_ammo_fuel; break; - } + self.ammo_shells = (nix_weapon_ammo & IT_SHELLS) ? + autocvar_g_balance_nix_ammo_shells : 0; + self.ammo_nails = (nix_weapon_ammo & IT_NAILS) ? + autocvar_g_balance_nix_ammo_nails : 0; + self.ammo_rockets = (nix_weapon_ammo & IT_ROCKETS) ? + autocvar_g_balance_nix_ammo_rockets : 0; + self.ammo_cells = (nix_weapon_ammo & IT_CELLS) ? + autocvar_g_balance_nix_ammo_cells : 0; + self.ammo_fuel = (nix_weapon_ammo & IT_FUEL) ? + autocvar_g_balance_nix_ammo_fuel : 0; } - self.nix_nextincr = time + autocvar_g_balance_nix_incrtime; if(dt >= 1 && dt <= 5) self.nix_lastinfotime = -42; else Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_NIX_NEWWEAPON, nix_weapon); - WEP_ACTION(nix_weapon, WR_RESETPLAYER); + weapon_action(nix_weapon, WR_RESETPLAYER); // all weapons must be fully loaded when we spawn + entity e; + e = get_weaponinfo(nix_weapon); if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars - self.(weapon_load[nix_weapon]) = e.reloading_ammo; + self.(weapon_load[nix_weapon]) = cvar(strcat("g_balance_", e.netname, "_reload_ammo")); // nex too - if(WEP_CVAR(vortex, charge)) + if(autocvar_g_balance_nex_charge) { - if(WEP_CVAR_SEC(vortex, chargepool)) - self.vortex_chargepool_ammo = 1; - self.vortex_charge = WEP_CVAR(vortex, charge_start); + if(autocvar_g_balance_nex_secondary_chargepool) + self.nex_chargepool_ammo = 1; + self.nex_charge = autocvar_g_balance_nex_charge_start; } - - // set last change info - self.nix_lastchange_id = nix_nextchange; } if(self.nix_lastinfotime != dt) { @@ -121,21 +123,22 @@ void NIX_GiveCurrentWeapon() if(!(self.items & IT_UNLIMITED_WEAPON_AMMO) && time > self.nix_nextincr) { - switch(e.ammo_field) - { - case ammo_shells: self.ammo_shells += autocvar_g_balance_nix_ammoincr_shells; break; - case ammo_nails: self.ammo_nails += autocvar_g_balance_nix_ammoincr_nails; break; - case ammo_rockets: self.ammo_rockets += autocvar_g_balance_nix_ammoincr_rockets; break; - case ammo_cells: self.ammo_cells += autocvar_g_balance_nix_ammoincr_cells; break; - case ammo_fuel: self.ammo_fuel += autocvar_g_balance_nix_ammoincr_fuel; break; - } - + if (nix_weapon_ammo & IT_SHELLS) + self.ammo_shells = self.ammo_shells + autocvar_g_balance_nix_ammoincr_shells; + else if (nix_weapon_ammo & IT_NAILS) + self.ammo_nails = self.ammo_nails + autocvar_g_balance_nix_ammoincr_nails; + else if (nix_weapon_ammo & IT_ROCKETS) + self.ammo_rockets = self.ammo_rockets + autocvar_g_balance_nix_ammoincr_rockets; + else if (nix_weapon_ammo & IT_CELLS) + self.ammo_cells = self.ammo_cells + autocvar_g_balance_nix_ammoincr_cells; + if (nix_weapon_ammo & IT_FUEL) // hook uses cells and fuel + self.ammo_fuel = self.ammo_fuel + autocvar_g_balance_nix_ammoincr_fuel; self.nix_nextincr = time + autocvar_g_balance_nix_incrtime; } self.weapons = '0 0 0'; if(g_nix_with_laser) - self.weapons &= ~WEPSET_BLASTER; + self.weapons &= ~WEPSET_LASER; self.weapons |= WepSet_FromWeapon(nix_weapon); if(self.switchweapon != nix_weapon) @@ -149,7 +152,7 @@ void NIX_precache() float i; for (i = WEP_FIRST; i <= WEP_LAST; ++i) if (NIX_CanChooseWeapon(i)) - WEP_ACTION(i, WR_INIT); + weapon_action(i, WR_PRECACHE); } MUTATOR_HOOKFUNCTION(nix_ForbidThrowCurrentWeapon)