public ModItemStat(float FlatBonus, float StackBonus, float MultBonus, StatIndex Stat) { m_BaseBonus = FlatBonus; m_StackBonus = StackBonus; m_BaseMultBonus = MultBonus; m_StackMultBonus = MultBonus; this.Stat = Stat; }
/// <summary> /// Get Multiplicative Bonus from Count /// </summary> /// <param name="Stat"></param> /// <param name="Count"></param> /// <returns></returns> public float GetMultStackBonusFromCount(StatIndex Stat, int Count) { ModItemStat s = m_StatList.Find(x => x.Stat == Stat); if (s != null) { return(s.GetPercentBonusFromCount(Count)); } return(0); }
/// <summary> /// Multiplicative bonus Per item after the first one /// </summary> /// <param name="Stat"></param> /// <returns></returns> public float MultStackBonus(StatIndex Stat) { ModItemStat s = m_StatList.Find(x => x.Stat == Stat); if (s != null) { return(s.MultStackBonus); } return(0); }
private void ClientData(QClientDataMessage msg, short entity) { StatIndex hpstat = (StatIndex)(100 + entity - 1); StatIndex wpstat = (StatIndex)(110 + entity - 1); StatIndex amstat = (StatIndex)(120 + entity - 1); State.Stats[hpstat] = msg.Health; State.Stats[wpstat] = msg.Weapon; State.Stats[amstat] = msg.Currentammo; }
static public float GetMultiplierForStat(CharacterBody c, StatIndex stat) { float value = 0; if (c.inventory) { foreach (KeyValuePair <int, ModItem> kv in ModItemDictionary) { if (ModItemDictionary.ContainsKey(kv.Key) && c.inventory.GetItemCount(kv.Key) > 0) { value += kv.Value.GetMultStackBonusFromCount(stat, c.inventory.GetItemCount(kv.Key)); } } } return(value); }
protected override void OnPaint(PaintEventArgs e) { if (Demos.Count < 1) { return; } g = e.Graphics; // update Zoom double width = FirstDemo.MaxX - FirstDemo.MinX + 40; double height = FirstDemo.MaxY - FirstDemo.MinY + 40; double xratio = ClientRectangle.Width / width; double yratio = ClientRectangle.Height / height; Zoom = xratio < yratio ? xratio : yratio; // draw bsp! if (Bsp != null) { foreach (var ed in Bsp.Edges) { var va = Bsp.Vertices[ed.A]; var vb = Bsp.Vertices[ed.B]; Point pa = Convert(va.X, va.Y); Point pb = Convert(vb.X, vb.Y); e.Graphics.DrawLine(Pens.Gray, pa, pb); } } int keyY = 10; foreach (ParsedDemo Demo in Demos) { // find closest state GameState state = Demo.States[0]; foreach (var pair in Demo.States) { if (pair.Key > Time) { break; } state = pair.Value; } // draw player key StatIndex hpstat = StatIndex.Player1HP; StatIndex wpstat = StatIndex.Player1Weapon; StatIndex amstat = StatIndex.Player1Ammo; int x = 10; foreach (Player pl in Demo.Players.Values) { if (pl.Netname == null) { break; } int windex = state.Stat(wpstat); string hptext = state.Stats.ContainsKey(hpstat) ? state.Stat(hpstat).ToString() : "?"; string wptext = Info.WeaponNames.ContainsKey(windex) ? Info.WeaponNames[windex] : "?"; string amtext = state.Stats.ContainsKey(amstat) ? state.Stat(amstat).ToString() : "?"; Entity ent = state.Entities[pl.Entity]; DrawPlayer(e.Graphics, ent, pl, new Rectangle(x, keyY, 10, 10)); e.Graphics.DrawString(pl.Netname, Font, Brushes.White, x + 12, keyY); e.Graphics.DrawString(hptext, Font, Brushes.White, x + 82, keyY); e.Graphics.DrawString(wptext, Font, Brushes.White, x + 102, keyY); e.Graphics.DrawString(amtext, Font, Brushes.White, x + 122, keyY); hpstat++; wpstat++; amstat++; keyY += 14; } // draw messages int y = ClientRectangle.Height - 10; y -= state.Messages.Count * 14; foreach (string msg in state.Messages) { e.Graphics.DrawString(msg, Font, Brushes.White, x, y); y += 14; } // draw counts x = ClientRectangle.Width - 100; y = ClientRectangle.Height - 24; e.Graphics.DrawString($"Kills: {state.Stat(StatIndex.KilledMonsters)} / {state.Stat(StatIndex.NumMonsters)}", Font, Brushes.White, x, y - 14); e.Graphics.DrawString($"Secrets: {state.Stat(StatIndex.FoundSecrets)} / {state.Stat(StatIndex.NumSecrets)}", Font, Brushes.White, x, y); // draw temps foreach (Temp t in state.Temps) { t.Draw(this); } // draw entities foreach (Entity ent in state.Entities.Values.Reverse()) { if (ent.Number == 0) { continue; } if (ent.Model[0] == '*') { continue; } if (ent.Model == "?") { continue; } ModelInfo minf = Info.GetModelInfo(ent.Model, ent.Skin); if (minf.Type == ModelType.Player) { Player pl = Demo.GetPlayer((byte)(ent.Number - 1)); DrawPlayer(e.Graphics, ent, pl); DrawAngle(e.Graphics, ent); continue; } if (minf.DeadFrames.Contains(ent.Frame)) { Cross(ent.Origin, Color.DarkRed, minf.Size / 2); continue; } Rectangle rect = GetDrawRect(ent, minf.Size); e.Graphics.FillRectangle(minf.Background, rect); if (minf.Type == ModelType.Enemy) { DrawAngle(e.Graphics, ent); } if (minf.Label != null) { SizeF size = e.Graphics.MeasureString(minf.Label, Font); float lx = rect.Left + rect.Width / 2 - size.Width / 2; float ly = rect.Top + rect.Height / 2 - size.Height / 2; e.Graphics.DrawString(minf.Label, Font, minf.Foreground, lx, ly); } } } }
public float GetStat(Stats stat, StatIndex index) { return(m_cache[(int)StatsOffset.Stats + ((int)stat - 1) * (int)StatIndex.Length + (int)index]); }
public int Stat(StatIndex i) => Stats.ContainsKey(i) ? Stats[i] : 0;