Can add spells successfully.
Signed-off-by: Melissa Avery-Weir <melissa.avery@wellsfargo.com>
This commit is contained in:
@@ -6,24 +6,18 @@ using Xunit;
|
||||
using d20_SRD_Spell_Lists.Models;
|
||||
using System.Xml.Linq;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml;
|
||||
|
||||
namespace d20_SRD_Spell_Lists_Tests {
|
||||
public class CharacterTests {
|
||||
|
||||
private string masterSpellList;
|
||||
private string userSpellList;
|
||||
private string charFile;
|
||||
|
||||
public CharacterTests() {
|
||||
masterSpellList = "AppData/MasterSpellList.xml";
|
||||
userSpellList = "AppData/UserSpellList.xml";
|
||||
charFile = "AppData/TestCharacter.xml";
|
||||
string defaultUserSpells = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><spells><spell><name>Dummy Spell</name><short_description>A short description.</short_description></spell></spells>";
|
||||
using (StreamWriter outfile = new StreamWriter(userSpellList)) {
|
||||
outfile.Write(defaultUserSpells);
|
||||
}
|
||||
|
||||
string defaultCharSpells = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><character><name>Thomasina</name><class>Cleric</class><spells><spell><name>Dummy Character Spell</name><short_description>A short description.</short_description></spell></spells></character>";
|
||||
string defaultCharSpells = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Character><Name>Thomasina</Name><CharacterClass>Cleric</CharacterClass><Spells><Spell><Name>Dummy Character Spell</Name><ShortDescription>A short description.</ShortDescription></Spell></Spells></Character>";
|
||||
using (StreamWriter outfile = new StreamWriter(charFile)) {
|
||||
outfile.Write(defaultCharSpells);
|
||||
}
|
||||
@@ -31,151 +25,133 @@ namespace d20_SRD_Spell_Lists_Tests {
|
||||
|
||||
[Fact]
|
||||
public void loadingValidCharacterShouldResultInOneCharacterSpell() {
|
||||
Character c = new Character(charFile);
|
||||
SpellSet s = new SpellSet(masterSpellList, userSpellList, c);
|
||||
Assert.Equal<int>(1, s.characterSpellCount());
|
||||
Character c;
|
||||
XmlSerializer ser = new XmlSerializer(typeof(Character));
|
||||
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
|
||||
c = (Character)ser.Deserialize(f);
|
||||
}
|
||||
Assert.Equal<int>(1, c.Spells.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void loadingValidCharacterShouldLoadAName() {
|
||||
Character c = new Character(charFile);
|
||||
Character c;
|
||||
XmlSerializer ser = new XmlSerializer(typeof(Character));
|
||||
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
|
||||
c = (Character)ser.Deserialize(f);
|
||||
}
|
||||
Assert.Equal<string>("Thomasina", c.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void loadingValidCharacterShouldLoadAClass() {
|
||||
Character c = new Character(charFile);
|
||||
Character c;
|
||||
XmlSerializer ser = new XmlSerializer(typeof(Character));
|
||||
using (FileStream f = new FileStream(charFile, FileMode.Open)) {
|
||||
c = (Character)ser.Deserialize(f);
|
||||
}
|
||||
Assert.Equal<string>("Cleric", c.CharacterClass.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectAttributeModifiers() {
|
||||
Character c = new Character(charFile);
|
||||
Character c = new Character();
|
||||
|
||||
c.Wisdom = 8;
|
||||
Assert.Equal<int>(-1, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 8;
|
||||
Assert.Equal<int>(-1, c.SpellCastingAttributeMod);
|
||||
|
||||
c.Wisdom = 9;
|
||||
Assert.Equal<int>(-1, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 9;
|
||||
Assert.Equal<int>(-1, c.SpellCastingAttributeMod);
|
||||
|
||||
c.Wisdom = 10;
|
||||
Assert.Equal<int>(0, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 10;
|
||||
Assert.Equal<int>(0, c.SpellCastingAttributeMod);
|
||||
|
||||
c.Wisdom = 11;
|
||||
Assert.Equal<int>(0, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 11;
|
||||
Assert.Equal<int>(0, c.SpellCastingAttributeMod);
|
||||
|
||||
c.Wisdom = 22;
|
||||
Assert.Equal<int>(6, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 22;
|
||||
Assert.Equal<int>(6, c.SpellCastingAttributeMod);
|
||||
|
||||
c.Wisdom = 17;
|
||||
Assert.Equal<int>(3, c.WisdomMod);
|
||||
c.SpellCastingAttribute = 17;
|
||||
Assert.Equal<int>(3, c.SpellCastingAttributeMod);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectBardSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Bard;
|
||||
Assert.Equal<int>(c.Charisma, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.CharismaMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Charisma", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectClericSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Cleric;
|
||||
Assert.Equal<int>(c.Wisdom, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.WisdomMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Wisdom", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectDruidSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Druid;
|
||||
Assert.Equal<int>(c.Wisdom, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.WisdomMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Wisdom", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectPaladinSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Paladin;
|
||||
Assert.Equal<int>(c.Wisdom, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.WisdomMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Wisdom", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectRangerSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Ranger;
|
||||
Assert.Equal<int>(c.Wisdom, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.WisdomMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Wisdom", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectSorcererSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Sorcerer;
|
||||
Assert.Equal<int>(c.Charisma, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.CharismaMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Charisma", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectWizardSpellCastingAttribute() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 19;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
c.CharacterClass = Character.SpellCastingClasses.Wizard;
|
||||
Assert.Equal<int>(c.Intelligence, c.SpellCastingAttribute);
|
||||
Assert.Equal<int>(c.IntelligenceMod, c.SpellCastingAttributeMod);
|
||||
Assert.Equal<string>("Intelligence", c.SpellCastingAttributeName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void useCorrectBonusSpells() {
|
||||
Character c = new Character(charFile);
|
||||
c.Wisdom = 22;
|
||||
c.Charisma = 13;
|
||||
c.Intelligence = 17;
|
||||
Character c = new Character();
|
||||
|
||||
Assert.Equal<int>(10, c.BonusSpells.Length);
|
||||
|
||||
c.SpellCastingAttribute = 17;
|
||||
c.CharacterClass = Character.SpellCastingClasses.Wizard;
|
||||
Assert.Equal<int>(0, c.BonusSpells[0]);
|
||||
Assert.Equal<int>(1, c.BonusSpells[1]);
|
||||
Assert.Equal<int>(1, c.BonusSpells[3]);
|
||||
Assert.Equal<int>(0, c.BonusSpells[4]);
|
||||
|
||||
c.SpellCastingAttribute = 13;
|
||||
c.CharacterClass = Character.SpellCastingClasses.Bard;
|
||||
Assert.Equal<int>(0, c.BonusSpells[0]);
|
||||
Assert.Equal<int>(1, c.BonusSpells[1]);
|
||||
Assert.Equal<int>(0, c.BonusSpells[2]);
|
||||
Assert.Equal<int>(0, c.BonusSpells[4]);
|
||||
|
||||
c.SpellCastingAttribute = 22;
|
||||
c.CharacterClass = Character.SpellCastingClasses.Cleric;
|
||||
Assert.Equal<int>(0, c.BonusSpells[0]);
|
||||
Assert.Equal<int>(2, c.BonusSpells[1]);
|
||||
@@ -184,5 +160,14 @@ namespace d20_SRD_Spell_Lists_Tests {
|
||||
Assert.Equal<int>(1, c.BonusSpells[6]);
|
||||
Assert.Equal<int>(0, c.BonusSpells[7]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void addingClassSpellsShouldAddClassSpells() {
|
||||
Character c = new Character();
|
||||
c.CharacterClass = Character.SpellCastingClasses.Cleric;
|
||||
c.addAllClassSpells();
|
||||
|
||||
Assert.Equal<int>(237, c.Spells.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,166 +10,32 @@ using d20_SRD_Spell_Lists.Properties;
|
||||
|
||||
namespace d20_SRD_Spell_Lists_Tests
|
||||
{
|
||||
public class SpellsTests
|
||||
public class SpellSetTests
|
||||
{
|
||||
private string masterSpellList;
|
||||
private string userSpellList;
|
||||
private string charFile;
|
||||
|
||||
public SpellsTests() {
|
||||
masterSpellList = "AppData/MasterSpellList.xml";
|
||||
userSpellList = "AppData/UserSpellList.xml";
|
||||
charFile = "AppData/TestCharacter.xml";
|
||||
string defaultUserSpells = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><spells><spell><name>Dummy Spell</name><short_description>A short description.</short_description></spell></spells>";
|
||||
using (StreamWriter outfile = new StreamWriter(userSpellList)) {
|
||||
outfile.Write(defaultUserSpells);
|
||||
}
|
||||
|
||||
string defaultCharSpells = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><character><spells><spell><name>Dummy Character Spell</name><short_description>A short description.</short_description></spell></spells></character>";
|
||||
using (StreamWriter outfile = new StreamWriter(charFile)) {
|
||||
outfile.Write(defaultCharSpells);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void loadingValidXMLShouldResultInSpells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList);
|
||||
MasterSpellSet spells = new MasterSpellSet();
|
||||
Assert.True(spells.totalCount() > 0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void loadingMissingXMLFails() {
|
||||
Assert.Throws<System.IO.FileNotFoundException>(
|
||||
delegate {
|
||||
SpellSet spells = new SpellSet("phony.xml");
|
||||
});
|
||||
|
||||
Assert.Throws<System.IO.FileNotFoundException>(
|
||||
delegate {
|
||||
SpellSet spells = new SpellSet(masterSpellList, "phony.xml");
|
||||
});
|
||||
}
|
||||
|
||||
//[Fact]
|
||||
//public void savingWithoutPreexistingUserFileCreatesOne() {
|
||||
// if (System.IO.File.Exists(Settings.Default.UserSpells)) {
|
||||
// System.IO.File.Delete(Settings.Default.UserSpells);
|
||||
// }
|
||||
// SpellSet spells = new SpellSet(masterSpellList);
|
||||
// spells.addUserSpell(new XElement("spell",
|
||||
// new XElement("name", "custom test spell")
|
||||
// ));
|
||||
|
||||
// Assert.DoesNotThrow(delegate {
|
||||
// spells.save();
|
||||
// });
|
||||
|
||||
// Assert.True(System.IO.File.Exists(Settings.Default.UserSpells));
|
||||
//}
|
||||
|
||||
[Fact]
|
||||
public void loadingValidMasterXMLShouldResultIn699MasterSpells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(699, spells.masterSpellCount());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void loadingValidCustomSpellsShouldResultInOneUserSpells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(1, spells.userSpellCount());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void savingNewSpellResultsInTwoSavedUserSpells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList);
|
||||
spells.addUserSpell(new XElement("spell",
|
||||
new XElement("name", "custom test spell")
|
||||
));
|
||||
spells.save();
|
||||
Assert.Equal<int>(2, spells.userSpellCount());
|
||||
Assert.Equal<int>(701, spells.totalCount());
|
||||
|
||||
SpellSet reloadedSet = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(2, spells.userSpellCount());
|
||||
Assert.Equal<int>(701, spells.totalCount());
|
||||
|
||||
spells.removeUserSpell("name", "custom test spell");
|
||||
spells.save();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void hidingMasterSpellGloballyResultsInHiddenUserSpell() {
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(0, spells.hiddenSpellCount());
|
||||
spells.hideMasterSpell("name", "Armor of Darkness");
|
||||
Assert.Equal<int>(1, spells.hiddenSpellCount());
|
||||
spells.save();
|
||||
|
||||
// ensure that a load preserves the hiddenness.
|
||||
spells = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(1, spells.hiddenSpellCount());
|
||||
spells.showMasterSpell("name", "Armor of Darkness");
|
||||
Assert.Equal<int>(0, spells.hiddenSpellCount());
|
||||
spells.save();
|
||||
|
||||
// ensure that a load preserves the showingness.
|
||||
spells = new SpellSet(masterSpellList, userSpellList);
|
||||
Assert.Equal<int>(0, spells.hiddenSpellCount());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void hidingMasterSpellForCharacterResultsInHiddenCharSpell() {
|
||||
Character c = new Character(charFile);
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList, c);
|
||||
Assert.Equal<int>(0, spells.hiddenCharacterSpellCount());
|
||||
spells.hideMasterSpellForCharacter("name", "Armor of Darkness");
|
||||
Assert.Equal<int>(1, spells.hiddenCharacterSpellCount());
|
||||
spells.save();
|
||||
|
||||
// ensure that a load preserves the hiddenness.
|
||||
c = new Character(charFile);
|
||||
spells = new SpellSet(masterSpellList, userSpellList, c);
|
||||
Assert.Equal<int>(1, spells.hiddenCharacterSpellCount());
|
||||
spells.showMasterSpellForCharacter("name", "Armor of Darkness");
|
||||
Assert.Equal<int>(0, spells.hiddenCharacterSpellCount());
|
||||
spells.save();
|
||||
|
||||
// ensure that a load preserves the showingness.
|
||||
c = new Character(charFile);
|
||||
spells = new SpellSet(masterSpellList, userSpellList, c);
|
||||
Assert.Equal<int>(0, spells.hiddenCharacterSpellCount());
|
||||
MasterSpellSet spells = new MasterSpellSet();
|
||||
Assert.Equal<int>(699, spells.totalCount());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void thereAre237ClericSpells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList);
|
||||
MasterSpellSet spells = new MasterSpellSet();
|
||||
|
||||
Assert.Equal<int>(237, spells.byClass(Character.SpellCastingClasses.Cleric).Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void thereAre31Cleric1Spells() {
|
||||
SpellSet spells = new SpellSet(masterSpellList);
|
||||
MasterSpellSet spells = new MasterSpellSet();
|
||||
|
||||
Assert.Equal<int>(31, spells.byClassAndLevel(Character.SpellCastingClasses.Cleric, 1).Count());
|
||||
|
||||
spells.addUserSpell(new XElement("spell",
|
||||
new XElement("name", "custom cleric spell"),
|
||||
new XElement("level", "Cleric 1")
|
||||
));
|
||||
|
||||
Assert.Equal<int>(32, spells.byClassAndLevel(Character.SpellCastingClasses.Cleric, 1).Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void thereAreFewerClericSpellsIfWeHideSome() {
|
||||
Character c = new Character(charFile);
|
||||
SpellSet spells = new SpellSet(masterSpellList, userSpellList, c);
|
||||
|
||||
spells.hideMasterSpell("name", "Dismissal");
|
||||
spells.hideMasterSpellForCharacter("name", "Darkness");
|
||||
Assert.Equal<int>(235, spells.byClass(Character.SpellCastingClasses.Cleric).Count());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
216
d20 SRD Spell Lists/FrmAddEdit.Designer.cs
generated
Normal file
216
d20 SRD Spell Lists/FrmAddEdit.Designer.cs
generated
Normal file
@@ -0,0 +1,216 @@
|
||||
namespace d20_SRD_Spell_Lists {
|
||||
partial class FrmAddEdit {
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing) {
|
||||
if (disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent() {
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.baseSpellComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.customSpellGroup = new System.Windows.Forms.GroupBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.txtName = new System.Windows.Forms.TextBox();
|
||||
this.txtLevel = new System.Windows.Forms.NumericUpDown();
|
||||
this.txtComponents = new System.Windows.Forms.TextBox();
|
||||
this.txtDescription = new System.Windows.Forms.TextBox();
|
||||
this.btnSave = new System.Windows.Forms.Button();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.customSpellGroup.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.txtLevel)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(12, 9);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(220, 13);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "Choose a base spell or create a custom spell.";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(12, 36);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(58, 13);
|
||||
this.label2.TabIndex = 1;
|
||||
this.label2.Text = "Base spell:";
|
||||
//
|
||||
// baseSpellComboBox
|
||||
//
|
||||
this.baseSpellComboBox.FormattingEnabled = true;
|
||||
this.baseSpellComboBox.Location = new System.Drawing.Point(76, 33);
|
||||
this.baseSpellComboBox.Name = "baseSpellComboBox";
|
||||
this.baseSpellComboBox.Size = new System.Drawing.Size(215, 21);
|
||||
this.baseSpellComboBox.TabIndex = 2;
|
||||
this.baseSpellComboBox.SelectedIndexChanged += new System.EventHandler(this.baseSpellComboBox_SelectedIndexChanged);
|
||||
//
|
||||
// customSpellGroup
|
||||
//
|
||||
this.customSpellGroup.Controls.Add(this.txtDescription);
|
||||
this.customSpellGroup.Controls.Add(this.txtComponents);
|
||||
this.customSpellGroup.Controls.Add(this.txtLevel);
|
||||
this.customSpellGroup.Controls.Add(this.txtName);
|
||||
this.customSpellGroup.Controls.Add(this.label6);
|
||||
this.customSpellGroup.Controls.Add(this.label5);
|
||||
this.customSpellGroup.Controls.Add(this.label4);
|
||||
this.customSpellGroup.Controls.Add(this.label3);
|
||||
this.customSpellGroup.Location = new System.Drawing.Point(15, 71);
|
||||
this.customSpellGroup.Name = "customSpellGroup";
|
||||
this.customSpellGroup.Size = new System.Drawing.Size(276, 169);
|
||||
this.customSpellGroup.TabIndex = 3;
|
||||
this.customSpellGroup.TabStop = false;
|
||||
this.customSpellGroup.Text = "Custom Spell";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(7, 22);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(38, 13);
|
||||
this.label3.TabIndex = 0;
|
||||
this.label3.Text = "Name:";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(6, 47);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(36, 13);
|
||||
this.label4.TabIndex = 1;
|
||||
this.label4.Text = "Level:";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(7, 74);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(69, 13);
|
||||
this.label5.TabIndex = 2;
|
||||
this.label5.Text = "Components:";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(7, 102);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(63, 13);
|
||||
this.label6.TabIndex = 3;
|
||||
this.label6.Text = "Description:";
|
||||
//
|
||||
// txtName
|
||||
//
|
||||
this.txtName.Location = new System.Drawing.Point(82, 19);
|
||||
this.txtName.Name = "txtName";
|
||||
this.txtName.Size = new System.Drawing.Size(188, 20);
|
||||
this.txtName.TabIndex = 4;
|
||||
//
|
||||
// txtLevel
|
||||
//
|
||||
this.txtLevel.Location = new System.Drawing.Point(82, 45);
|
||||
this.txtLevel.Maximum = new decimal(new int[] {
|
||||
20,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.txtLevel.Name = "txtLevel";
|
||||
this.txtLevel.Size = new System.Drawing.Size(41, 20);
|
||||
this.txtLevel.TabIndex = 5;
|
||||
//
|
||||
// txtComponents
|
||||
//
|
||||
this.txtComponents.Location = new System.Drawing.Point(82, 71);
|
||||
this.txtComponents.Name = "txtComponents";
|
||||
this.txtComponents.Size = new System.Drawing.Size(188, 20);
|
||||
this.txtComponents.TabIndex = 6;
|
||||
//
|
||||
// txtDescription
|
||||
//
|
||||
this.txtDescription.Location = new System.Drawing.Point(82, 99);
|
||||
this.txtDescription.Multiline = true;
|
||||
this.txtDescription.Name = "txtDescription";
|
||||
this.txtDescription.Size = new System.Drawing.Size(188, 59);
|
||||
this.txtDescription.TabIndex = 7;
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
this.btnSave.Location = new System.Drawing.Point(131, 248);
|
||||
this.btnSave.Name = "btnSave";
|
||||
this.btnSave.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnSave.TabIndex = 8;
|
||||
this.btnSave.Text = "Save";
|
||||
this.btnSave.UseVisualStyleBackColor = true;
|
||||
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.Location = new System.Drawing.Point(210, 248);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 9;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
|
||||
//
|
||||
// FrmAddEdit
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(303, 283);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.Controls.Add(this.btnSave);
|
||||
this.Controls.Add(this.customSpellGroup);
|
||||
this.Controls.Add(this.baseSpellComboBox);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Name = "FrmAddEdit";
|
||||
this.Text = "Add a Spell";
|
||||
this.customSpellGroup.ResumeLayout(false);
|
||||
this.customSpellGroup.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.txtLevel)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ComboBox baseSpellComboBox;
|
||||
private System.Windows.Forms.GroupBox customSpellGroup;
|
||||
private System.Windows.Forms.TextBox txtDescription;
|
||||
private System.Windows.Forms.TextBox txtComponents;
|
||||
private System.Windows.Forms.NumericUpDown txtLevel;
|
||||
private System.Windows.Forms.TextBox txtName;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Button btnSave;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
}
|
||||
}
|
||||
86
d20 SRD Spell Lists/FrmAddEdit.cs
Normal file
86
d20 SRD Spell Lists/FrmAddEdit.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using d20_SRD_Spell_Lists.Models;
|
||||
using System.Collections;
|
||||
|
||||
namespace d20_SRD_Spell_Lists {
|
||||
public partial class FrmAddEdit : Form {
|
||||
private MasterSpellSet spellList;
|
||||
public Spell spell;
|
||||
private Character character;
|
||||
|
||||
public FrmAddEdit(bool editMode, Character _character, Spell _spell = null) {
|
||||
InitializeComponent();
|
||||
|
||||
if (editMode) {
|
||||
this.Text = "Edit a Spell";
|
||||
}
|
||||
|
||||
if (_spell != null) {
|
||||
spell = _spell;
|
||||
} else {
|
||||
spell = new Spell();
|
||||
}
|
||||
character = _character;
|
||||
setupBaseSpells();
|
||||
txtName.LostFocus += new EventHandler(txtName_LostFocus);
|
||||
}
|
||||
|
||||
void txtName_LostFocus(object sender, EventArgs e) {
|
||||
if (txtName.Text != "") {
|
||||
baseSpellComboBox.SelectedValue = "--";
|
||||
}
|
||||
}
|
||||
|
||||
private void setupBaseSpells() {
|
||||
spellList = new MasterSpellSet();
|
||||
baseSpellComboBox.DisplayMember = "Display";
|
||||
baseSpellComboBox.ValueMember = "Name";
|
||||
baseSpellComboBox.DataSource = spellList.asChoosableList();
|
||||
baseSpellComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
}
|
||||
|
||||
private void baseSpellComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
if (baseSpellComboBox.SelectedValue.ToString() != "--") {
|
||||
clearCustomSpellFields();
|
||||
}
|
||||
}
|
||||
|
||||
private void clearCustomSpellFields() {
|
||||
txtName.Text = "";
|
||||
txtLevel.Value = 0;
|
||||
txtComponents.Text = "";
|
||||
txtDescription.Text = "";
|
||||
}
|
||||
|
||||
private void btnSave_Click(object sender, EventArgs e) {
|
||||
storeSpell();
|
||||
this.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void storeSpell() {
|
||||
if (baseSpellComboBox.SelectedValue.ToString() == "--") {
|
||||
// Use the custom Spell
|
||||
spell.Name = txtName.Text;
|
||||
spell.Components = txtComponents.Text;
|
||||
spell.Level = (int)txtLevel.Value;
|
||||
spell.FullLevel = Character.getSpellcastingClassName(character.CharacterClass) + " " + spell.Level.ToString();
|
||||
spell.ShortDescription = txtDescription.Text;
|
||||
} else {
|
||||
spell = spellList.byName(baseSpellComboBox.SelectedValue.ToString(), character.CharacterClass);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnCancel_Click(object sender, EventArgs e) {
|
||||
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
120
d20 SRD Spell Lists/FrmAddEdit.resx
Normal file
120
d20 SRD Spell Lists/FrmAddEdit.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
156
d20 SRD Spell Lists/FrmCredits.Designer.cs
generated
156
d20 SRD Spell Lists/FrmCredits.Designer.cs
generated
@@ -8,7 +8,6 @@
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing) {
|
||||
if (disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
@@ -23,33 +22,160 @@
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent() {
|
||||
this.lblCredits = new System.Windows.Forms.Label();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmCredits));
|
||||
this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.logoPictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.labelProductName = new System.Windows.Forms.Label();
|
||||
this.labelVersion = new System.Windows.Forms.Label();
|
||||
this.labelCopyright = new System.Windows.Forms.Label();
|
||||
this.labelCompanyName = new System.Windows.Forms.Label();
|
||||
this.textBoxDescription = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.tableLayoutPanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lblCredits
|
||||
// tableLayoutPanel
|
||||
//
|
||||
this.lblCredits.AutoSize = true;
|
||||
this.lblCredits.Location = new System.Drawing.Point(12, 66);
|
||||
this.lblCredits.Name = "lblCredits";
|
||||
this.lblCredits.Size = new System.Drawing.Size(35, 13);
|
||||
this.lblCredits.TabIndex = 0;
|
||||
this.lblCredits.Text = "label1";
|
||||
this.tableLayoutPanel.ColumnCount = 2;
|
||||
this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
|
||||
this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F));
|
||||
this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);
|
||||
this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);
|
||||
this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);
|
||||
this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);
|
||||
this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);
|
||||
this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);
|
||||
this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);
|
||||
this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9);
|
||||
this.tableLayoutPanel.Name = "tableLayoutPanel";
|
||||
this.tableLayoutPanel.RowCount = 6;
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
|
||||
this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265);
|
||||
this.tableLayoutPanel.TabIndex = 0;
|
||||
//
|
||||
// logoPictureBox
|
||||
//
|
||||
this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image")));
|
||||
this.logoPictureBox.Location = new System.Drawing.Point(3, 3);
|
||||
this.logoPictureBox.Name = "logoPictureBox";
|
||||
this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
|
||||
this.logoPictureBox.Size = new System.Drawing.Size(131, 259);
|
||||
this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.logoPictureBox.TabIndex = 12;
|
||||
this.logoPictureBox.TabStop = false;
|
||||
//
|
||||
// labelProductName
|
||||
//
|
||||
this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.labelProductName.Location = new System.Drawing.Point(143, 0);
|
||||
this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
|
||||
this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17);
|
||||
this.labelProductName.Name = "labelProductName";
|
||||
this.labelProductName.Size = new System.Drawing.Size(271, 17);
|
||||
this.labelProductName.TabIndex = 19;
|
||||
this.labelProductName.Text = "Product Name";
|
||||
this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// labelVersion
|
||||
//
|
||||
this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.labelVersion.Location = new System.Drawing.Point(143, 26);
|
||||
this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
|
||||
this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17);
|
||||
this.labelVersion.Name = "labelVersion";
|
||||
this.labelVersion.Size = new System.Drawing.Size(271, 17);
|
||||
this.labelVersion.TabIndex = 0;
|
||||
this.labelVersion.Text = "Version";
|
||||
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// labelCopyright
|
||||
//
|
||||
this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.labelCopyright.Location = new System.Drawing.Point(143, 52);
|
||||
this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
|
||||
this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17);
|
||||
this.labelCopyright.Name = "labelCopyright";
|
||||
this.labelCopyright.Size = new System.Drawing.Size(271, 17);
|
||||
this.labelCopyright.TabIndex = 21;
|
||||
this.labelCopyright.Text = "Copyright";
|
||||
this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// labelCompanyName
|
||||
//
|
||||
this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.labelCompanyName.Location = new System.Drawing.Point(143, 78);
|
||||
this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
|
||||
this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17);
|
||||
this.labelCompanyName.Name = "labelCompanyName";
|
||||
this.labelCompanyName.Size = new System.Drawing.Size(271, 17);
|
||||
this.labelCompanyName.TabIndex = 22;
|
||||
this.labelCompanyName.Text = "Company Name";
|
||||
this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// textBoxDescription
|
||||
//
|
||||
this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.textBoxDescription.Location = new System.Drawing.Point(143, 107);
|
||||
this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
||||
this.textBoxDescription.Multiline = true;
|
||||
this.textBoxDescription.Name = "textBoxDescription";
|
||||
this.textBoxDescription.ReadOnly = true;
|
||||
this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.textBoxDescription.Size = new System.Drawing.Size(271, 126);
|
||||
this.textBoxDescription.TabIndex = 23;
|
||||
this.textBoxDescription.TabStop = false;
|
||||
this.textBoxDescription.Text = "Description";
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.okButton.Location = new System.Drawing.Point(339, 239);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.okButton.TabIndex = 24;
|
||||
this.okButton.Text = "&OK";
|
||||
//
|
||||
// FrmCredits
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(292, 266);
|
||||
this.Controls.Add(this.lblCredits);
|
||||
this.ClientSize = new System.Drawing.Size(435, 283);
|
||||
this.Controls.Add(this.tableLayoutPanel);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "FrmCredits";
|
||||
this.Text = "Credits";
|
||||
this.Padding = new System.Windows.Forms.Padding(9);
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "AboutBox1";
|
||||
this.tableLayoutPanel.ResumeLayout(false);
|
||||
this.tableLayoutPanel.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label lblCredits;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
|
||||
private System.Windows.Forms.PictureBox logoPictureBox;
|
||||
private System.Windows.Forms.Label labelProductName;
|
||||
private System.Windows.Forms.Label labelVersion;
|
||||
private System.Windows.Forms.Label labelCopyright;
|
||||
private System.Windows.Forms.Label labelCompanyName;
|
||||
private System.Windows.Forms.TextBox textBoxDescription;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,83 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace d20_SRD_Spell_Lists {
|
||||
public partial class FrmCredits : Form {
|
||||
partial class FrmCredits : Form {
|
||||
public FrmCredits() {
|
||||
InitializeComponent();
|
||||
|
||||
lblCredits.Text = "Developer: Melissa Avery-Weir @ http://irrsinn.net\r\n";
|
||||
this.Text = String.Format("About {0}", AssemblyTitle);
|
||||
this.labelProductName.Text = AssemblyProduct;
|
||||
this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion);
|
||||
this.labelCopyright.Text = AssemblyCopyright;
|
||||
this.labelCompanyName.Text = AssemblyCompany;
|
||||
this.textBoxDescription.Text = AssemblyDescription;
|
||||
}
|
||||
|
||||
#region Assembly Attribute Accessors
|
||||
|
||||
public string AssemblyTitle {
|
||||
get {
|
||||
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
|
||||
if (attributes.Length > 0) {
|
||||
AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
|
||||
if (titleAttribute.Title != "") {
|
||||
return titleAttribute.Title;
|
||||
}
|
||||
}
|
||||
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
|
||||
}
|
||||
}
|
||||
|
||||
public string AssemblyVersion {
|
||||
get {
|
||||
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public string AssemblyDescription {
|
||||
get {
|
||||
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
|
||||
if (attributes.Length == 0) {
|
||||
return "";
|
||||
}
|
||||
return ((AssemblyDescriptionAttribute)attributes[0]).Description;
|
||||
}
|
||||
}
|
||||
|
||||
public string AssemblyProduct {
|
||||
get {
|
||||
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
|
||||
if (attributes.Length == 0) {
|
||||
return "";
|
||||
}
|
||||
return ((AssemblyProductAttribute)attributes[0]).Product;
|
||||
}
|
||||
}
|
||||
|
||||
public string AssemblyCopyright {
|
||||
get {
|
||||
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
|
||||
if (attributes.Length == 0) {
|
||||
return "";
|
||||
}
|
||||
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
|
||||
}
|
||||
}
|
||||
|
||||
public string AssemblyCompany {
|
||||
get {
|
||||
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
|
||||
if (attributes.Length == 0) {
|
||||
return "";
|
||||
}
|
||||
return ((AssemblyCompanyAttribute)attributes[0]).Company;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,4 +117,494 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
AZ+4Ui+mkTlKAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
975
d20 SRD Spell Lists/FrmMain.Designer.cs
generated
975
d20 SRD Spell Lists/FrmMain.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -8,64 +8,107 @@ using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using d20_SRD_Spell_Lists.Models;
|
||||
using d20_SRD_Spell_Lists.Exceptions;
|
||||
using System.Xml.Serialization;
|
||||
using System.IO;
|
||||
|
||||
namespace d20_SRD_Spell_Lists {
|
||||
public partial class FrmMain : Form {
|
||||
private SpellSet spells;
|
||||
private MasterSpellSet spells;
|
||||
private Character character;
|
||||
private string characterFile;
|
||||
|
||||
public FrmMain() {
|
||||
InitializeComponent();
|
||||
|
||||
character = new Character();
|
||||
spells = new SpellSet();
|
||||
spells = new MasterSpellSet();
|
||||
spellsDataGridView.AutoGenerateColumns = false;
|
||||
|
||||
setupAttributes();
|
||||
setupClassList();
|
||||
setupSpells();
|
||||
|
||||
txtIntelligence.LostFocus += new EventHandler(txtIntelligence_LostFocus);
|
||||
txtWisdom.LostFocus += new EventHandler(txtWisdom_LostFocus);
|
||||
txtCharisma.LostFocus += new EventHandler(txtCharisma_LostFocus);
|
||||
//spellsDataGridView.CellValueChanged += new DataGridViewCellEventHandler(spellsDataGridView_CellValueChanged);
|
||||
}
|
||||
|
||||
private void setupSpells() {
|
||||
this.spellsDataGridView.DataSource = character.Spells;
|
||||
}
|
||||
|
||||
//private void spellsDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
|
||||
// string question = "Should this update apply to just this character's spell list?";
|
||||
// string title = "Spell Update";
|
||||
|
||||
// var result = MessageBox.Show(question, title, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
|
||||
|
||||
// if (result == DialogResult.Yes) {
|
||||
// string newValue = spellsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue.ToString();
|
||||
// Spell newSpell = spellsDataGridView.Rows[e.RowIndex].DataBoundItem as Spell;
|
||||
// // If it's a custom app spell already, hide that one for the character, then add the character spell.
|
||||
// if (newSpell.IsCustom) {
|
||||
// if (spellsDataGridView.Columns[e.ColumnIndex].HeaderText != "Name") {
|
||||
// spells.hideMasterSpellForCharacter("name", newSpell.Name);
|
||||
// } else {
|
||||
// spells.hideMasterSpellForCharacter("short_description", newSpell.ShortDescription);
|
||||
// }
|
||||
// spells.addCharacterSpell(newSpell, Character.getSpellcastingClass(charClassComboBox.SelectedItem.ToString()));
|
||||
// newSpell.IsCharCustom = true;
|
||||
// } else if (newSpell.IsCharCustom) {
|
||||
// // But what if it's already a character-specific spell?! ...then I just need to save it.
|
||||
// // ...so... does that mean do nothing?
|
||||
// }
|
||||
// } else if (result == DialogResult.No) {
|
||||
// Spell newSpell = spellsDataGridView.Rows[e.RowIndex].DataBoundItem as Spell;
|
||||
// if (newSpell.IsCharCustom) {
|
||||
// // It's a custom character spell, which means I should hide the chara
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
private void setupAttributes() {
|
||||
txtStrength_TextChanged(txtStrength, new EventArgs());
|
||||
txtDexterity_TextChanged(txtDexterity, new EventArgs());
|
||||
txtConstitution_TextChanged(txtConstitution, new EventArgs());
|
||||
txtIntelligence_TextChanged(txtIntelligence, new EventArgs());
|
||||
txtWisdom_TextChanged(txtWisdom, new EventArgs());
|
||||
txtCharisma_TextChanged(txtCharisma, new EventArgs());
|
||||
txtSpellCastingAttribute.LostFocus += new EventHandler(txtSpellCastingAttribute_LostFocus);
|
||||
txtSpellCastingAttribute_TextChanged(txtSpellCastingAttribute, new EventArgs());
|
||||
}
|
||||
|
||||
private void setupClassList() {
|
||||
classComboBox.DataSource = Character.ClassNames;
|
||||
classComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
classComboBox.SelectedIndexChanged += new System.EventHandler(classComboBox_SelectedIndexChanged);
|
||||
classComboBox_SelectedIndexChanged(classComboBox, new EventArgs());
|
||||
|
||||
charClassComboBox.DataSource = Character.ClassNames;
|
||||
List<string> classOptions = new List<string>();
|
||||
classOptions.Add("Choose a class...");
|
||||
classOptions.AddRange(Character.ClassNames);
|
||||
charClassComboBox.DataSource = classOptions;
|
||||
charClassComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
charClassComboBox.SelectedIndexChanged += new System.EventHandler(charClassComboBox_SelectedIndexChanged);
|
||||
charClassComboBox_SelectedIndexChanged(charClassComboBox, new EventArgs());
|
||||
}
|
||||
|
||||
private void classComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
ComboBox classList = (ComboBox)sender;
|
||||
|
||||
string charClass = classList.SelectedItem.ToString();
|
||||
BindingList<Spell> spellList = new BindingList<Spell>(spells.byClass((Character.SpellCastingClasses)Enum.Parse(typeof(Character.SpellCastingClasses), charClass, true)));
|
||||
this.spellsDataGridView.DataSource = spellList;
|
||||
}
|
||||
|
||||
private void charClassComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
ComboBox classList = (ComboBox)sender;
|
||||
|
||||
if (classList.SelectedItem.ToString() != "Choose a class...") {
|
||||
updateClassInformation(classList);
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
offerNewSpells();
|
||||
}
|
||||
}
|
||||
|
||||
private void offerNewSpells() {
|
||||
string question = "Would you like to add all base " + character.CharacterClass.ToString() + " spells to the list?";
|
||||
string title = "Add all spells?";
|
||||
var result = MessageBox.Show(question, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
|
||||
if (result == System.Windows.Forms.DialogResult.Yes) {
|
||||
character.addAllClassSpells();
|
||||
refreshSpellList();
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshSpellList() {
|
||||
spellsDataGridView.DataSource = null;
|
||||
setupSpells();
|
||||
}
|
||||
|
||||
private void updateClassInformation(ComboBox classList) {
|
||||
string charClass = classList.SelectedItem.ToString();
|
||||
character.CharacterClass = (Character.SpellCastingClasses)Enum.Parse(typeof(Character.SpellCastingClasses), charClass);
|
||||
this.classComboBox.SelectedItem = charClassComboBox.SelectedItem;
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
lblSpellCastingAttribute.Text = character.SpellCastingAttributeName + ":";
|
||||
}
|
||||
|
||||
private void updateExtraSpells() {
|
||||
@@ -84,96 +127,50 @@ namespace d20_SRD_Spell_Lists {
|
||||
}
|
||||
}
|
||||
|
||||
private void txtStrength_Validating(object sender, CancelEventArgs e) {
|
||||
int val;
|
||||
if (txtStrength.Text != "" && !int.TryParse(txtStrength.Text, out val)) {
|
||||
errorProvider.SetError(txtStrength, "Strength should be a number or empty.");
|
||||
e.Cancel = true;
|
||||
private void txtSpellCastingAttribute_TextChanged(object sender, EventArgs e) {
|
||||
if (txtSpellCastingAttribute.Text != "") {
|
||||
character.SpellCastingAttribute = int.Parse(txtSpellCastingAttribute.Text);
|
||||
lblSpellCastingAttributeMod.Text = String.Format((character.SpellCastingAttributeMod >= 0) ? "+{0:D}" : "{0:D}", character.SpellCastingAttributeMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtStrength_TextChanged(object sender, EventArgs e) {
|
||||
if (txtStrength.Text != "") {
|
||||
character.Strength = int.Parse(txtStrength.Text);
|
||||
lblStrMod.Text = String.Format((character.StrengthMod >= 0) ? "+{0:D}" : "{0:D}", character.StrengthMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtDexterity_TextChanged(object sender, EventArgs e) {
|
||||
if (txtDexterity.Text != "") {
|
||||
character.Dexterity = int.Parse(txtDexterity.Text);
|
||||
lblDexMod.Text = String.Format((character.DexterityMod >= 0) ? "+{0:D}" : "{0:D}", character.DexterityMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtConstitution_TextChanged(object sender, EventArgs e) {
|
||||
if (txtConstitution.Text != "") {
|
||||
character.Constitution = int.Parse(txtConstitution.Text);
|
||||
lblConMod.Text = String.Format((character.Constitution >= 0) ? "+{0:D}" : "{0:D}", character.ConstitutionMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtIntelligence_TextChanged(object sender, EventArgs e) {
|
||||
if (txtIntelligence.Text != "") {
|
||||
character.Intelligence = int.Parse(txtIntelligence.Text);
|
||||
lblIntMod.Text = String.Format((character.Intelligence >= 0) ? "+{0:D}" : "{0:D}", character.IntelligenceMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtIntelligence_LostFocus(object sender, EventArgs e) {
|
||||
if (character.SpellCastingAttribute == character.Intelligence) {
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
}
|
||||
}
|
||||
|
||||
private void txtWisdom_TextChanged(object sender, EventArgs e) {
|
||||
if (txtWisdom.Text != "") {
|
||||
character.Wisdom = int.Parse(txtWisdom.Text);
|
||||
lblWisMod.Text = String.Format((character.Wisdom >= 0) ? "+{0:D}" : "{0:D}", character.WisdomMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtWisdom_LostFocus(object sender, EventArgs e) {
|
||||
if (character.SpellCastingAttribute == character.Wisdom) {
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
}
|
||||
}
|
||||
|
||||
private void txtCharisma_TextChanged(object sender, EventArgs e) {
|
||||
if (txtCharisma.Text != "") {
|
||||
character.Charisma = int.Parse(txtCharisma.Text);
|
||||
lblChaMod.Text = String.Format((character.Charisma >= 0) ? "+{0:D}" : "{0:D}", character.CharismaMod);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtCharisma_LostFocus(object sender, EventArgs e) {
|
||||
if (character.SpellCastingAttribute == character.Charisma) {
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
}
|
||||
private void txtSpellCastingAttribute_LostFocus(object sender, EventArgs e) {
|
||||
updateSpellDCs();
|
||||
updateExtraSpells();
|
||||
}
|
||||
|
||||
private void saveToolStripButton_Click(object sender, EventArgs e) {
|
||||
try {
|
||||
spells.save();
|
||||
character.save();
|
||||
} catch (NoCharacterFileException) {
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.AddExtension = true;
|
||||
sfd.Filter = "Character files (*.xml)|*.xml|All files (*.*)|*.*";
|
||||
sfd.FilterIndex = 1;
|
||||
sfd.RestoreDirectory = true;
|
||||
|
||||
if (sfd.ShowDialog() == DialogResult.OK) {
|
||||
string filename = sfd.FileName;
|
||||
character.FileName = filename;
|
||||
character.save();
|
||||
if (characterFile != "") {
|
||||
try {
|
||||
saveCharacter();
|
||||
} catch (IOException) {
|
||||
getFilenameFromUserAndSave();
|
||||
}
|
||||
} else {
|
||||
getFilenameFromUserAndSave();
|
||||
}
|
||||
}
|
||||
|
||||
private void getFilenameFromUserAndSave() {
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.AddExtension = true;
|
||||
sfd.Filter = "Character files (*.xml)|*.xml|All files (*.*)|*.*";
|
||||
sfd.FilterIndex = 1;
|
||||
sfd.RestoreDirectory = true;
|
||||
|
||||
if (sfd.ShowDialog() == DialogResult.OK) {
|
||||
this.characterFile = sfd.FileName;
|
||||
saveCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveCharacter() {
|
||||
XmlSerializer serializer = new XmlSerializer(typeof(Character));
|
||||
using (TextWriter writer = new StreamWriter(characterFile)) {
|
||||
serializer.Serialize(writer, character);
|
||||
}
|
||||
}
|
||||
|
||||
private void txtCharacter_TextChanged(object sender, EventArgs e) {
|
||||
character.Name = txtCharacter.Text;
|
||||
}
|
||||
@@ -186,7 +183,8 @@ namespace d20_SRD_Spell_Lists {
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK) {
|
||||
try {
|
||||
character = new Character(ofd.FileName);
|
||||
characterFile = ofd.FileName;
|
||||
loadCharacter();
|
||||
loadValues();
|
||||
} catch (Exception ex) {
|
||||
MessageBox.Show("Error: Could not read the character file. Original error: " + ex.Message);
|
||||
@@ -194,15 +192,26 @@ namespace d20_SRD_Spell_Lists {
|
||||
}
|
||||
}
|
||||
|
||||
private void loadCharacter() {
|
||||
XmlSerializer serializer = new XmlSerializer(typeof(Character));
|
||||
using (FileStream f = new FileStream(characterFile, FileMode.Open)) {
|
||||
character = (Character)serializer.Deserialize(f);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadValues() {
|
||||
txtCharacter.Text = character.Name;
|
||||
txtStrength.Text = character.Strength.ToString();
|
||||
txtDexterity.Text = character.Dexterity.ToString();
|
||||
txtConstitution.Text = character.Constitution.ToString();
|
||||
txtIntelligence.Text = character.Intelligence.ToString();
|
||||
txtWisdom.Text = character.Wisdom.ToString();
|
||||
txtCharisma.Text = character.Charisma.ToString();
|
||||
charClassComboBox.SelectedItem = Character.getClassName(character.CharacterClass);
|
||||
txtSpellCastingAttribute.Text = character.SpellCastingAttribute.ToString();
|
||||
charClassComboBox.SelectedItem = Character.getSpellcastingClassName(character.CharacterClass);
|
||||
}
|
||||
|
||||
private void btnAdd_Click(object sender, EventArgs e) {
|
||||
FrmAddEdit addForm = new FrmAddEdit(false, character);
|
||||
var result = addForm.ShowDialog();
|
||||
if (result == System.Windows.Forms.DialogResult.OK) {
|
||||
character.Spells.Add(addForm.spell);
|
||||
refreshSpellList();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,24 +117,6 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="prepColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="spellNameColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="componentColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="descColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="customColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="charCustomColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="mainToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
@@ -263,4 +245,46 @@
|
||||
<metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>137, 17</value>
|
||||
</metadata>
|
||||
<metadata name="prepColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="levelColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="spellNameColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="componentColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="descColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="editColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="deleteColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="prepColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="levelColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="spellNameColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="componentColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="descColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="editColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="deleteColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -5,253 +5,55 @@ using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using d20_SRD_Spell_Lists.Exceptions;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace d20_SRD_Spell_Lists.Models {
|
||||
public class Character {
|
||||
|
||||
private string charXmlFile;
|
||||
private XElement charDetails;
|
||||
public List<Spell> Spells { get; set; }
|
||||
|
||||
public Character() {
|
||||
charDetails = new XElement("character");
|
||||
charDetails.Add(new XElement("spells"));
|
||||
}
|
||||
|
||||
public Character(string _charXmlFile) {
|
||||
charXmlFile = _charXmlFile;
|
||||
charDetails = XElement.Load(charXmlFile);
|
||||
}
|
||||
|
||||
internal void save() {
|
||||
if (charXmlFile == null) {
|
||||
throw new NoCharacterFileException("Don't have a file location for the character.");
|
||||
}
|
||||
charDetails.Save(charXmlFile);
|
||||
}
|
||||
|
||||
internal XElement spells() {
|
||||
return charDetails.Element("spells");
|
||||
Spells = new List<Spell>();
|
||||
}
|
||||
|
||||
private int modifier(int score) {
|
||||
return (int)Math.Floor((score - 10) / 2.00);
|
||||
}
|
||||
|
||||
public string FileName {
|
||||
set {
|
||||
charXmlFile = value;
|
||||
}
|
||||
}
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Name {
|
||||
get {
|
||||
if (charDetails.Element("name") != null) {
|
||||
return charDetails.Element("name").Value;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("name") != null) {
|
||||
charDetails.Element("name").Value = value;
|
||||
} else {
|
||||
charDetails.Add(new XElement("name", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Strength {
|
||||
get {
|
||||
if (charDetails.Element("strength") != null) {
|
||||
return int.Parse(charDetails.Element("strength").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("strength") != null) {
|
||||
charDetails.Element("strength").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("strength", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Dexterity {
|
||||
get {
|
||||
if (charDetails.Element("dexterity") != null) {
|
||||
return int.Parse(charDetails.Element("dexterity").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("dexterity") != null) {
|
||||
charDetails.Element("dexterity").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("dexterity", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Constitution {
|
||||
get {
|
||||
if (charDetails.Element("constitution") != null) {
|
||||
return int.Parse(charDetails.Element("constitution").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("constitution") != null) {
|
||||
charDetails.Element("constitution").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("constitution", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Intelligence {
|
||||
get {
|
||||
if (charDetails.Element("intelligence") != null) {
|
||||
return int.Parse(charDetails.Element("intelligence").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("intelligence") != null) {
|
||||
charDetails.Element("intelligence").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("intelligence", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Wisdom {
|
||||
get {
|
||||
if (charDetails.Element("wisdom") != null) {
|
||||
return int.Parse(charDetails.Element("wisdom").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("wisdom") != null) {
|
||||
charDetails.Element("wisdom").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("wisdom", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int Charisma {
|
||||
get {
|
||||
if (charDetails.Element("charisma") != null) {
|
||||
return int.Parse(charDetails.Element("charisma").Value);
|
||||
}
|
||||
return 10;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("charisma") != null) {
|
||||
charDetails.Element("charisma").Value = value.ToString();
|
||||
} else {
|
||||
charDetails.Add(new XElement("charisma", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int SpellCastingAttribute {
|
||||
public string SpellCastingAttributeName {
|
||||
get {
|
||||
switch (CharacterClass) {
|
||||
case SpellCastingClasses.Bard:
|
||||
return Charisma;
|
||||
return "Charisma";
|
||||
case SpellCastingClasses.Cleric:
|
||||
return Wisdom;
|
||||
return "Wisdom";
|
||||
case SpellCastingClasses.Druid:
|
||||
return Wisdom;
|
||||
return "Wisdom";
|
||||
case SpellCastingClasses.Paladin:
|
||||
return Wisdom;
|
||||
return "Wisdom";
|
||||
case SpellCastingClasses.Ranger:
|
||||
return Wisdom;
|
||||
return "Wisdom";
|
||||
case SpellCastingClasses.Sorcerer:
|
||||
return Charisma;
|
||||
return "Charisma";
|
||||
case SpellCastingClasses.Wizard:
|
||||
return Intelligence;
|
||||
return "Intelligence";
|
||||
default:
|
||||
return Wisdom;
|
||||
return "Wisdom";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int SpellCastingAttribute { get; set; }
|
||||
|
||||
public int SpellCastingAttributeMod {
|
||||
get {
|
||||
switch (CharacterClass) {
|
||||
case SpellCastingClasses.Bard:
|
||||
return CharismaMod;
|
||||
case SpellCastingClasses.Cleric:
|
||||
return WisdomMod;
|
||||
case SpellCastingClasses.Druid:
|
||||
return WisdomMod;
|
||||
case SpellCastingClasses.Paladin:
|
||||
return WisdomMod;
|
||||
case SpellCastingClasses.Ranger:
|
||||
return WisdomMod;
|
||||
case SpellCastingClasses.Sorcerer:
|
||||
return CharismaMod;
|
||||
case SpellCastingClasses.Wizard:
|
||||
return IntelligenceMod;
|
||||
default:
|
||||
return WisdomMod;
|
||||
}
|
||||
return modifier(SpellCastingAttribute);
|
||||
}
|
||||
}
|
||||
|
||||
public SpellCastingClasses CharacterClass {
|
||||
get {
|
||||
if (charDetails.Element("class") != null) {
|
||||
return (SpellCastingClasses)Enum.Parse(typeof(SpellCastingClasses), charDetails.Element("class").Value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
set {
|
||||
if (charDetails.Element("class") != null) {
|
||||
charDetails.Element("class").Value = getClassName(value);
|
||||
} else {
|
||||
charDetails.Add(new XElement("class", getClassName(value)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int StrengthMod {
|
||||
get {
|
||||
return modifier(Strength);
|
||||
}
|
||||
}
|
||||
|
||||
public int DexterityMod {
|
||||
get {
|
||||
return modifier(Dexterity);
|
||||
}
|
||||
}
|
||||
|
||||
public int ConstitutionMod {
|
||||
get {
|
||||
return modifier(Constitution);
|
||||
}
|
||||
}
|
||||
|
||||
public int IntelligenceMod {
|
||||
get {
|
||||
return modifier(Intelligence);
|
||||
}
|
||||
}
|
||||
|
||||
public int WisdomMod {
|
||||
get {
|
||||
return modifier(Wisdom);
|
||||
}
|
||||
}
|
||||
|
||||
public int CharismaMod {
|
||||
get {
|
||||
return modifier(Charisma);
|
||||
}
|
||||
}
|
||||
public SpellCastingClasses CharacterClass { get; set; }
|
||||
|
||||
public enum SpellCastingClasses {
|
||||
Bard = 0,
|
||||
@@ -263,10 +65,14 @@ namespace d20_SRD_Spell_Lists.Models {
|
||||
Wizard = 6
|
||||
}
|
||||
|
||||
public static string getClassName(SpellCastingClasses spellCastingClass) {
|
||||
public static string getSpellcastingClassName(SpellCastingClasses spellCastingClass) {
|
||||
return Enum.GetName(typeof(SpellCastingClasses), spellCastingClass);
|
||||
}
|
||||
|
||||
public static SpellCastingClasses getSpellcastingClass(string className) {
|
||||
return (Character.SpellCastingClasses)Enum.Parse(typeof(Character.SpellCastingClasses), className);
|
||||
}
|
||||
|
||||
public int[] BonusSpells {
|
||||
get {
|
||||
int[] bs = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
@@ -282,11 +88,15 @@ namespace d20_SRD_Spell_Lists.Models {
|
||||
get {
|
||||
List<string> classes = new List<string>();
|
||||
foreach (SpellCastingClasses cl in Enum.GetValues(typeof(SpellCastingClasses))) {
|
||||
classes.Add(getClassName(cl));
|
||||
classes.Add(getSpellcastingClassName(cl));
|
||||
}
|
||||
|
||||
return classes.ToArray<string>();
|
||||
}
|
||||
}
|
||||
|
||||
public void addAllClassSpells() {
|
||||
Spells.AddRange(new MasterSpellSet().byClass(CharacterClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
163
d20 SRD Spell Lists/Models/MasterSpellSet.cs
Normal file
163
d20 SRD Spell Lists/Models/MasterSpellSet.cs
Normal file
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using d20_SRD_Spell_Lists.Exceptions;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Collections;
|
||||
|
||||
namespace d20_SRD_Spell_Lists.Models {
|
||||
public class MasterSpellSet {
|
||||
private XElement masterSpellList;
|
||||
|
||||
public MasterSpellSet() {
|
||||
loadXML(Properties.Settings.Default.MasterSpells);
|
||||
}
|
||||
|
||||
private void loadXML(string _masterXmlFile) {
|
||||
// Load the XML file.
|
||||
if (_masterXmlFile == null) {
|
||||
_masterXmlFile = Properties.Settings.Default.MasterSpells;
|
||||
}
|
||||
masterSpellList = XElement.Load(_masterXmlFile);
|
||||
}
|
||||
|
||||
public List<Spell> byClass(Character.SpellCastingClasses spellCastingClass) {
|
||||
List<Spell> spells = new List<Spell>();
|
||||
|
||||
filterMasterSpellsByClass(spellCastingClass, spells);
|
||||
|
||||
return spells;
|
||||
}
|
||||
|
||||
private void filterMasterSpellsByClass(Character.SpellCastingClasses spellCastingClass, List<Spell> spells) {
|
||||
spells.AddRange(querySpellsByClass(masterSpellList, spellCastingClass, false, false).ToList<Spell>());
|
||||
}
|
||||
|
||||
public List<Spell> byClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level) {
|
||||
List<Spell> spells = new List<Spell>();
|
||||
|
||||
filterMasterSpellsByClassAndLevel(spellCastingClass, level, spells);
|
||||
|
||||
return spells;
|
||||
}
|
||||
|
||||
private List<Spell> querySpellsByClassAndLevel(XElement list, Character.SpellCastingClasses spellCastingClass, int level, bool isCustom, bool isCharCustom) {
|
||||
string c = Character.getSpellcastingClassName(spellCastingClass);
|
||||
Regex levelReg = new Regex(@" (\d+)?");
|
||||
return (from sp in list.Elements("spell")
|
||||
let xmlLevel = (string)sp.Element("level")
|
||||
where xmlLevel != null && xmlLevel.Contains(c + " " + level.ToString())
|
||||
orderby levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value
|
||||
select new Spell {
|
||||
Name = (string)sp.Element("name"),
|
||||
AltName = (string)sp.Element("altname"),
|
||||
School = (string)sp.Element("school"),
|
||||
Subschool = (string)sp.Element("subschool"),
|
||||
Descriptor = (string)sp.Element("descriptor"),
|
||||
FullLevel = (string)sp.Element("level"),
|
||||
Level = int.Parse(levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value),
|
||||
Components = (string)sp.Element("components"),
|
||||
CastingTime = (string)sp.Element("casting_time"),
|
||||
Range = (string)sp.Element("range"),
|
||||
Effect = (string)sp.Element("effect"),
|
||||
Target = (string)sp.Element("target"),
|
||||
Duration = (string)sp.Element("duration"),
|
||||
SavingThrow = (string)sp.Element("saving_throw"),
|
||||
SpellResistance = (string)sp.Element("sp_resistance"),
|
||||
ShortDescription = (string)sp.Element("short_description"),
|
||||
ArcaneMaterialComponents = (string)sp.Element("arcane_material_components"),
|
||||
Description = (string)sp.Element("description"),
|
||||
FullText = (string)sp.Element("full_text"),
|
||||
Reference = (string)sp.Element("reference")
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
private List<Spell> querySpellsByClass(XElement list, Character.SpellCastingClasses spellCastingClass, bool isCustom, bool isCharCustom) {
|
||||
string c = Character.getSpellcastingClassName(spellCastingClass);
|
||||
Regex levelReg = new Regex(@" (\d+),?");
|
||||
return (from sp in list.Elements("spell")
|
||||
let xmlLevel = (string)sp.Element("level")
|
||||
where xmlLevel != null && xmlLevel.Contains(c)
|
||||
orderby levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value
|
||||
select new Spell {
|
||||
Name = (string)sp.Element("name"),
|
||||
AltName = (string)sp.Element("altname"),
|
||||
School = (string)sp.Element("school"),
|
||||
Subschool = (string)sp.Element("subschool"),
|
||||
Descriptor = (string)sp.Element("descriptor"),
|
||||
FullLevel = (string)sp.Element("level"),
|
||||
Level = int.Parse(levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value),
|
||||
Components = (string)sp.Element("components"),
|
||||
CastingTime = (string)sp.Element("casting_time"),
|
||||
Range = (string)sp.Element("range"),
|
||||
Effect = (string)sp.Element("effect"),
|
||||
Target = (string)sp.Element("target"),
|
||||
Duration = (string)sp.Element("duration"),
|
||||
SavingThrow = (string)sp.Element("saving_throw"),
|
||||
SpellResistance = (string)sp.Element("sp_resistance"),
|
||||
ShortDescription = (string)sp.Element("short_description"),
|
||||
ArcaneMaterialComponents = (string)sp.Element("arcane_material_components"),
|
||||
Description = (string)sp.Element("description"),
|
||||
FullText = (string)sp.Element("full_text"),
|
||||
Reference = (string)sp.Element("reference")
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
private void filterMasterSpellsByClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level, List<Spell> spells) {
|
||||
spells.AddRange(querySpellsByClassAndLevel(masterSpellList, spellCastingClass, level, false, false).ToList<Spell>());
|
||||
}
|
||||
|
||||
public int totalCount() {
|
||||
return masterSpellList.Elements("spell").Count();
|
||||
}
|
||||
|
||||
public IList asChoosableList() {
|
||||
ArrayList spells = new ArrayList();
|
||||
spells.Add(new { Name = "--", Display = "Base spells..."});
|
||||
foreach (XElement spell in (from sp in masterSpellList.Elements("spell")
|
||||
orderby (string)sp.Element("name")
|
||||
select sp)){
|
||||
spells.Add(new {
|
||||
Name = (string)spell.Element("name"),
|
||||
Display = (string)spell.Element("name") + (spell.Element("level") != null ? " (" + (string)spell.Element("level") + ")" : "")
|
||||
});
|
||||
}
|
||||
|
||||
return spells;
|
||||
}
|
||||
|
||||
public Spell byName(string name, Character.SpellCastingClasses characterClass) {
|
||||
string c = Character.getSpellcastingClassName(characterClass);
|
||||
Regex levelReg = new Regex(@" (\d+),?");
|
||||
return (from sp in masterSpellList.Elements("spell")
|
||||
let xmlLevel = (string)sp.Element("level")
|
||||
orderby (string)sp.Element("name")
|
||||
where (string)sp.Element("name") == name
|
||||
select new Spell {
|
||||
Name = (string)sp.Element("name"),
|
||||
AltName = (string)sp.Element("altname"),
|
||||
School = (string)sp.Element("school"),
|
||||
Subschool = (string)sp.Element("subschool"),
|
||||
Descriptor = (string)sp.Element("descriptor"),
|
||||
FullLevel = (string)sp.Element("level"),
|
||||
Level = int.Parse((xmlLevel.IndexOf(c) >= 0 ? levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value : levelReg.Match(xmlLevel).Groups[1].Value)),
|
||||
Components = (string)sp.Element("components"),
|
||||
CastingTime = (string)sp.Element("casting_time"),
|
||||
Range = (string)sp.Element("range"),
|
||||
Effect = (string)sp.Element("effect"),
|
||||
Target = (string)sp.Element("target"),
|
||||
Duration = (string)sp.Element("duration"),
|
||||
SavingThrow = (string)sp.Element("saving_throw"),
|
||||
SpellResistance = (string)sp.Element("sp_resistance"),
|
||||
ShortDescription = (string)sp.Element("short_description"),
|
||||
ArcaneMaterialComponents = (string)sp.Element("arcane_material_components"),
|
||||
Description = (string)sp.Element("description"),
|
||||
FullText = (string)sp.Element("full_text"),
|
||||
Reference = (string)sp.Element("reference")
|
||||
}).FirstOrDefault<Spell>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,17 +2,57 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace d20_SRD_Spell_Lists.Models {
|
||||
public class Spell {
|
||||
public bool IsPrepped { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string AltName { get; set; }
|
||||
public string School { get; set; }
|
||||
public string Subschool { get; set; }
|
||||
public string Descriptor { get; set; }
|
||||
public int Level { get; set; }
|
||||
public string FullLevel {get; set;}
|
||||
public string Components { get; set; }
|
||||
public string CastingTime { get; set; }
|
||||
public string Range { get; set; }
|
||||
public string Effect { get; set; }
|
||||
public string Target { get; set; }
|
||||
public string Duration { get; set; }
|
||||
public string SavingThrow { get; set; }
|
||||
public string SpellResistance { get; set; }
|
||||
public string ShortDescription { get; set; }
|
||||
public bool IsCustom { get; set; }
|
||||
public bool IsCharCustom { get; set; }
|
||||
public string ArcaneMaterialComponents { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string FullText { get; set; }
|
||||
public string Reference { get; set; }
|
||||
|
||||
public void fromMasterSpell(XElement spell, string className) {
|
||||
Regex levelReg = new Regex(@" (\d+)?");
|
||||
|
||||
Name = (string)spell.Element("name");
|
||||
AltName = (string)spell.Element("altname");
|
||||
School = (string)spell.Element("school");
|
||||
Subschool = (string)spell.Element("subschool");
|
||||
Descriptor = (string)spell.Element("descriptor");
|
||||
FullLevel = (string)spell.Element("level");
|
||||
Level = int.Parse(levelReg.Match(FullLevel, FullLevel.IndexOf(className)).Groups[1].Value);
|
||||
Components = (string)spell.Element("components");
|
||||
CastingTime = (string)spell.Element("casting_time");
|
||||
Range = (string)spell.Element("range");
|
||||
Effect = (string)spell.Element("effect");
|
||||
Target = (string)spell.Element("target");
|
||||
Duration = (string)spell.Element("duration");
|
||||
SavingThrow = (string)spell.Element("saving_throw");
|
||||
SpellResistance = (string)spell.Element("spell_resistance");
|
||||
ShortDescription = (string)spell.Element("short_description");
|
||||
ArcaneMaterialComponents = (string)spell.Element("arcane_material_components");
|
||||
Description = (string)spell.Element("description");
|
||||
FullText = (string)spell.Element("full_text");
|
||||
Reference = (string)spell.Element("reference");
|
||||
}
|
||||
}
|
||||
|
||||
public class SpellComparer : IEqualityComparer<Spell> {
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using d20_SRD_Spell_Lists.Exceptions;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace d20_SRD_Spell_Lists.Models {
|
||||
public class SpellSet {
|
||||
private XElement masterSpellList;
|
||||
private XElement userSpellList;
|
||||
private XElement charSpellList;
|
||||
private string userXmlFile;
|
||||
private Character character;
|
||||
|
||||
public SpellSet(string _masterXmlFile = null, string _userXmlFile = null, Character _character = null) {
|
||||
userXmlFile = _userXmlFile;
|
||||
character = _character;
|
||||
loadXML(ref _masterXmlFile);
|
||||
}
|
||||
|
||||
private void loadXML(ref string _masterXmlFile) {
|
||||
// Load the XML file.
|
||||
if (_masterXmlFile == null) {
|
||||
_masterXmlFile = Properties.Settings.Default.MasterSpells;
|
||||
}
|
||||
if (userXmlFile == null) {
|
||||
userXmlFile = Properties.Settings.Default.UserSpells;
|
||||
}
|
||||
masterSpellList = XElement.Load(_masterXmlFile);
|
||||
userSpellList = XElement.Load(userXmlFile);
|
||||
|
||||
if (character != null) {
|
||||
charSpellList = character.spells();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a spell to the application's list of custom spells.
|
||||
/// </summary>
|
||||
/// <param name="xElement">The XML details of the new spell.</param>
|
||||
public void addUserSpell(XElement xElement) {
|
||||
userSpellList.Add(xElement);
|
||||
}
|
||||
|
||||
public IList<Spell> byClass(Character.SpellCastingClasses spellCastingClass) {
|
||||
List<Spell> spells = new List<Spell>();
|
||||
|
||||
filterMasterSpellsByClass(spellCastingClass, spells);
|
||||
filterUserSpellsByClass(spellCastingClass, spells);
|
||||
filterCharacterSpellsByClass(spellCastingClass, spells);
|
||||
|
||||
removeHiddenSpells(spells);
|
||||
|
||||
return spells;
|
||||
}
|
||||
|
||||
private void filterMasterSpellsByClass(Character.SpellCastingClasses spellCastingClass, List<Spell> spells) {
|
||||
spells.AddRange(querySpellsByClass(masterSpellList, spellCastingClass, false, false).ToList<Spell>());
|
||||
}
|
||||
|
||||
private void filterCharacterSpellsByClass(Character.SpellCastingClasses spellCastingClass, List<Spell> spells) {
|
||||
if (characterSpellCount() > 0) {
|
||||
spells.AddRange(querySpellsByClass(charSpellList, spellCastingClass, false, true));
|
||||
}
|
||||
}
|
||||
|
||||
private void filterUserSpellsByClass(Character.SpellCastingClasses spellCastingClass, List<Spell> spells) {
|
||||
if (userSpellCount() > 0) {
|
||||
spells.AddRange(querySpellsByClass(userSpellList, spellCastingClass, true, false).ToList<Spell>());
|
||||
}
|
||||
}
|
||||
|
||||
private void removeHiddenSpells(List<Spell> spells) {
|
||||
if (hiddenSpellCount() > 0) {
|
||||
foreach (string hiddenSpellName in (from hp in userSpellList.Elements("hidden_spell").Elements("spell")
|
||||
select (string)hp.Element("name"))) {
|
||||
spells.RemoveAll(sp => sp.Name == hiddenSpellName);
|
||||
}
|
||||
}
|
||||
|
||||
if (hiddenCharacterSpellCount() > 0) {
|
||||
foreach (string hiddenSpellName in (from hp in charSpellList.Elements("hidden_spell").Elements("spell")
|
||||
select (string)hp.Element("name"))) {
|
||||
spells.RemoveAll(sp => sp.Name == hiddenSpellName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<Spell> byClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level) {
|
||||
List<Spell> spells = new List<Spell>();
|
||||
|
||||
filterMasterSpellsByClassAndLevel(spellCastingClass, level, spells);
|
||||
filterUserSpellsByClassAndLevel(spellCastingClass, level, spells);
|
||||
filterCharacterSpellsByClassAndLevel(spellCastingClass, level, spells);
|
||||
|
||||
removeHiddenSpells(spells);
|
||||
|
||||
return spells;
|
||||
}
|
||||
|
||||
private void filterCharacterSpellsByClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level, List<Spell> spells) {
|
||||
if (characterSpellCount() > 0) {
|
||||
spells.AddRange(querySpellsByClassAndLevel(charSpellList, spellCastingClass, level, false, true));
|
||||
}
|
||||
}
|
||||
|
||||
private void filterUserSpellsByClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level, List<Spell> spells) {
|
||||
if (userSpellCount() > 0) {
|
||||
spells.AddRange(querySpellsByClassAndLevel(userSpellList, spellCastingClass, level, true, false).ToList<Spell>());
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<Spell> querySpellsByClassAndLevel(XElement list, Character.SpellCastingClasses spellCastingClass, int level, bool isCustom, bool isCharCustom) {
|
||||
string c = Character.getClassName(spellCastingClass);
|
||||
Regex levelReg = new Regex(@" (\d+)?");
|
||||
return (from sp in list.Elements("spell")
|
||||
let xmlLevel = (string)sp.Element("level")
|
||||
let xmlComp = (string)sp.Element("components")
|
||||
let xmlDesc = (string)sp.Element("short_description")
|
||||
where xmlLevel != null && xmlLevel.Contains(c + " " + level.ToString())
|
||||
orderby levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value
|
||||
select new Spell {
|
||||
IsPrepped = false,
|
||||
Name = sp.Element("name").Value,
|
||||
Level = int.Parse(levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value),
|
||||
Components = (xmlComp != null ? xmlComp : ""),
|
||||
ShortDescription = (xmlDesc != null ? xmlDesc : ""),
|
||||
IsCustom = isCustom,
|
||||
IsCharCustom = isCharCustom
|
||||
});
|
||||
}
|
||||
|
||||
private IEnumerable<Spell> querySpellsByClass(XElement list, Character.SpellCastingClasses spellCastingClass, bool isCustom, bool isCharCustom) {
|
||||
string c = Character.getClassName(spellCastingClass);
|
||||
Regex levelReg = new Regex(@" (\d+),?");
|
||||
return (from sp in list.Elements("spell")
|
||||
let xmlLevel = (string)sp.Element("level")
|
||||
let xmlComp = (string)sp.Element("components")
|
||||
let xmlDesc = (string)sp.Element("short_description")
|
||||
where xmlLevel != null && xmlLevel.Contains(c)
|
||||
orderby levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value
|
||||
select new Spell {
|
||||
IsPrepped = false,
|
||||
Name = sp.Element("name").Value,
|
||||
Level = int.Parse(levelReg.Match(xmlLevel, xmlLevel.IndexOf(c)).Groups[1].Value),
|
||||
Components = (xmlComp != null ? xmlComp : ""),
|
||||
ShortDescription = (xmlDesc != null ? xmlDesc : ""),
|
||||
IsCustom = isCustom,
|
||||
IsCharCustom = isCharCustom
|
||||
});
|
||||
}
|
||||
|
||||
private void filterMasterSpellsByClassAndLevel(Character.SpellCastingClasses spellCastingClass, int level, List<Spell> spells) {
|
||||
spells.AddRange(querySpellsByClassAndLevel(masterSpellList, spellCastingClass, level, false, false).ToList<Spell>());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves all XML files to the system.
|
||||
/// </summary>
|
||||
public void save() {
|
||||
userSpellList.Save(userXmlFile);
|
||||
if (character != null) {
|
||||
character.save();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove a node from the application's custom spell list.
|
||||
/// </summary>
|
||||
/// <param name="nodeName">The name of the node to be searched on. Could be "name", "school", etc.</param>
|
||||
/// <param name="nodeValue">The value of the node matching the nodeName.</param>
|
||||
public void removeUserSpell(string nodeName, string nodeValue) {
|
||||
(from sp in userSpellList.Elements("spell")
|
||||
where (string)sp.Element(nodeName) == nodeValue
|
||||
select sp).Remove();
|
||||
}
|
||||
|
||||
public void hideMasterSpell(string nodeName, string nodeValue) {
|
||||
userSpellList.Add(new XElement("hidden_spell", (from msp in masterSpellList.Elements("spell")
|
||||
where (string)msp.Element(nodeName) == nodeValue
|
||||
select msp)));
|
||||
}
|
||||
|
||||
public void hideMasterSpellForCharacter(string nodeName, string nodeValue) {
|
||||
charSpellList.Add(new XElement("hidden_spell", (from msp in masterSpellList.Elements("spell")
|
||||
where (string)msp.Element(nodeName) == nodeValue
|
||||
select msp)));
|
||||
}
|
||||
|
||||
public void showMasterSpell(string nodeName, string nodeValue) {
|
||||
(from hsp in userSpellList.Elements("hidden_spell")
|
||||
where (string)hsp.Element("spell").Element(nodeName) == nodeValue
|
||||
select hsp).Remove();
|
||||
}
|
||||
|
||||
public void showMasterSpellForCharacter(string nodeName, string nodeValue) {
|
||||
(from hsp in charSpellList.Elements("hidden_spell")
|
||||
where (string)hsp.Element("spell").Element(nodeName) == nodeValue
|
||||
select hsp).Remove();
|
||||
}
|
||||
|
||||
public int hiddenSpellCount() {
|
||||
return userSpellList.Descendants("hidden_spell").Count();
|
||||
}
|
||||
|
||||
public int hiddenCharacterSpellCount() {
|
||||
if (charSpellList != null) {
|
||||
return charSpellList.Descendants("hidden_spell").Count();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int totalCount() {
|
||||
int total = masterSpellList.Elements("spell").Count() + userSpellList.Elements("spell").Count();
|
||||
if (charSpellList != null) {
|
||||
total += charSpellList.Elements("spell").Count();
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
public int masterSpellCount() {
|
||||
return masterSpellList.Elements("spell").Count();
|
||||
}
|
||||
|
||||
public int userSpellCount() {
|
||||
return userSpellList.Elements("spell").Count();
|
||||
}
|
||||
|
||||
public int characterSpellCount() {
|
||||
if (character != null) {
|
||||
return character.spells().Elements("spell").Count();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -61,13 +61,19 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Exceptions\NoCharacterFileException.cs" />
|
||||
<Compile Include="FrmCredits.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FrmCredits.Designer.cs">
|
||||
<DependentUpon>FrmCredits.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Exceptions\NoCharacterFileException.cs" />
|
||||
<Compile Include="FrmAddEdit.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FrmAddEdit.Designer.cs">
|
||||
<DependentUpon>FrmAddEdit.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -76,9 +82,12 @@
|
||||
</Compile>
|
||||
<Compile Include="Models\Character.cs" />
|
||||
<Compile Include="Models\Spell.cs" />
|
||||
<Compile Include="Models\SpellSet.cs" />
|
||||
<Compile Include="Models\MasterSpellSet.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="FrmAddEdit.resx">
|
||||
<DependentUpon>FrmAddEdit.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmCredits.resx">
|
||||
<DependentUpon>FrmCredits.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
||||
Reference in New Issue
Block a user