X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_items.qc;h=4da9a3d08a877bb2fdee3b1b5e96f849125db1f4;hp=9d32f3234bf7ae2f429f4c4038f84e1666cc67df;hb=43014c8bf1d0e003200bfb04cfe30b7523b7c561;hpb=d0e76dbc27498aac3bdc6bfc5cc2caa32bbac797 diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index 9d32f3234..4da9a3d08 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -40,6 +40,7 @@ string Item_CounterFieldName(float it) } .float max_armorvalue; +.float pickup_anyway; float Item_Customize() { @@ -111,7 +112,7 @@ void Item_Show (entity e, float mode) e.model = e.mdl; e.solid = SOLID_NOT; e.colormod = stov(cvar_string("g_ghost_items_color")); - self.glowmod = self.colormod; + e.glowmod = e.colormod; e.alpha = g_ghost_items; e.customizeentityforclient = func_null; @@ -123,7 +124,7 @@ void Item_Show (entity e, float mode) e.model = string_null; e.solid = SOLID_NOT; e.colormod = stov(cvar_string("g_ghost_items_color")); - self.glowmod = self.colormod; + e.glowmod = e.colormod; e.alpha = 0; e.customizeentityforclient = func_null; @@ -325,7 +326,7 @@ float Item_GiveTo(entity item, entity player) } if (item.ammo_fuel) - if (player.ammo_fuel < g_pickup_fuel_max) + if (player.ammo_fuel < g_pickup_fuel_max) { pickedup = TRUE; player.ammo_fuel = min(player.ammo_fuel + item.ammo_fuel, g_pickup_fuel_max); @@ -364,31 +365,31 @@ float Item_GiveTo(entity item, entity player) if(item.spawnshieldtime) { if (item.ammo_shells) - if (player.ammo_shells < g_pickup_shells_max) + if ((player.ammo_shells < g_pickup_shells_max) || item.pickup_anyway) { pickedup = TRUE; player.ammo_shells = min (player.ammo_shells + item.ammo_shells, g_pickup_shells_max); } if (item.ammo_nails) - if (player.ammo_nails < g_pickup_nails_max) + if ((player.ammo_nails < g_pickup_nails_max) || item.pickup_anyway) { pickedup = TRUE; player.ammo_nails = min (player.ammo_nails + item.ammo_nails, g_pickup_nails_max); } if (item.ammo_rockets) - if (player.ammo_rockets < g_pickup_rockets_max) + if ((player.ammo_rockets < g_pickup_rockets_max) || item.pickup_anyway) { pickedup = TRUE; player.ammo_rockets = min (player.ammo_rockets + item.ammo_rockets, g_pickup_rockets_max); } if (item.ammo_cells) - if (player.ammo_cells < g_pickup_cells_max) + if ((player.ammo_cells < g_pickup_cells_max) || item.pickup_anyway) { pickedup = TRUE; player.ammo_cells = min (player.ammo_cells + item.ammo_cells, g_pickup_cells_max); } if (item.ammo_fuel) - if (player.ammo_fuel < g_pickup_fuel_max) + if ((player.ammo_fuel < g_pickup_fuel_max) || item.pickup_anyway) { pickedup = TRUE; player.ammo_fuel = min(player.ammo_fuel + item.ammo_fuel, g_pickup_fuel_max); @@ -397,7 +398,7 @@ float Item_GiveTo(entity item, entity player) } if (item.flags & FL_WEAPON) - if ((it = item.weapons - (item.weapons & player.weapons))) + if ((it = item.weapons - (item.weapons & player.weapons)) || g_pickup_weapons_anyway) { pickedup = TRUE; for(i = WEP_FIRST; i <= WEP_LAST; ++i) @@ -429,14 +430,14 @@ float Item_GiveTo(entity item, entity player) } if (item.health) - if (player.health < item.max_health) + if ((player.health < item.max_health) || item.pickup_anyway) { pickedup = TRUE; player.health = min(player.health + item.health, item.max_health); player.pauserothealth_finished = max(player.pauserothealth_finished, time + cvar("g_balance_pause_health_rot")); } if (item.armorvalue) - if (player.armorvalue < item.max_armorvalue) + if ((player.armorvalue < item.max_armorvalue) || item.pickup_anyway) { pickedup = TRUE; player.armorvalue = min(player.armorvalue + item.armorvalue, item.max_armorvalue); @@ -682,6 +683,9 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, { startitem_failed = FALSE; + self.items = itemid; + self.weapons = weaponid; + // is it a dropped weapon? if (self.classname == "droppedweapon") { @@ -702,9 +706,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, } else { - self.items = itemid; - self.weapons = weaponid; - if(MUTATOR_CALLHOOK(FilterItem)) // error means we do not want the item { startitem_failed = TRUE; @@ -1148,6 +1149,8 @@ void spawnfunc_weapon_rocketlauncher (void) void spawnfunc_item_rockets (void) { if(!self.ammo_rockets) self.ammo_rockets = g_pickup_rockets; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_ammo_anyway; StartItem ("models/items/a_rockets.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "rockets", IT_ROCKETS, 0, 0, commodity_pickupevalfunc, 3000); } @@ -1165,12 +1168,16 @@ void spawnfunc_item_bullets (void) { if(!self.ammo_nails) self.ammo_nails = g_pickup_nails; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_ammo_anyway; StartItem ("models/items/a_bullets.mdl", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "bullets", IT_NAILS, 0, 0, commodity_pickupevalfunc, 2000); } void spawnfunc_item_cells (void) { if(!self.ammo_cells) self.ammo_cells = g_pickup_cells; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_ammo_anyway; StartItem ("models/items/a_cells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "cells", IT_CELLS, 0, 0, commodity_pickupevalfunc, 2000); } @@ -1187,6 +1194,8 @@ void spawnfunc_item_shells (void) { if(!self.ammo_shells) self.ammo_shells = g_pickup_shells; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_ammo_anyway; StartItem ("models/items/a_shells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "shells", IT_SHELLS, 0, 0, commodity_pickupevalfunc, 500); } @@ -1195,6 +1204,8 @@ void spawnfunc_item_armor_small (void) { self.armorvalue = g_pickup_armorsmall; if(!self.max_armorvalue) self.max_armorvalue = g_pickup_armorsmall_max; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_armorsmall_anyway; StartItem ("models/items/g_a1.md3", "misc/armor1.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "5 Armor", IT_ARMOR_SHARD, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW); } @@ -1203,6 +1214,8 @@ void spawnfunc_item_armor_medium (void) { self.armorvalue = g_pickup_armormedium; if(!self.max_armorvalue) self.max_armorvalue = g_pickup_armormedium_max; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_armormedium_anyway; StartItem ("models/items/g_armormedium.md3", "misc/armor10.wav", g_pickup_respawntime_medium, g_pickup_respawntimejitter_medium, "25 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID); } @@ -1211,6 +1224,8 @@ void spawnfunc_item_armor_big (void) { self.armorvalue = g_pickup_armorbig; if(!self.max_armorvalue) self.max_armorvalue = g_pickup_armorbig_max; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_armorbig_anyway; StartItem ("models/items/g_a50.md3", "misc/armor17_5.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "50 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, 20000); } @@ -1219,6 +1234,8 @@ void spawnfunc_item_armor_large (void) { self.armorvalue = g_pickup_armorlarge; if(!self.max_armorvalue) self.max_armorvalue = g_pickup_armorlarge_max; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_armorlarge_anyway; StartItem ("models/items/g_a25.md3", "misc/armor25.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "100 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH); } @@ -1227,6 +1244,8 @@ void spawnfunc_item_health_small (void) { self.max_health = g_pickup_healthsmall_max; if(!self.health) self.health = g_pickup_healthsmall; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_healthsmall_anyway; StartItem ("models/items/g_h1.md3", "misc/minihealth.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "5 Health", IT_5HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW); } @@ -1235,6 +1254,8 @@ void spawnfunc_item_health_medium (void) { self.max_health = g_pickup_healthmedium_max; if(!self.health) self.health = g_pickup_healthmedium; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_healthmedium_anyway; StartItem ("models/items/g_h25.md3", "misc/mediumhealth.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "25 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID); } @@ -1243,6 +1264,8 @@ void spawnfunc_item_health_large (void) { self.max_health = g_pickup_healthlarge_max; if(!self.health) self.health = g_pickup_healthlarge; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_healthlarge_anyway; StartItem ("models/items/g_h50.md3", "misc/mediumhealth.wav", g_pickup_respawntime_medium, g_pickup_respawntimejitter_medium, "50 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID); } @@ -1260,6 +1283,8 @@ void spawnfunc_item_health_mega (void) { self.max_health = g_pickup_healthmega_max; if(!self.health) self.health = g_pickup_healthmega; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_healthmega_anyway; StartItem ("models/items/g_h100.md3", "misc/megahealth.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "100 Health", IT_HEALTH, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH); } } @@ -1460,6 +1485,8 @@ void spawnfunc_item_fuel(void) { if(!self.ammo_fuel) self.ammo_fuel = g_pickup_fuel; + if(!self.pickup_anyway) + self.pickup_anyway = g_pickup_ammo_anyway; StartItem ("models/items/g_fuel.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "Fuel", IT_FUEL, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW); } @@ -1487,12 +1514,6 @@ void spawnfunc_item_jetpack(void) StartItem ("models/items/g_jetpack.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Jet pack", IT_JETPACK, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW); } -// we no longer have the seeker -void spawnfunc_weapon_seeker() -{ - spawnfunc_weapon_fireball(); -} - #define OP_SET 0 #define OP_MIN 1 @@ -1646,8 +1667,8 @@ float GiveItems(entity e, float beginarg, float endarg) continue; case "ALL": got += GiveBit(e, items, IT_FUEL_REGEN, op, val); - got += GiveValue(e, strength_finished, op, time + val); - got += GiveValue(e, invincible_finished, op, time + val); + got += GiveValue(e, strength_finished, op, time); + got += GiveValue(e, invincible_finished, op, time); got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val); case "all": got += GiveBit(e, items, IT_JETPACK, op, val);