X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fnix%2Fsv_nix.qc;h=a06f5364d4473bf673cfcfa29aff140c8f3442de;hp=97ed4361ba12c8e4da5d8701fbf7f7e3208faad7;hb=87bec07409c336c956a798556064c6819ad40a4d;hpb=268f9c69576b6bb929f66d19f0d077d19ba47edd diff --git a/qcsrc/common/mutators/mutator/nix/sv_nix.qc b/qcsrc/common/mutators/mutator/nix/sv_nix.qc index 97ed4361ba..a06f5364d4 100644 --- a/qcsrc/common/mutators/mutator/nix/sv_nix.qc +++ b/qcsrc/common/mutators/mutator/nix/sv_nix.qc @@ -63,8 +63,14 @@ REGISTER_MUTATOR(nix, cvar("g_nix") && !cvar("g_instagib") && !cvar("g_overkill" it.ammo_rockets = start_ammo_rockets; it.ammo_fuel = start_ammo_fuel; it.weapons = start_weapons; - if(!client_hasweapon(it, PS(it).m_weapon, true, false)) - PS(it).m_switchweapon = w_getbestweapon(it); + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + if(it.(weaponentity).m_weapon == WEP_Null && slot != 0) + continue; + if(!client_hasweapon(it, it.(weaponentity).m_weapon, weaponentity, true, false)) + it.(weaponentity).m_switchweapon = w_getbestweapon(it, weaponentity); + } }); } @@ -96,7 +102,7 @@ void NIX_ChooseNextWeapon() RandomSelection_Init(); FOREACH(Weapons, it != WEP_Null, LAMBDA( if(NIX_CanChooseWeapon(it.m_id)) - RandomSelection_Add(NULL, it.m_id, string_null, 1, (it.m_id != nix_weapon)); + RandomSelection_AddFloat(it.m_id, 1, (it.m_id != nix_weapon)); )); nix_nextweapon = RandomSelection_chosen_float; } @@ -164,14 +170,24 @@ void NIX_GiveCurrentWeapon(entity this) // all weapons must be fully loaded when we spawn if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars - this.(weapon_load[nix_weapon]) = e.reloading_ammo; + { + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + this.(weaponentity).(weapon_load[nix_weapon]) = e.reloading_ammo; + } + } // vortex too if(WEP_CVAR(vortex, charge)) { if(WEP_CVAR_SEC(vortex, chargepool)) this.vortex_chargepool_ammo = 1; - this.vortex_charge = WEP_CVAR(vortex, charge_start); + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + this.(weaponentity).vortex_charge = WEP_CVAR(vortex, charge_start); + } } // set last change info @@ -205,12 +221,19 @@ void NIX_GiveCurrentWeapon(entity this) this.weapons |= e.m_wepset; Weapon w = Weapons_from(nix_weapon); - if(PS(this).m_switchweapon != w) - if(!client_hasweapon(this, PS(this).m_switchweapon, true, false)) + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + if(this.(weaponentity).m_weapon == WEP_Null && slot != 0) + continue; + + if(this.(weaponentity).m_switchweapon != w) + if(!client_hasweapon(this, this.(weaponentity).m_switchweapon, weaponentity, true, false)) { - if(client_hasweapon(this, w, true, false)) - W_SwitchWeapon(this, w); + if(client_hasweapon(this, w, weaponentity, true, false)) + W_SwitchWeapon(this, w, weaponentity); } + } } MUTATOR_HOOKFUNCTION(nix, ForbidThrowCurrentWeapon) @@ -232,24 +255,13 @@ MUTATOR_HOOKFUNCTION(nix, FilterItem) { entity item = M_ARGV(0, entity); - switch (item.items) + if(item.itemdef.instanceOfHealth || item.itemdef.instanceOfArmor) + { + return !autocvar_g_nix_with_healtharmor; + } + else if(item.itemdef.instanceOfPowerup) { - case ITEM_HealthSmall.m_itemid: - case ITEM_HealthMedium.m_itemid: - case ITEM_HealthLarge.m_itemid: - case ITEM_HealthMega.m_itemid: - case ITEM_ArmorSmall.m_itemid: - case ITEM_ArmorMedium.m_itemid: - case ITEM_ArmorLarge.m_itemid: - case ITEM_ArmorMega.m_itemid: - if (autocvar_g_nix_with_healtharmor) - return false; - break; - case ITEM_Strength.m_itemid: - case ITEM_Shield.m_itemid: - if (autocvar_g_nix_with_powerups) - return false; - break; + return !autocvar_g_nix_with_powerups; } return true; // delete all other items