X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_items.qc;h=79c39ae95d7998899e99529451df30ff22b05fed;hb=1f1c714c231334ca941e029e7ab2094fff25b476;hp=3715e08c8962e38157f690a47b8ace2bd0ab0082;hpb=637fc4e59414931b58828c1706aa6e7d444614ef;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index 3715e08c8..79c39ae95 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -5,7 +5,7 @@ float have_pickup_item(void) if(self.classname != "minstagib") return FALSE; - if(self.items == IT_STRENGTH || self.items == IT_INVINCIBLE) + if(self.flags & FL_POWERUP) { if(autocvar_g_powerups > 0) return TRUE; @@ -233,6 +233,11 @@ void Item_RespawnCountdown (void) case IT_FUEL_REGEN: name = "item-fuelregen"; rgb = '1 0.5 0'; break; case IT_JETPACK: name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break; } + if(!name) + { + print("Unknown powerup-marked item is wanting to respawn\n"); + localcmd(sprintf("prvm_edict server %d\n", num_for_edict(self))); + } if(name) { WaypointSprite_Spawn(name, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb); @@ -281,7 +286,11 @@ void Item_ScheduleInitialRespawn(entity e) Item_ScheduleRespawnIn(e, game_starttime - time + ITEM_RESPAWNTIME_INITIAL(e)); } -float Item_GiveAmmoTo(entity item, entity player, .float ammofield, float ammomax) +float ITEM_MODE_NONE = 0; +float ITEM_MODE_HEALTH = 1; +float ITEM_MODE_ARMOR = 2; +float ITEM_MODE_FUEL = 3; +float Item_GiveAmmoTo(entity item, entity player, .float ammofield, float ammomax, float mode) { if (!item.ammofield) return FALSE; @@ -290,16 +299,16 @@ float Item_GiveAmmoTo(entity item, entity player, .float ammofield, float ammoma { if ((player.ammofield < ammomax) || item.pickup_anyway) { - player.ammofield = bound(player.ammofield, ammomax, player.ammofield + item.ammo_cells); + player.ammofield = bound(player.ammofield, ammomax, player.ammofield + item.ammofield); goto YEAH; } } else if(g_weapon_stay == 2) { float mi = min(item.ammofield, ammomax); - if ((player.ammofield < mi) || item.pickup_anyway) + if (player.ammofield < mi) { - player.ammofield = max(player.ammofield, mi); + player.ammofield = mi; goto YEAH; } } @@ -307,12 +316,20 @@ float Item_GiveAmmoTo(entity item, entity player, .float ammofield, float ammoma return FALSE; :YEAH - if(ammofield == ammo_fuel) - player.pauserotfuel_finished = max(player.pauserotfuel_finished, time + autocvar_g_balance_pause_fuel_rot); - if(ammofield == health) - player.pauserothealth_finished = max(player.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot); - if(ammofield == armorvalue) - player.pauserotarmor_finished = max(player.pauserotarmor_finished, time + autocvar_g_balance_pause_armor_rot); + switch(mode) + { + case ITEM_MODE_FUEL: + player.pauserotfuel_finished = max(player.pauserotfuel_finished, time + autocvar_g_balance_pause_fuel_rot); + break; + case ITEM_MODE_HEALTH: + player.pauserothealth_finished = max(player.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot); + break; + case ITEM_MODE_ARMOR: + player.pauserotarmor_finished = max(player.pauserotarmor_finished, time + autocvar_g_balance_pause_armor_rot); + break; + default: + break; + } return TRUE; } @@ -332,8 +349,8 @@ float Item_GiveTo(entity item, entity player) { float prevcells = player.ammo_cells; - Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max); - Item_GiveAmmoTo(item, player, ammo_cells, 999); + pickedup |= Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max, ITEM_MODE_FUEL); + pickedup |= Item_GiveAmmoTo(item, player, ammo_cells, 999, ITEM_MODE_NONE); if(player.ammo_cells > prevcells) { @@ -405,16 +422,16 @@ float Item_GiveTo(entity item, entity player) if not(player.weapons & W_WeaponBit(player.switchweapon)) _switchweapon = TRUE; - Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max); - Item_GiveAmmoTo(item, player, ammo_shells, g_pickup_shells_max); - Item_GiveAmmoTo(item, player, ammo_nails, g_pickup_nails_max); - Item_GiveAmmoTo(item, player, ammo_rockets, g_pickup_rockets_max); - Item_GiveAmmoTo(item, player, ammo_cells, g_pickup_cells_max); - Item_GiveAmmoTo(item, player, health, item.max_health); - Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue); + pickedup |= Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max, ITEM_MODE_FUEL); + pickedup |= Item_GiveAmmoTo(item, player, ammo_shells, g_pickup_shells_max, ITEM_MODE_NONE); + pickedup |= Item_GiveAmmoTo(item, player, ammo_nails, g_pickup_nails_max, ITEM_MODE_NONE); + pickedup |= Item_GiveAmmoTo(item, player, ammo_rockets, g_pickup_rockets_max, ITEM_MODE_NONE); + pickedup |= Item_GiveAmmoTo(item, player, ammo_cells, g_pickup_cells_max, ITEM_MODE_NONE); + pickedup |= Item_GiveAmmoTo(item, player, health, item.max_health, ITEM_MODE_HEALTH); + pickedup |= Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue, ITEM_MODE_ARMOR); if (item.flags & FL_WEAPON) - if ((it = item.weapons - (item.weapons & player.weapons)) || (g_pickup_weapons_anyway)) + if ((it = item.weapons - (item.weapons & player.weapons)) || (item.spawnshieldtime && g_pickup_weapons_anyway)) { pickedup = TRUE; for(i = WEP_FIRST; i <= WEP_LAST; ++i) @@ -683,6 +700,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, self.items = itemid; self.weapons = weaponid; + self.flags = FL_ITEM | itemflags; // is it a dropped weapon? if (self.classname == "droppedweapon") @@ -799,7 +817,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, self.respawntimejitter = defaultrespawntimejitter; } self.netname = itemname; - self.flags = FL_ITEM | itemflags; self.touch = Item_Touch; setmodel (self, self.mdl); // precision set below self.effects |= EF_LOWPRECISION;