From: terencehill Date: Thu, 5 Jul 2012 19:57:44 +0000 (+0200) Subject: Merge branch 'master' into terencehill/itemstime X-Git-Tag: xonotic-v0.8.1~12^2~34 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2e8d8e34f5654af82145fc687faaf9c1ce54fe34;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into terencehill/itemstime --- 2e8d8e34f5654af82145fc687faaf9c1ce54fe34 diff --cc qcsrc/server/defs.qh index d279647f4,2391f37ae..395603369 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@@ -669,3 -657,20 +669,20 @@@ typedef vector(entity player, entity sp .entity conveyor; string modname; + + .float missile_flags; + #define MIF_SPLASH 2 + #define MIF_ARC 4 + #define MIF_PROXY 8 + #define MIF_GUIDED_MANUAL 16 + #define MIF_GUIDED_HEAT 32 + #define MIF_GUIDED_LASER 64 + #define MIF_GUIDED_AI 128 + #define MIF_GUIDED_TAG 128 + #define MIF_GUIDED_ALL (MIF_GUIDED_MANUAL | MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG) + #define MIF_GUIDED_TRACKING (MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG) + #define MIF_GUIDED_CONFUSABLE (MIF_GUIDED_HEAT | MIF_GUIDED_AI) + + #define MISSILE_IS_CONFUSABLE(m) ((m.missile_flags & MIF_GUIDED_CONFUSABLE) ? TRUE : FALSE) + #define MISSILE_IS_GUIDED(m) ((m.missile_flags & MIF_GUIDED_ALL) ? TRUE : FALSE) -#define MISSILE_IS_TRACKING(m) ((m.missile_flags & MIF_GUIDED_TRACKING) ? TRUE : FALSE) ++#define MISSILE_IS_TRACKING(m) ((m.missile_flags & MIF_GUIDED_TRACKING) ? TRUE : FALSE) diff --cc qcsrc/server/t_items.qc index a69c70490,2e7b9bfba..e90055b27 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@@ -177,161 -394,11 +394,162 @@@ void Item_Show (entity e, float mode // relink entity (because solid may have changed) setorigin(e, e.origin); + e.SendFlags |= ISF_STATUS; } +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_Reset() +{ + 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_ResetForPlayer(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_Get(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; +} +float Item_ItemsTime_UpdateTime_Check(float item_time, float t) +{ + if(t == 0 && item_time == -1) + return TRUE; + if(time < t && (item_time <= time || t < item_time)) + return TRUE; + return FALSE; +} +void Item_ItemsTime_UpdateTime(entity e, float t) +{ + if(g_minstagib) + { + switch(e.items) + { + case IT_STRENGTH://"item-invis" + if(Item_ItemsTime_UpdateTime_Check(it_invisible_time, t)) + it_invisible_time = t; + break; + case IT_NAILS://"item-extralife" + if(Item_ItemsTime_UpdateTime_Check(it_extralife_time, t)) + it_extralife_time = t; + break; + case IT_INVINCIBLE://"item-speed" + if(Item_ItemsTime_UpdateTime_Check(it_speed_time, t)) + it_speed_time = t; + break; + } + } + else + { + switch(e.items) + { + case IT_HEALTH: + //if (e.classname == "item_health_mega") + if(Item_ItemsTime_UpdateTime_Check(it_health_mega_time, t)) + it_health_mega_time = t; + break; + case IT_ARMOR: + if (e.classname == "item_armor_large") + if(Item_ItemsTime_UpdateTime_Check(it_armor_large_time, t)) + it_armor_large_time = t; + break; + case IT_STRENGTH://"item-strength" + if(Item_ItemsTime_UpdateTime_Check(it_strength_time, t)) + it_strength_time = t; + break; + case IT_INVINCIBLE://"item-shield" + if(Item_ItemsTime_UpdateTime_Check(it_shield_time, t)) + it_shield_time = t; + break; + default: + if(WEPSET_CONTAINS_ANY_EA(e, WEPBIT_SUPERWEAPONS)) + if(Item_ItemsTime_UpdateTime_Check(it_superweapons_time, t)) + it_superweapons_time = t; + } + } + switch(e.items) + { + case IT_FUEL_REGEN://"item-fuelregen" + if(Item_ItemsTime_UpdateTime_Check(it_fuelregen_time, t)) + it_fuelregen_time = t; + break; + case IT_JETPACK://"item-jetpack" + if(Item_ItemsTime_UpdateTime_Check(it_jetpack_time, t)) + it_jetpack_time = t; + break; + } +} +void Item_ItemsTime_GetForAll() +{ + entity e; + if(inWarmupStage) + { + FOR_EACH_REALCLIENT(e) + Item_ItemsTime_Get(e); + } + else + { + FOR_EACH_REALCLIENT(e) + { + if (e.classname != "player") + Item_ItemsTime_Get(e); + } + } +} + void Item_Respawn (void) { + float t; + entity head; Item_Show(self, 1); if(!g_minstagib && self.items == IT_STRENGTH) sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound