public static void G_SetStats(edict_t ent) { gitem_t item; int index, cells = 0; int power_armor_type; ent.client.ps.stats[Defines.STAT_HEALTH_ICON] = (short)GameBase.level.pic_health; ent.client.ps.stats[Defines.STAT_HEALTH] = (short)ent.health; if (0 == ent.client.ammo_index) { ent.client.ps.stats[Defines.STAT_AMMO_ICON] = 0; ent.client.ps.stats[Defines.STAT_AMMO] = 0; } else { item = GameItemList.itemlist[ent.client.ammo_index]; ent.client.ps.stats[Defines.STAT_AMMO_ICON] = (short)GameBase.gi.Imageindex(item.icon); ent.client.ps.stats[Defines.STAT_AMMO] = (short)ent.client.pers.inventory[ent.client.ammo_index]; } power_armor_type = GameItems.PowerArmorType(ent); if (power_armor_type != 0) { cells = ent.client.pers.inventory[GameItems.ITEM_INDEX(GameItems.FindItem("cells"))]; if (cells == 0) { ent.flags &= ~Defines.FL_POWER_ARMOR; GameBase.gi.Sound(ent, Defines.CHAN_ITEM, GameBase.gi.Soundindex("misc/power2.wav"), 1, Defines.ATTN_NORM, 0); power_armor_type = 0; } } index = GameItems.ArmorIndex(ent); if (power_armor_type != 0 && (0 == index || 0 != (GameBase.level.framenum & 8))) { ent.client.ps.stats[Defines.STAT_ARMOR_ICON] = (short)GameBase.gi.Imageindex("i_powershield"); ent.client.ps.stats[Defines.STAT_ARMOR] = (short)cells; } else if (index != 0) { item = GameItems.GetItemByIndex(index); ent.client.ps.stats[Defines.STAT_ARMOR_ICON] = (short)GameBase.gi.Imageindex(item.icon); ent.client.ps.stats[Defines.STAT_ARMOR] = (short)ent.client.pers.inventory[index]; } else { ent.client.ps.stats[Defines.STAT_ARMOR_ICON] = 0; ent.client.ps.stats[Defines.STAT_ARMOR] = 0; } if (GameBase.level.time > ent.client.pickup_msg_time) { ent.client.ps.stats[Defines.STAT_PICKUP_ICON] = 0; ent.client.ps.stats[Defines.STAT_PICKUP_STRING] = 0; } if (ent.client.quad_framenum > GameBase.level.framenum) { ent.client.ps.stats[Defines.STAT_TIMER_ICON] = (short)GameBase.gi.Imageindex("p_quad"); ent.client.ps.stats[Defines.STAT_TIMER] = (short)((ent.client.quad_framenum - GameBase.level.framenum) / 10); } else if (ent.client.invincible_framenum > GameBase.level.framenum) { ent.client.ps.stats[Defines.STAT_TIMER_ICON] = (short)GameBase.gi.Imageindex("p_invulnerability"); ent.client.ps.stats[Defines.STAT_TIMER] = (short)((ent.client.invincible_framenum - GameBase.level.framenum) / 10); } else if (ent.client.enviro_framenum > GameBase.level.framenum) { ent.client.ps.stats[Defines.STAT_TIMER_ICON] = (short)GameBase.gi.Imageindex("p_envirosuit"); ent.client.ps.stats[Defines.STAT_TIMER] = (short)((ent.client.enviro_framenum - GameBase.level.framenum) / 10); } else if (ent.client.breather_framenum > GameBase.level.framenum) { ent.client.ps.stats[Defines.STAT_TIMER_ICON] = (short)GameBase.gi.Imageindex("p_rebreather"); ent.client.ps.stats[Defines.STAT_TIMER] = (short)((ent.client.breather_framenum - GameBase.level.framenum) / 10); } else { ent.client.ps.stats[Defines.STAT_TIMER_ICON] = 0; ent.client.ps.stats[Defines.STAT_TIMER] = 0; } if (ent.client.pers.selected_item <= 0) { ent.client.ps.stats[Defines.STAT_SELECTED_ICON] = 0; } else { ent.client.ps.stats[Defines.STAT_SELECTED_ICON] = (short)GameBase.gi.Imageindex(GameItemList.itemlist[ent.client.pers.selected_item].icon); } ent.client.ps.stats[Defines.STAT_SELECTED_ITEM] = (short)ent.client.pers.selected_item; ent.client.ps.stats[Defines.STAT_LAYOUTS] = 0; if (GameBase.deathmatch.value != 0) { if (ent.client.pers.health <= 0 || GameBase.level.intermissiontime != 0 || ent.client.showscores) { ent.client.ps.stats[Defines.STAT_LAYOUTS] |= 1; } if (ent.client.showinventory && ent.client.pers.health > 0) { ent.client.ps.stats[Defines.STAT_LAYOUTS] |= 2; } } else { if (ent.client.showscores || ent.client.showhelp) { ent.client.ps.stats[Defines.STAT_LAYOUTS] |= 1; } if (ent.client.showinventory && ent.client.pers.health > 0) { ent.client.ps.stats[Defines.STAT_LAYOUTS] |= 2; } } ent.client.ps.stats[Defines.STAT_FRAGS] = (short)ent.client.resp.score; if (ent.client.pers.helpchanged != 0 && (GameBase.level.framenum & 8) != 0) { ent.client.ps.stats[Defines.STAT_HELPICON] = (short)GameBase.gi.Imageindex("i_help"); } else if ((ent.client.pers.hand == Defines.CENTER_HANDED || ent.client.ps.fov > 91) && ent.client.pers.weapon != null) { ent.client.ps.stats[Defines.STAT_HELPICON] = (short)GameBase.gi.Imageindex(ent.client.pers.weapon.icon); } else { ent.client.ps.stats[Defines.STAT_HELPICON] = 0; } ent.client.ps.stats[Defines.STAT_SPECTATOR] = 0; }
public override void Use(edict_t self, edict_t other, edict_t activator) { int index; if (self.item == null) { return; } if (activator.client == null) { return; } index = GameItems.ITEM_INDEX(self.item); if (activator.client.pers.inventory[index] == 0) { if (GameBase.level.time < self.touch_debounce_time) { return; } self.touch_debounce_time = GameBase.level.time + 5F; GameBase.gi.Centerprintf(activator, "You need the " + self.item.pickup_name); GameBase.gi.Sound(activator, Defines.CHAN_AUTO, GameBase.gi.Soundindex("misc/keytry.wav"), 1, Defines.ATTN_NORM, 0); return; } GameBase.gi.Sound(activator, Defines.CHAN_AUTO, GameBase.gi.Soundindex("misc/keyuse.wav"), 1, Defines.ATTN_NORM, 0); if (GameBase.coop.value != 0) { int player; edict_t ent; if (Lib.Strcmp(self.item.classname, "key_power_cube") == 0) { int cube; for (cube = 0; cube < 8; cube++) { if ((activator.client.pers.power_cubes & (1 << cube)) != 0) { break; } } for (player = 1; player <= GameBase.game.maxclients; player++) { ent = GameBase.g_edicts[player]; if (!ent.inuse) { continue; } if (null == ent.client) { continue; } if ((ent.client.pers.power_cubes & (1 << cube)) != 0) { ent.client.pers.inventory[index]--; ent.client.pers.power_cubes &= ~(1 << cube); } } } else { for (player = 1; player <= GameBase.game.maxclients; player++) { ent = GameBase.g_edicts[player]; if (!ent.inuse) { continue; } if (ent.client == null) { continue; } ent.client.pers.inventory[index] = 0; } } } else { activator.client.pers.inventory[index]--; } GameUtil.G_UseTargets(self, activator); self.use = null; }
static int CheckPowerArmor(edict_t ent, float[] point, float[] normal, int damage, int dflags) { gclient_t client; int save; int power_armor_type; int index = 0; int damagePerCell; int pa_te_type; int power = 0; int power_used; if (damage == 0) { return(0); } client = ent.client; if ((dflags & Defines.DAMAGE_NO_ARMOR) != 0) { return(0); } if (client != null) { power_armor_type = GameItems.PowerArmorType(ent); if (power_armor_type != Defines.POWER_ARMOR_NONE) { index = GameItems.ITEM_INDEX(GameItems.FindItem("Cells")); power = client.pers.inventory[index]; } } else if ((ent.svflags & Defines.SVF_MONSTER) != 0) { power_armor_type = ent.monsterinfo.power_armor_type; power = ent.monsterinfo.power_armor_power; } else { return(0); } if (power_armor_type == Defines.POWER_ARMOR_NONE) { return(0); } if (power == 0) { return(0); } if (power_armor_type == Defines.POWER_ARMOR_SCREEN) { float[] vec = new float[] { 0, 0, 0 }; float dot; float[] forward = new float[] { 0, 0, 0 }; Math3D.AngleVectors(ent.s.angles, forward, null, null); Math3D.VectorSubtract(point, ent.s.origin, vec); Math3D.VectorNormalize(vec); dot = Math3D.DotProduct(vec, forward); if (dot <= 0.3) { return(0); } damagePerCell = 1; pa_te_type = Defines.TE_SCREEN_SPARKS; damage = damage / 3; } else { damagePerCell = 2; pa_te_type = Defines.TE_SHIELD_SPARKS; damage = (2 * damage) / 3; } save = power * damagePerCell; if (save == 0) { return(0); } if (save > damage) { save = damage; } SpawnDamage(pa_te_type, point, normal, save); ent.powerarmor_time = GameBase.level.time + 0.2F; power_used = save / damagePerCell; if (client != null) { client.pers.inventory[index] -= power_used; } else { ent.monsterinfo.power_armor_power -= power_used; } return(save); }