]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/t_items.qc
Merge remote-tracking branch 'origin/master' into Mario/lms_updates
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / t_items.qc
index 13850fcad055312f452f0af2e755b74d19b3ef3b..40abd18b135fe920265d197357927a458308f990 100644 (file)
@@ -282,8 +282,6 @@ float have_pickup_item(void)
                        return TRUE;
                if(autocvar_g_powerups == 0)
                        return FALSE;
-               if(g_lms)
-                       return FALSE;
                if(g_ca)
                        return FALSE;
                if(g_arena)
@@ -295,8 +293,6 @@ float have_pickup_item(void)
                        return TRUE;
                if(autocvar_g_pickup_items == 0)
                        return FALSE;
-               if(g_lms)
-                       return FALSE;
                if(g_ca)
                        return FALSE;
                if(g_weaponarena)
@@ -330,6 +326,10 @@ floatfield Item_CounterField(float it)
                // add more things here (health, armor)
                default:             error("requested item has no counter field");
        }
+#ifdef GMQCC
+       // should never happen
+       return health;
+#endif
 }
 
 string Item_CounterFieldName(float it)
@@ -345,6 +345,10 @@ string Item_CounterFieldName(float it)
                // add more things here (health, armor)
                default:             error("requested item has no counter field name");
        }
+#ifdef GMQCC
+       // should never happen
+       return string_null;
+#endif
 }
 
 .float max_armorvalue;
@@ -496,17 +500,17 @@ void Item_RespawnCountdown (void)
                                        rgb = '1 0 0';
                                }
                        }
-                       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);
                                if(self.waypointsprite_attached)
                                        WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
                        }
+                       else
+                       {
+                               print("Unknown powerup-marked item is wanting to respawn\n");
+                               localcmd(sprintf("prvm_edict server %d\n", num_for_edict(self)));
+                       }
                }
                sound (self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
                if(self.waypointsprite_attached)
@@ -622,16 +626,16 @@ float Item_GiveTo(entity item, entity player)
                        if (clienttype(player) == CLIENTTYPE_REAL)
                        {
                                if(player.health <= 5)
-                                       AnnounceTo(player, "lastsecond");
+                                       Send_Notification(NOTIF_ONE, player, MSG_ANNCE, ANNCE_MINSTAGIB_LASTSECOND);
                                else if(player.health < 50)
-                                       AnnounceTo(player, "narrowly");
+                                       Send_Notification(NOTIF_ONE, player, MSG_ANNCE, ANNCE_MINSTAGIB_NARROWLY);
                        }
                        // sound not available
                        // else if(item.items == IT_CELLS)
                        //      AnnounceTo(player, "ammo");
 
                        if (WEPSET_CONTAINS_EW(item, WEP_MINSTANEX))
-                               W_GiveWeapon (player, WEP_MINSTANEX, item.netname);
+                               W_GiveWeapon (player, WEP_MINSTANEX);
                        player.health = 100;
                }
 
@@ -649,7 +653,7 @@ float Item_GiveTo(entity item, entity player)
                        // sound not available
                        // AnnounceTo(player, "_lives");
                        player.armorvalue = bound(player.armorvalue, 999, player.armorvalue + autocvar_g_minstagib_extralives);
-                       sprint(player, "^3You picked up some extra lives\n");
+                       Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_EXTRALIVES);
                }
 
                // invis powerup
@@ -667,7 +671,7 @@ float Item_GiveTo(entity item, entity player)
                        pickedup = TRUE;
                        // sound not available
                        // AnnounceTo(player, "speed");
-                       player.invincible_finished = max(player.invincible_finished, time) + autocvar_g_balance_powerup_strength_time;
+                       player.invincible_finished = max(player.invincible_finished, time) + autocvar_g_balance_powerup_invincible_time;
                }
        }
        else
@@ -701,7 +705,7 @@ float Item_GiveTo(entity item, entity player)
                                pickedup = TRUE;
                                for(i = WEP_FIRST; i <= WEP_LAST; ++i)
                                        if(WEPSET_CONTAINS_AW(it, i))
-                                               W_GiveWeapon (player, i, item.netname);
+                                               W_GiveWeapon(player, i);
                        }
                }
 
@@ -747,7 +751,7 @@ float Item_GiveTo(entity item, entity player)
 void Item_Touch (void)
 {
        entity e, head;
-
+       
        // remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky)
        if(self.classname == "droppedweapon")
        {
@@ -766,6 +770,8 @@ void Item_Touch (void)
                return;
        if (self.owner == other)
                return;
+       if(MUTATOR_CALLHOOK(ItemTouch))
+               return;
 
        if (self.classname == "droppedweapon")
        {
@@ -824,7 +830,7 @@ void Item_Reset()
 
        if(self.classname != "droppedweapon")
        {
-               self.think = SUB_Null;
+               self.think = func_null;
                self.nextthink = 0;
 
                if(self.waypointsprite_attached)
@@ -1204,6 +1210,14 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
                Item_Reset();
         
     Net_LinkEntity(self, FALSE, 0, ItemSend);
+
+       // call this hook after everything else has been done
+       if(MUTATOR_CALLHOOK(Item_Spawn))
+       {
+               startitem_failed = TRUE;
+               remove(self);
+               return;
+       }
 }
 
 /* replace items in minstagib
@@ -1754,7 +1768,13 @@ void spawnfunc_target_items (void)
                        valueprefix = "max ";
                }
                else
+               {
                        error("invalid spawnflags");
+#ifdef GMQCC
+                       itemprefix = string_null;
+                       valueprefix = string_null;
+#endif
+               }
 
                self.netname = "";
                self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_UNLIMITED_WEAPON_AMMO), "unlimited_weapon_ammo");