Dictionary <string, int> get_damage_expression_breakdown() { Dictionary <string, int> breakdown = new Dictionary <string, int>(); foreach (CreaturePower power in fPowers) { DiceExpression exp = DiceExpression.Parse(power.Damage); if (exp == null) { continue; } if (exp.Maximum == 0) { continue; } string dmg = exp.ToString(); if (!breakdown.ContainsKey(dmg)) { breakdown[dmg] = 0; } breakdown[dmg] += 1; } return(breakdown); }
private void ExpressionBox_TextChanged(object sender, EventArgs e) { if (fUpdating) { return; } DiceExpression exp = DiceExpression.Parse(ExpressionBox.Text); if (exp != null) { fUpdating = true; ClearBtn_Click(sender, e); fConstant = exp.Constant; for (int n = 0; n != exp.Throws; ++n) { add_die(exp.Sides); } fUpdating = false; } }
private void RollDamageBtn_Click(object sender, EventArgs e) { DiceExpression exp = DiceExpression.Parse(DamageExpLbl.Text); if (exp != null) { int roll = exp.Evaluate(); DamageBox.Value = roll; } }
private void RollDamageBtn_Click(object sender, EventArgs e) { DiceExpression diceExpression = DiceExpression.Parse(this.DamageExpLbl.Text); if (diceExpression != null) { int num = diceExpression.Evaluate(); this.DamageBox.Value = num; } }
private void update_damage() { string damage = this.fPower.Damage; if (damage == "") { this.Pages.TabPages.Remove(this.DamagePage); return; } DiceExpression diceExpression = DiceExpression.Parse(damage); this.DamageExpLbl.Text = damage; this.CritValueLbl.Text = diceExpression.Maximum.ToString(); }
void update_damage() { string dmg_str = fPower.Damage; if (dmg_str == "") { Pages.TabPages.Remove(DamagePage); } else { DiceExpression exp = DiceExpression.Parse(dmg_str); DamageExpLbl.Text = dmg_str; CritValueLbl.Text = exp.Maximum.ToString(); } }
private void ExpressionBox_TextChanged(object sender, EventArgs e) { if (this.fUpdating) { return; } DiceExpression diceExpression = DiceExpression.Parse(this.ExpressionBox.Text); if (diceExpression != null) { this.fUpdating = true; this.ClearBtn_Click(sender, e); this.fConstant = diceExpression.Constant; for (int i = 0; i != diceExpression.Throws; i++) { this.add_die(diceExpression.Sides); } this.fUpdating = false; } }
private Dictionary <string, int> get_damage_expression_breakdown() { Dictionary <string, int> strs = new Dictionary <string, int>(); foreach (CreaturePower fPower in this.fPowers) { DiceExpression diceExpression = DiceExpression.Parse(fPower.Damage); if (diceExpression == null || diceExpression.Maximum == 0) { continue; } string str = diceExpression.ToString(); if (!strs.ContainsKey(str)) { strs[str] = 0; } Dictionary <string, int> item = strs; Dictionary <string, int> strs1 = item; string str1 = str; item[str1] = strs1[str1] + 1; } return(strs); }
public void AdjustLevel(int delta) { this.fLevel += delta; this.fLevel = Math.Max(1, this.fLevel); if (this.fInitiative != -2147483648) { Trap initiative = this; initiative.Initiative = initiative.Initiative + delta; this.fInitiative = Math.Max(1, this.fInitiative); } foreach (TrapAttack fAttack in this.fAttacks) { if (fAttack.Attack != null) { PowerAttack attack = fAttack.Attack; attack.Bonus = attack.Bonus + delta; fAttack.Attack.Bonus = Math.Max(1, fAttack.Attack.Bonus); } string str = AI.ExtractDamage(fAttack.OnHit); if (str != "") { DiceExpression diceExpression = DiceExpression.Parse(str); if (diceExpression != null) { DiceExpression diceExpression1 = diceExpression.Adjust(delta); if (diceExpression1 != null && diceExpression.ToString() != diceExpression1.ToString()) { fAttack.OnHit = fAttack.OnHit.Replace(str, string.Concat(diceExpression1, " damage")); } } } string str1 = AI.ExtractDamage(fAttack.OnMiss); if (str1 != "") { DiceExpression diceExpression2 = DiceExpression.Parse(str1); if (diceExpression2 != null) { DiceExpression diceExpression3 = diceExpression2.Adjust(delta); if (diceExpression3 != null && diceExpression2.ToString() != diceExpression3.ToString()) { fAttack.OnMiss = fAttack.OnMiss.Replace(str1, string.Concat(diceExpression3, " damage")); } } } string str2 = AI.ExtractDamage(fAttack.Effect); if (str2 == "") { continue; } DiceExpression diceExpression4 = DiceExpression.Parse(str2); if (diceExpression4 == null) { continue; } DiceExpression diceExpression5 = diceExpression4.Adjust(delta); if (diceExpression5 == null || !(diceExpression4.ToString() != diceExpression5.ToString())) { continue; } fAttack.Effect = fAttack.Effect.Replace(str2, string.Concat(diceExpression5, " damage")); } foreach (TrapSkillData fSkill in this.fSkills) { TrapSkillData dC = fSkill; dC.DC = dC.DC + delta; } }
void update_list() { int level = (int)LevelBox.Value; int aid_another = 10 + (level / 2); string normal = Statistics.NormalDamage(level); string multiple = Statistics.MultipleDamage(level); string minion = Statistics.MinionDamage(level).ToString(); SkillList.BeginUpdate(); SkillList.Items.Clear(); #region Skill DCs ListViewItem lvi_easy = SkillList.Items.Add("Easy"); lvi_easy.SubItems.Add("DC " + AI.GetSkillDC(Difficulty.Easy, level)); lvi_easy.Group = SkillList.Groups[0]; ListViewItem lvi_moderate = SkillList.Items.Add("Moderate"); lvi_moderate.SubItems.Add("DC " + AI.GetSkillDC(Difficulty.Moderate, level)); lvi_moderate.Group = SkillList.Groups[0]; ListViewItem lvi_hard = SkillList.Items.Add("Hard"); lvi_hard.SubItems.Add("DC " + AI.GetSkillDC(Difficulty.Hard, level)); lvi_hard.Group = SkillList.Groups[0]; #endregion #region Aid Another ListViewItem lvi_aid = SkillList.Items.Add("Aid Another"); lvi_aid.SubItems.Add("DC " + aid_another); lvi_aid.Group = SkillList.Groups[1]; #endregion #region Damage ListViewItem lvi_damage = SkillList.Items.Add("Against a single target"); lvi_damage.SubItems.Add(normal); lvi_damage.Tag = DiceExpression.Parse(normal); lvi_damage.Group = SkillList.Groups[2]; ListViewItem lvi_multiple = SkillList.Items.Add("Against multiple targets"); lvi_multiple.SubItems.Add(multiple); lvi_multiple.Tag = DiceExpression.Parse(multiple); lvi_multiple.Group = SkillList.Groups[2]; ListViewItem lvi_minion = SkillList.Items.Add("From a minion"); lvi_minion.SubItems.Add(minion); lvi_minion.Tag = DiceExpression.Parse(minion); lvi_minion.Group = SkillList.Groups[2]; #endregion #region Monster Knowledge ListViewItem lvi_aberrant = SkillList.Items.Add("Aberrant"); lvi_aberrant.SubItems.Add("Dungeoneering"); lvi_aberrant.Group = SkillList.Groups[3]; ListViewItem lvi_elemental = SkillList.Items.Add("Elemental"); lvi_elemental.SubItems.Add("Arcana"); lvi_elemental.Group = SkillList.Groups[3]; ListViewItem lvi_fey = SkillList.Items.Add("Fey"); lvi_fey.SubItems.Add("Arcana"); lvi_fey.Group = SkillList.Groups[3]; ListViewItem lvi_immortal = SkillList.Items.Add("Immortal"); lvi_immortal.SubItems.Add("Religion"); lvi_immortal.Group = SkillList.Groups[3]; ListViewItem lvi_natural = SkillList.Items.Add("Natural"); lvi_natural.SubItems.Add("Nature"); lvi_natural.Group = SkillList.Groups[3]; ListViewItem lvi_shadow = SkillList.Items.Add("Shadow"); lvi_shadow.SubItems.Add("Arcana"); lvi_shadow.Group = SkillList.Groups[3]; ListViewItem lvi_undead = SkillList.Items.Add("Undead keyword"); lvi_undead.SubItems.Add("Religion"); lvi_undead.Group = SkillList.Groups[3]; #endregion SkillList.EndUpdate(); }
private void update_table() { List <string> strs = new List <string>(); strs.AddRange(HTML.GetHead("Power Statistics", "", DisplaySize.Small)); strs.Add("<BODY>"); strs.Add("<P class=table>"); strs.Add("<TABLE>"); strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Number of Powers</B>"); strs.Add("</TD>"); strs.Add("</TR>"); strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add("Number of powers"); strs.Add("</TD>"); strs.Add("<TD align=right>"); strs.Add(this.fPowers.Count.ToString()); strs.Add("</TD>"); strs.Add("</TR>"); if (this.fCreatures != 0) { double count = (double)this.fPowers.Count / (double)this.fCreatures; strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add("Powers per creature"); strs.Add("</TD>"); strs.Add("<TD align=right>"); strs.Add(count.ToString("F1")); strs.Add("</TD>"); strs.Add("</TR>"); } strs.Add("</TABLE>"); strs.Add("</P>"); if (this.fPowers.Count != 0) { strs.Add("<P class=table>"); strs.Add("<TABLE>"); Dictionary <string, int> conditionBreakdown = this.get_condition_breakdown(); if (conditionBreakdown.Count != 0) { strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Conditions</B>"); strs.Add("</TD>"); strs.Add("</TR>"); foreach (Pair <string, int> pair in this.sort_breakdown(conditionBreakdown)) { int second = pair.Second; if (second == 0) { continue; } double num = (double)second / (double)this.fPowers.Count; strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add(pair.First); strs.Add("</TD>"); strs.Add("<TD align=right>"); object[] str = new object[] { second, " (", num.ToString("P0"), ")" }; strs.Add(string.Concat(str)); strs.Add("</TD>"); strs.Add("</TR>"); } } strs.Add("</TABLE>"); strs.Add("</P>"); } if (this.fPowers.Count != 0) { strs.Add("<P class=table>"); strs.Add("<TABLE>"); Dictionary <string, int> damageTypeBreakdown = this.get_damage_type_breakdown(); if (damageTypeBreakdown.Count != 0) { strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Damage Types</B>"); strs.Add("</TD>"); strs.Add("</TR>"); foreach (Pair <string, int> pair1 in this.sort_breakdown(damageTypeBreakdown)) { int second1 = pair1.Second; double count1 = (double)second1 / (double)this.fPowers.Count; strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add(pair1.First); strs.Add("</TD>"); strs.Add("<TD align=right>"); object[] objArray = new object[] { second1, " (", count1.ToString("P0"), ")" }; strs.Add(string.Concat(objArray)); strs.Add("</TD>"); strs.Add("</TR>"); } } strs.Add("</TABLE>"); strs.Add("</P>"); } if (this.fPowers.Count != 0) { strs.Add("<P class=table>"); strs.Add("<TABLE>"); Dictionary <string, int> keywordBreakdown = this.get_keyword_breakdown(); if (keywordBreakdown.Count != 0) { strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Keywords</B>"); strs.Add("</TD>"); strs.Add("</TR>"); foreach (Pair <string, int> pair2 in this.sort_breakdown(keywordBreakdown)) { int num1 = pair2.Second; double count2 = (double)num1 / (double)this.fPowers.Count; strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add(pair2.First); strs.Add("</TD>"); strs.Add("<TD align=right>"); object[] str1 = new object[] { num1, " (", count2.ToString("P0"), ")" }; strs.Add(string.Concat(str1)); strs.Add("</TD>"); strs.Add("</TR>"); } } strs.Add("</TABLE>"); strs.Add("</P>"); } if (this.fPowers.Count != 0) { Dictionary <string, double> categoryBreakdown = this.get_category_breakdown(); if (categoryBreakdown.Count != 0) { strs.Add("<P class=table>"); strs.Add("<TABLE>"); strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Powers Per Category</B>"); strs.Add("</TD>"); strs.Add("</TR>"); foreach (string key in categoryBreakdown.Keys) { double item = categoryBreakdown[key]; strs.Add("<TR>"); strs.Add("<TD colspan=2>"); strs.Add(key); strs.Add("</TD>"); strs.Add("<TD align=right>"); strs.Add(item.ToString("P0")); strs.Add("</TD>"); strs.Add("</TR>"); } strs.Add("</TABLE>"); strs.Add("</P>"); } } if (this.fPowers.Count != 0) { strs.Add("<P class=table>"); strs.Add("<TABLE>"); Dictionary <string, int> damageExpressionBreakdown = this.get_damage_expression_breakdown(); if (damageExpressionBreakdown.Count != 0) { strs.Add("<TR class=heading>"); strs.Add("<TD colspan=3>"); strs.Add("<B>Damage</B>"); strs.Add("</TD>"); strs.Add("</TR>"); foreach (Pair <string, int> pair3 in this.sort_breakdown(damageExpressionBreakdown)) { int second2 = pair3.Second; double num2 = (double)second2 / (double)this.fPowers.Count; DiceExpression diceExpression = DiceExpression.Parse(pair3.First); strs.Add("<TR>"); strs.Add("<TD colspan=2>"); object[] first = new object[] { pair3.First, " (avg ", diceExpression.Average, ", max ", diceExpression.Maximum, ")" }; strs.Add(string.Concat(first)); strs.Add("</TD>"); strs.Add("<TD align=right>"); object[] objArray1 = new object[] { second2, " (", num2.ToString("P0"), ")" }; strs.Add(string.Concat(objArray1)); strs.Add("</TD>"); strs.Add("</TR>"); } } strs.Add("</TABLE>"); strs.Add("</P>"); } strs.Add("</BODY>"); strs.Add("</HTML>"); this.Browser.DocumentText = HTML.Concatenate(strs); }
void update_table() { List <string> lines = new List <string>(); lines.AddRange(HTML.GetHead("Power Statistics", "", Session.Preferences.TextSize)); lines.Add("<BODY>"); #region Number of powers lines.Add("<P class=table>"); lines.Add("<TABLE>"); lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Number of Powers</B>"); lines.Add("</TD>"); lines.Add("</TR>"); lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add("Number of powers"); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(fPowers.Count.ToString()); lines.Add("</TD>"); lines.Add("</TR>"); if (fCreatures != 0) { // Powers per creature double ppc = (double)fPowers.Count / fCreatures; lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add("Powers per creature"); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(ppc.ToString("F1")); lines.Add("</TD>"); lines.Add("</TR>"); } lines.Add("</TABLE>"); lines.Add("</P>"); #endregion #region Conditions if (fPowers.Count != 0) { lines.Add("<P class=table>"); lines.Add("<TABLE>"); // Number of powers with each condition Dictionary <string, int> condition_breakdown = get_condition_breakdown(); if (condition_breakdown.Count != 0) { lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Conditions</B>"); lines.Add("</TD>"); lines.Add("</TR>"); List <Pair <string, int> > list = sort_breakdown(condition_breakdown); foreach (Pair <string, int> condition in list) { int count = condition.Second; if (count == 0) { continue; } double pc = (double)count / fPowers.Count; lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add(condition.First); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(count + " (" + pc.ToString("P0") + ")"); lines.Add("</TD>"); lines.Add("</TR>"); } } lines.Add("</TABLE>"); lines.Add("</P>"); } #endregion #region Damage types if (fPowers.Count != 0) { lines.Add("<P class=table>"); lines.Add("<TABLE>"); // Number of powers with each damage type Dictionary <string, int> type_breakdown = get_damage_type_breakdown(); if (type_breakdown.Count != 0) { lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Damage Types</B>"); lines.Add("</TD>"); lines.Add("</TR>"); List <Pair <string, int> > list = sort_breakdown(type_breakdown); foreach (Pair <string, int> type in list) { int count = type.Second; double pc = (double)count / fPowers.Count; lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add(type.First); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(count + " (" + pc.ToString("P0") + ")"); lines.Add("</TD>"); lines.Add("</TR>"); } } lines.Add("</TABLE>"); lines.Add("</P>"); } #endregion #region Keywords if (fPowers.Count != 0) { lines.Add("<P class=table>"); lines.Add("<TABLE>"); // Number of powers with each keyword Dictionary <string, int> keyword_breakdown = get_keyword_breakdown(); if (keyword_breakdown.Count != 0) { lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Keywords</B>"); lines.Add("</TD>"); lines.Add("</TR>"); List <Pair <string, int> > list = sort_breakdown(keyword_breakdown); foreach (Pair <string, int> type in list) { int count = type.Second; double pc = (double)count / fPowers.Count; lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add(type.First); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(count + " (" + pc.ToString("P0") + ")"); lines.Add("</TD>"); lines.Add("</TR>"); } } lines.Add("</TABLE>"); lines.Add("</P>"); } #endregion #region Categories if (fPowers.Count != 0) { // Number of powers per category Dictionary <string, double> category_breakdown = get_category_breakdown(); if (category_breakdown.Count != 0) { lines.Add("<P class=table>"); lines.Add("<TABLE>"); lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Powers Per Category</B>"); lines.Add("</TD>"); lines.Add("</TR>"); foreach (string category in category_breakdown.Keys) { double pc = category_breakdown[category]; lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add(category); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(pc.ToString("P0")); lines.Add("</TD>"); lines.Add("</TR>"); } lines.Add("</TABLE>"); lines.Add("</P>"); } } #endregion #region Damage expressions if (fPowers.Count != 0) { lines.Add("<P class=table>"); lines.Add("<TABLE>"); // Frequency of damage expressions Dictionary <string, int> damage_breakdown = get_damage_expression_breakdown(); if (damage_breakdown.Count != 0) { lines.Add("<TR class=heading>"); lines.Add("<TD colspan=3>"); lines.Add("<B>Damage</B>"); lines.Add("</TD>"); lines.Add("</TR>"); List <Pair <string, int> > list = sort_breakdown(damage_breakdown); foreach (Pair <string, int> dmg in list) { int count = dmg.Second; double pc = (double)count / fPowers.Count; DiceExpression exp = DiceExpression.Parse(dmg.First); lines.Add("<TR>"); lines.Add("<TD colspan=2>"); lines.Add(dmg.First + " (avg " + exp.Average + ", max " + exp.Maximum + ")"); lines.Add("</TD>"); lines.Add("<TD align=right>"); lines.Add(count + " (" + pc.ToString("P0") + ")"); lines.Add("</TD>"); lines.Add("</TR>"); } } lines.Add("</TABLE>"); lines.Add("</P>"); } #endregion lines.Add("</BODY>"); lines.Add("</HTML>"); Browser.DocumentText = HTML.Concatenate(lines); }
/// <summary> /// Adjusts the trap's level and attack data. /// </summary> /// <param name="delta">The level adjustment delta.</param> public void AdjustLevel(int delta) { fLevel += delta; fLevel = Math.Max(1, fLevel); if (fInitiative != int.MinValue) { Initiative += delta; fInitiative = Math.Max(1, fInitiative); } foreach (TrapAttack ta in fAttacks) { if (ta.Attack != null) { ta.Attack.Bonus += delta; ta.Attack.Bonus = Math.Max(1, ta.Attack.Bonus); } string hit_dmg = AI.ExtractDamage(ta.OnHit); if (hit_dmg != "") { DiceExpression exp = DiceExpression.Parse(hit_dmg); if (exp != null) { DiceExpression exp_adj = exp.Adjust(delta); if ((exp_adj != null) && (exp.ToString() != exp_adj.ToString())) { ta.OnHit = ta.OnHit.Replace(hit_dmg, exp_adj + " damage"); } } } string miss_dmg = AI.ExtractDamage(ta.OnMiss); if (miss_dmg != "") { DiceExpression exp = DiceExpression.Parse(miss_dmg); if (exp != null) { DiceExpression exp_adj = exp.Adjust(delta); if ((exp_adj != null) && (exp.ToString() != exp_adj.ToString())) { ta.OnMiss = ta.OnMiss.Replace(miss_dmg, exp_adj + " damage"); } } } string effect_dmg = AI.ExtractDamage(ta.Effect); if (effect_dmg != "") { DiceExpression exp = DiceExpression.Parse(effect_dmg); if (exp != null) { DiceExpression exp_adj = exp.Adjust(delta); if ((exp_adj != null) && (exp.ToString() != exp_adj.ToString())) { ta.Effect = ta.Effect.Replace(effect_dmg, exp_adj + " damage"); } } } } foreach (TrapSkillData tsd in fSkills) { tsd.DC += delta; } }
private void update_list() { int value = (int)this.LevelBox.Value; int num = 10 + value / 2; string str = Statistics.NormalDamage(value); string str1 = Statistics.MultipleDamage(value); string str2 = Statistics.MinionDamage(value).ToString(); this.SkillList.BeginUpdate(); this.SkillList.Items.Clear(); ListViewItem item = this.SkillList.Items.Add("Easy"); item.SubItems.Add(string.Concat("DC ", AI.GetSkillDC(Difficulty.Easy, value))); item.Group = this.SkillList.Groups[0]; ListViewItem listViewItem = this.SkillList.Items.Add("Moderate"); listViewItem.SubItems.Add(string.Concat("DC ", AI.GetSkillDC(Difficulty.Moderate, value))); listViewItem.Group = this.SkillList.Groups[0]; ListViewItem item1 = this.SkillList.Items.Add("Hard"); item1.SubItems.Add(string.Concat("DC ", AI.GetSkillDC(Difficulty.Hard, value))); item1.Group = this.SkillList.Groups[0]; ListViewItem listViewItem1 = this.SkillList.Items.Add("Aid Another"); listViewItem1.SubItems.Add(string.Concat("DC ", num)); listViewItem1.Group = this.SkillList.Groups[1]; ListViewItem item2 = this.SkillList.Items.Add("Against a single target"); item2.SubItems.Add(str); item2.Tag = DiceExpression.Parse(str); item2.Group = this.SkillList.Groups[2]; ListViewItem listViewItem2 = this.SkillList.Items.Add("Against multiple targets"); listViewItem2.SubItems.Add(str1); listViewItem2.Tag = DiceExpression.Parse(str1); listViewItem2.Group = this.SkillList.Groups[2]; ListViewItem item3 = this.SkillList.Items.Add("From a minion"); item3.SubItems.Add(str2); item3.Tag = DiceExpression.Parse(str2); item3.Group = this.SkillList.Groups[2]; ListViewItem listViewItem3 = this.SkillList.Items.Add("Aberrant"); listViewItem3.SubItems.Add("Dungeoneering"); listViewItem3.Group = this.SkillList.Groups[3]; ListViewItem item4 = this.SkillList.Items.Add("Elemental"); item4.SubItems.Add("Arcana"); item4.Group = this.SkillList.Groups[3]; ListViewItem listViewItem4 = this.SkillList.Items.Add("Fey"); listViewItem4.SubItems.Add("Arcana"); listViewItem4.Group = this.SkillList.Groups[3]; ListViewItem item5 = this.SkillList.Items.Add("Immortal"); item5.SubItems.Add("Religion"); item5.Group = this.SkillList.Groups[3]; ListViewItem listViewItem5 = this.SkillList.Items.Add("Natural"); listViewItem5.SubItems.Add("Nature"); listViewItem5.Group = this.SkillList.Groups[3]; ListViewItem item6 = this.SkillList.Items.Add("Shadow"); item6.SubItems.Add("Arcana"); item6.Group = this.SkillList.Groups[3]; ListViewItem listViewItem6 = this.SkillList.Items.Add("Undead keyword"); listViewItem6.SubItems.Add("Religion"); listViewItem6.Group = this.SkillList.Groups[3]; this.SkillList.EndUpdate(); }