X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_items.qc;h=392c05ce14f3e9b9ac0671b662e510adf34393fd;hb=a4aa85e0876a9581bf6b0ff4b9198d82e600999c;hp=0a3d756b74b357229311ad15de684f11a1567d42;hpb=c9de9b0667ab2e583b35316b561d61fcda72bd1b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index 0a3d756b7..392c05ce1 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -19,13 +19,11 @@ var float autocvar_cl_animate_items = 1; var float autocvar_cl_ghost_items = 0.45; var vector autocvar_cl_ghost_items_color = '-1 -1 -1'; -float autocvar_cl_fullbright_items; -vector autocvar_cl_weapon_stay_color = '2 0.5 0.5'; -float autocvar_cl_weapon_stay_alpha = 0.75; -float autocvar_cl_simple_items = 0; -float cl_simple_items; -float cl_ghost_items_alpha; - +var float autocvar_cl_fullbright_items = 0; +var vector autocvar_cl_weapon_stay_color = '2 0.5 0.5'; +var float autocvar_cl_weapon_stay_alpha = 0.75; +var float autocvar_cl_simple_items = 0; +var string autocvr_cl_simpleitems_postfix = "_simple"; .float spawntime; .float gravity; .vector colormod; @@ -76,22 +74,8 @@ void ItemDrawSimple() } } -float csqcitems_started; // remove this after a release or two -void csqcitems_start() -{ - if(autocvar_cl_ghost_items == 1) - cl_ghost_items_alpha = 0.55; - else - cl_ghost_items_alpha = bound(0, autocvar_cl_ghost_items, 1); - - csqcitems_started = TRUE; -} - void ItemRead(float _IsNew) { - if(!csqcitems_started) - csqcitems_start(); - float sf = ReadByte(); if(sf & ISF_LOCATION) @@ -122,7 +106,7 @@ void ItemRead(float _IsNew) } else { - if (cl_ghost_items_alpha) + if (autocvar_cl_ghost_items_color) { self.alpha = autocvar_cl_ghost_items; self.colormod = self.glowmod = autocvar_cl_ghost_items_color; @@ -163,19 +147,21 @@ void ItemRead(float _IsNew) self.mdl = ""; string _fn = ReadString(); - if(cl_simple_items && (self.ItemStatus & ITS_ALLOWSI)) + if(autocvar_cl_simple_items && (self.ItemStatus & ITS_ALLOWSI)) { string _fn2 = substring(_fn, 0 , strlen(_fn) -4); self.draw = ItemDrawSimple; - if(fexists(strcat(_fn2, "_simple.md3"))) - self.mdl = strzone(strcat(_fn2, "_simple.md3")); - else if(fexists(strcat(_fn2, "_simple.dpm"))) - self.mdl = strzone(strcat(_fn2, "_simple.dpm")); - else if(fexists(strcat(_fn2, "_simple.iqm"))) - self.mdl = strzone(strcat(_fn2, "_simple.iqm")); - else if(fexists(strcat(_fn2, "_simple.obj"))) - self.mdl = strzone(strcat(_fn2, "_simple.obj")); + + + if(fexists(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix))) + self.mdl = strzone(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix)); + else if(fexists(sprintf("%s%s.dpm", _fn2, autocvr_cl_simpleitems_postfix))) + self.mdl = strzone(sprintf("%s%s.dpm", _fn2, autocvr_cl_simpleitems_postfix)); + else if(fexists(sprintf("%s%s.iqm", _fn2, autocvr_cl_simpleitems_postfix))) + self.mdl = strzone(sprintf("%s%s.iqm", _fn2, autocvr_cl_simpleitems_postfix)); + else if(fexists(sprintf("%s%s.obj", _fn2, autocvr_cl_simpleitems_postfix))) + self.mdl = strzone(sprintf("%s%s.obj", _fn2, autocvr_cl_simpleitems_postfix)); else { self.draw = ItemDraw; @@ -344,6 +330,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) @@ -359,6 +349,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; @@ -510,17 +504,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) @@ -636,16 +630,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; } @@ -681,7 +675,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 @@ -715,7 +709,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); } } @@ -761,7 +755,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") { @@ -780,6 +774,8 @@ void Item_Touch (void) return; if (self.owner == other) return; + if(MUTATOR_CALLHOOK(ItemTouch)) + return; if (self.classname == "droppedweapon") { @@ -838,7 +834,7 @@ void Item_Reset() if(self.classname != "droppedweapon") { - self.think = SUB_Null; + self.think = func_null; self.nextthink = 0; if(self.waypointsprite_attached) @@ -1218,6 +1214,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 @@ -1768,7 +1772,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");