self.mdl = strzone(sprintf("%s%s.dpm", _fn2, autocvar_cl_simpleitems_postfix));
else if(fexists(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix)))
self.mdl = strzone(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix));
- else if(fexists(sprintf("%s%s.obj", _fn2, autocvar_cl_simpleitems_postfix)))
- self.mdl = strzone(sprintf("%s%s.obj", _fn2, autocvar_cl_simpleitems_postfix));
+ else if(fexists(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix)))
+ self.mdl = strzone(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix));
else
{
self.draw = ItemDraw;
- dprint("Simple item requested for ", _fn, " but no model exsist for it\n");
+ dprint("Simple item requested for ", _fn, " but no model exists for it\n");
}
}
}
}
-float it_armor_large_time;
-float it_health_mega_time;
-float it_invisible_time;
-float it_speed_time;
-float it_extralife_time;
-float it_strength_time;
-float it_shield_time;
-float it_fuelregen_time;
-float it_jetpack_time;
-float it_superweapons_time;
-
-void Item_ItemsTime_Init()
-{
- it_armor_large_time = -1;
- it_health_mega_time = -1;
- it_invisible_time = -1;
- it_speed_time = -1;
- it_extralife_time = -1;
- it_strength_time = -1;
- it_shield_time = -1;
- it_fuelregen_time = -1;
- it_jetpack_time = -1;
- it_superweapons_time = -1;
-}
-void Item_ItemsTime_ResetTimes()
-{
- it_armor_large_time = (it_armor_large_time == -1) ? -1 : 0;
- it_health_mega_time = (it_health_mega_time == -1) ? -1 : 0;
- it_invisible_time = (it_invisible_time == -1) ? -1 : 0;
- it_speed_time = (it_speed_time == -1) ? -1 : 0;
- it_extralife_time = (it_extralife_time == -1) ? -1 : 0;
- it_strength_time = (it_strength_time == -1) ? -1 : 0;
- it_shield_time = (it_shield_time == -1) ? -1 : 0;
- it_fuelregen_time = (it_fuelregen_time == -1) ? -1 : 0;
- it_jetpack_time = (it_jetpack_time == -1) ? -1 : 0;
- it_superweapons_time= (it_superweapons_time== -1) ? -1 : 0;
-}
-void Item_ItemsTime_ResetTimesForPlayer(entity e)
-{
- e.item_armor_large_time = (it_armor_large_time == -1) ? -1 : 0;
- e.item_health_mega_time = (it_health_mega_time == -1) ? -1 : 0;
- e.item_invisible_time = (it_invisible_time == -1) ? -1 : 0;
- e.item_speed_time = (it_speed_time == -1) ? -1 : 0;
- e.item_extralife_time = (it_extralife_time == -1) ? -1 : 0;
- e.item_strength_time = (it_strength_time == -1) ? -1 : 0;
- e.item_shield_time = (it_shield_time == -1) ? -1 : 0;
- e.item_fuelregen_time = (it_fuelregen_time == -1) ? -1 : 0;
- e.item_jetpack_time = (it_jetpack_time == -1) ? -1 : 0;
- e.item_superweapons_time= (it_superweapons_time== -1) ? -1 : 0;
-}
-void Item_ItemsTime_SetTimesForPlayer(entity e)
-{
- e.item_armor_large_time = it_armor_large_time;
- e.item_health_mega_time = it_health_mega_time;
- e.item_invisible_time = it_invisible_time;
- e.item_speed_time = it_speed_time;
- e.item_extralife_time = it_extralife_time;
- e.item_strength_time = it_strength_time;
- e.item_shield_time = it_shield_time;
- e.item_fuelregen_time = it_fuelregen_time;
- e.item_jetpack_time = it_jetpack_time;
- e.item_superweapons_time = it_superweapons_time;
-}
-
-void Item_ItemsTime_SetTime(entity e, float t)
-{
- if(!autocvar_sv_itemstime)
- return;
-
- if(g_instagib)
- {
- switch(e.items)
- {
- case IT_STRENGTH://"item-invis"
- it_invisible_time = t;
- break;
- case IT_NAILS://"item-extralife"
- it_extralife_time = t;
- break;
- case IT_INVINCIBLE://"item-speed"
- it_speed_time = t;
- break;
- }
- }
- else
- {
- switch(e.items)
- {
- case IT_HEALTH:
- // if(e.itemdef == ITEM_MegaHealth) // e.items == IT_HEALTH unequivocally identifies it
- it_health_mega_time = t;
- break;
- case IT_ARMOR:
- if(e.itemdef == ITEM_ArmorLarge) // e.items == IT_ARMOR doesn't unequivocally identifies it
- it_armor_large_time = t;
- break;
- case IT_STRENGTH://"item-strength"
- it_strength_time = t;
- break;
- case IT_INVINCIBLE://"item-shield"
- it_shield_time = t;
- break;
- default:
- if(e.weapons & WEPSET_SUPERWEAPONS)
- it_superweapons_time = t;
- }
- }
- switch(e.items)
- {
- case IT_FUEL_REGEN://"item-fuelregen"
- it_fuelregen_time = t;
- break;
- case IT_JETPACK://"item-jetpack"
- it_jetpack_time = t;
- break;
- }
-}
-void Item_ItemsTime_SetTimesForAllPlayers()
-{
- entity e;
- if(warmup_stage)
- {
- FOR_EACH_REALCLIENT(e)
- Item_ItemsTime_SetTimesForPlayer(e);
- }
- else
- {
- FOR_EACH_REALCLIENT(e)
- {
- if(!IS_PLAYER(e))
- Item_ItemsTime_SetTimesForPlayer(e);
- }
- }
-}
-
-float Item_ItemsTime_UpdateTime(entity e, float t)
-{
- entity head;
- bool isavailable = (t == 0);
- if(e.weapons & WEPSET_SUPERWEAPONS)
- {
- for(head = world; (head = nextent(head)); )
- {
- if(clienttype(head) != CLIENTTYPE_NOTACLIENT || !(head.weapons & WEPSET_SUPERWEAPONS) || head.classname == "weapon_info")
- continue;
- if(e == head)
- continue;
-
- if(head.scheduledrespawntime <= time)
- isavailable = true;
- else if(t == 0 || head.scheduledrespawntime < t)
- t = head.scheduledrespawntime;
- }
- }
- else
- {
- for(head = world; (head = nextent(head)); )
- {
- if(head.itemdef != e.itemdef)
- continue;
- if(e == head)
- continue;
-
- if(head.scheduledrespawntime <= time)
- isavailable = true;
- else if(t == 0 || head.scheduledrespawntime < t)
- t = head.scheduledrespawntime;
- }
- }
- if(isavailable)
- t = -t; // let know the client there's another available item
- return t;
-}
+bool Item_ItemsTime_Allow(entity e);
+float Item_ItemsTime_UpdateTime(entity e, float t);
+void Item_ItemsTime_SetTime(entity e, float t);
+void Item_ItemsTime_SetTimesForAllPlayers();
void Item_Respawn (void)
{
sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
setorigin (self, self.origin);
- if(self.flags & FL_POWERUP || self.itemdef == ITEM_ArmorLarge || self.items == IT_HEALTH || (self.weapons & WEPSET_SUPERWEAPONS))
+ if (Item_ItemsTime_Allow(self))
{
float t = Item_ItemsTime_UpdateTime(self, 0);
Item_ItemsTime_SetTime(self, t);
self.count += 1;
if(self.count == 1)
{
- string name;
+ string name = string_null;
vector rgb = '1 0 1';
- name = string_null;
- switch (self.items)
- {
- case ITEM_JetpackRegen.m_itemid: name = "item-fuelregen"; rgb = '1 0.5 0'; break;
- case ITEM_Jetpack.m_itemid: name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break;
- case ITEM_Strength.m_itemid: name = "item-strength"; rgb = '0 0 1'; break;
- case ITEM_Shield.m_itemid: name = "item-shield"; rgb = '1 0 1'; break;
- case ITEM_HealthMega.m_itemid:
- //if (self.classname == "item_health_mega")
- {name = "item_health_mega"; rgb = '1 0 0';}
- break;
- case ITEM_ArmorMega.m_itemid:
- if (self.itemdef == ITEM_ArmorLarge)
- {name = "item_armor_large"; rgb = '0 1 0';}
- break;
- }
+ entity e = self.itemdef;
+ if (e) {
+ name = e.m_waypoint;
+ rgb = e.m_color;
+ }
MUTATOR_CALLHOOK(Item_RespawnCountdown, name, rgb);
name = item_name;
rgb = item_color;
void Item_ScheduleRespawnIn(entity e, float t)
{
- if((e.flags & FL_POWERUP) || (e.weapons & WEPSET_SUPERWEAPONS) || e.itemdef == ITEM_ArmorLarge || e.items == IT_HEALTH)
+ if (Item_ItemsTime_Allow(e))
{
e.think = Item_RespawnCountdown;
e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
}
}
+string Item_Model(string item_mdl)
+{
+ string output = strcat("models/items/", item_mdl);
+ MUTATOR_CALLHOOK(ItemModel, item_mdl, output);
+ return strzone(item_model_output);
+}
+
void StartItemA (entity a)
{
self.itemdef = a;
- StartItem(a.m_model, a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue);
+ StartItem(Item_Model(a.m_model), a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue);
}
void spawnfunc_item_rockets (void) {
precache_sound("misc/armor25.wav");
precache_sound("misc/powerup.wav");
precache_sound("misc/poweroff.wav");
- precache_sound("weapons/weaponpickup.wav");
+ precache_sound(W_Sound("weaponpickup"));
n = tokenize_console(self.netname);
if(argv(0) == "give")
wi = get_weaponinfo(j);
if(wi.weapon)
{
- POSTGIVE_WEAPON(e, j, "weapons/weaponpickup.wav", string_null);
+ POSTGIVE_WEAPON(e, j, W_Sound("weaponpickup"), string_null);
if (!(save_weapons & WepSet_FromWeapon(j)))
if(e.weapons & WepSet_FromWeapon(j))
WEP_ACTION(wi.weapon, WR_INIT);