X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_items.qc;h=9f0075afa53756b1f278443e979f7d37bde3c424;hb=de6fba426fc18363fbddf04526c37ee69378c3a2;hp=ee56acc9ca696b95ede26343e20d08a80a98a955;hpb=667c2bd61b3d37ca1051df895921a8e02cf8d980;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index ee56acc9c..9f0075afa 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -112,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; @@ -124,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; @@ -233,8 +233,13 @@ void Item_ScheduleRespawnIn(entity e, float t) void Item_ScheduleRespawn(entity e) { - Item_Show(e, 0); - Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME(e)); + if(e.respawntime > 0) + { + Item_Show(e, 0); + Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME(e)); + } + else // if respawntime is -1, this item does not respawn + Item_Show(e, -1); } void Item_ScheduleInitialRespawn(entity e) @@ -291,7 +296,7 @@ float Item_GiveTo(entity item, entity player) // AnnounceTo(player, "ammo"); if (item.weapons & WEPBIT_MINSTANEX) - W_GiveWeapon (player, WEP_MINSTANEX, "Nex"); + W_GiveWeapon (player, WEP_MINSTANEX, item.netname); if (item.ammo_cells) player.ammo_cells = min (player.ammo_cells + cvar("g_minstagib_ammo_drop"), 999); player.health = 100; @@ -303,7 +308,7 @@ float Item_GiveTo(entity item, entity player) pickedup = TRUE; // sound not available // AnnounceTo(player, "_lives"); - player.armorvalue = player.armorvalue + cvar("g_minstagib_extralives"); + player.armorvalue = min(player.armorvalue + cvar("g_minstagib_extralives"), 999); sprint(player, "^3You picked up some extra lives\n"); } @@ -326,7 +331,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); @@ -365,31 +370,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); @@ -398,7 +403,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) @@ -484,6 +489,8 @@ void Item_Touch (void) if(!Item_GiveTo(self, other)) return; + other.last_pickup = time; + pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1); if (self.classname == "droppedweapon") @@ -713,9 +720,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, return; } - itemid = self.items; - weaponid = self.weapons; - self.reset = Item_Reset; // it's a level item if(self.spawnflags & 1) @@ -798,8 +802,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, self.is_item = TRUE; } - weaponsInMap |= weaponid; - if(g_lms || g_ca) { startitem_failed = TRUE; @@ -829,17 +831,20 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, return; } + weaponsInMap |= weaponid; + precache_model (itemmodel); precache_sound (pickupsound); - precache_sound ("misc/itemrespawn.wav"); - precache_sound ("misc/itemrespawncountdown.wav"); - if(itemid == IT_STRENGTH) + precache_sound ("misc/itemrespawncountdown.wav"); + if(!g_minstagib && itemid == IT_STRENGTH) precache_sound ("misc/strength_respawn.wav"); - if(itemid == IT_INVINCIBLE) + else if(!g_minstagib && itemid == IT_INVINCIBLE) precache_sound ("misc/shield_respawn.wav"); + else + precache_sound ("misc/itemrespawn.wav"); - if((itemid & (IT_STRENGTH | IT_INVINCIBLE | IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2)) || (weaponid & WEPBIT_ALL)) + if((itemflags & (FL_POWERUP | FL_WEAPON)) || (itemid & (IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2))) self.target = "###item###"; // for finding the nearest item using find() } @@ -893,16 +898,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, */ void minstagib_items (float itemid) { - // we don't want to replace dropped weapons ;) - if (self.classname == "droppedweapon") - { - self.ammo_cells = 25; - StartItem ("models/weapons/g_nex.md3", - "weapons/weaponpickup.wav", 15, 0, - "MinstaNex", 0, WEPBIT_MINSTANEX, FL_WEAPON, generic_pickupevalfunc, 1000); - return; - } - local float rnd; self.classname = "minstagib"; @@ -912,7 +907,7 @@ void minstagib_items (float itemid) self.ammo_cells = 1; StartItem ("models/items/a_cells.md3", "misc/itempickup.wav", 45, 0, - "Nex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100); + "MinstaNex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100); return; } @@ -940,7 +935,6 @@ void minstagib_items (float itemid) StartItem ("models/items/g_h100.md3", "misc/megahealth.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Extralife", IT_NAILS, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_HIGH); - } // replace with speed if (itemid == IT_INVINCIBLE) @@ -950,7 +944,6 @@ void minstagib_items (float itemid) "misc/powerup_shield.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Speed", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_MID); } - } float minst_no_auto_cells; @@ -1061,7 +1054,7 @@ void weapon_defaultspawnfunc(float wpn) { ammofield = Item_CounterField(j); if(!self.ammofield) - self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(j))); + self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(j), "_weapon")); } } } @@ -1138,7 +1131,7 @@ void spawnfunc_weapon_rocketlauncher (void) { if (g_minstagib) { - minstagib_items(IT_CELLS); + minstagib_items(IT_CELLS); // replace rocketlauncher with cells self.think = minst_remove_item; self.nextthink = time; return; @@ -1149,6 +1142,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); } @@ -1166,12 +1161,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); } @@ -1188,6 +1187,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); } @@ -1198,7 +1199,7 @@ void spawnfunc_item_armor_small (void) { 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); + StartItem ("models/items/item_armor_small.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); } void spawnfunc_item_armor_medium (void) { @@ -1208,7 +1209,7 @@ void spawnfunc_item_armor_medium (void) { 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); + StartItem ("models/items/item_armor_medium.md3", "misc/armor10.wav", g_pickup_respawntime_medium, g_pickup_respawntimejitter_medium, "25 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID); } void spawnfunc_item_armor_big (void) { @@ -1218,7 +1219,7 @@ void spawnfunc_item_armor_big (void) { 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); + StartItem ("models/items/item_armor_big.md3", "misc/armor17_5.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "50 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, 20000); } void spawnfunc_item_armor_large (void) { @@ -1228,7 +1229,7 @@ void spawnfunc_item_armor_large (void) { 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); + StartItem ("models/items/item_armor_large.md3", "misc/armor25.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "100 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH); } void spawnfunc_item_health_small (void) { @@ -1368,9 +1369,6 @@ void spawnfunc_target_items (void) if(!self.invincible_finished) self.invincible_finished = cvar("g_balance_powerup_invincible_time"); - precache_sound("misc/itempickup.wav"); - precache_sound("misc/itempickup.wav"); - precache_sound("misc/itempickup.wav"); precache_sound("misc/itempickup.wav"); precache_sound("misc/megahealth.wav"); precache_sound("misc/armor25.wav"); @@ -1477,6 +1475,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); } @@ -1764,6 +1764,12 @@ float GiveItems(entity e, float beginarg, float endarg) POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, cvar("g_balance_pause_armor_rot"), pauseregen_finished, cvar("g_balance_pause_health_regen"), "misc/armor25.wav", string_null); POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, cvar("g_balance_pause_health_rot"), pauseregen_finished, cvar("g_balance_pause_health_regen"), "misc/megahealth.wav", string_null); + if (g_minstagib) + { + e.health = bound(0, e.health, 100); + e.armorvalue = bound(0, e.armorvalue, 999); + } + if(e.strength_finished <= 0) e.strength_finished = 0; else