]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/t_items.qc
g_pickup_<ammotype>_weapon: the amount of that ammo type you get for picking up a...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / t_items.qc
index cb8f0b1025bd204260b6ea396918afad7e890268..07cc60223e4740926ee3b0dccae354498b41a19b 100644 (file)
@@ -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");
                        }
 
@@ -713,9 +718,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 +800,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 +829,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 +896,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 +905,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 +933,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 +942,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 +1052,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 +1129,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;
@@ -1206,7 +1197,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) {
@@ -1216,7 +1207,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) {
@@ -1226,7 +1217,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) {
@@ -1236,7 +1227,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) {
@@ -1376,9 +1367,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");
@@ -1774,6 +1762,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