public void CreateAllMetamagicsTest() { // Create a new Human character. Character objCharacter = new Character(); objCharacter.LoadMetatype(Guid.Parse("e28e7075-f635-4c02-937c-e4fc61c51602")); TreeNode objNode = new TreeNode(); ContextMenuStrip cmsGear = new ContextMenuStrip(); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstTreeNodes = new List<TreeNode>(); XmlDocument objXmlDocument = XmlManager.Instance.Load("metamagics.xml"); foreach (XmlNode objXmlNode in objXmlDocument.SelectNodes("/chummer/metamagics/metamagic")) { Metamagic objMetamagic = new Metamagic(objCharacter); objMetamagic.Create(objXmlNode, objCharacter, objNode, Improvement.ImprovementSource.Metamagic); } }
private void tsMetamagicAddMetamagic_Click(object sender, EventArgs e) { if (treMetamagic.SelectedNode.Level != 0) return; int intGrade = 0; foreach (InitiationGrade objGrade in _objCharacter.InitiationGrades) { if (objGrade.InternalId == treMetamagic.SelectedNode.Tag.ToString()) { intGrade = objGrade.Grade; break; } } frmSelectMetamagic frmPickMetamagic = new frmSelectMetamagic(_objCharacter); if (_objCharacter.RESEnabled) frmPickMetamagic.WindowMode = frmSelectMetamagic.Mode.Echo; frmPickMetamagic.ShowDialog(this); // Make sure a value was selected. if (frmPickMetamagic.DialogResult == DialogResult.Cancel) return; string strMetamagic = frmPickMetamagic.SelectedMetamagic; XmlDocument objXmlDocument = new XmlDocument(); XmlNode objXmlMetamagic; TreeNode objNode = new TreeNode(); Metamagic objNewMetamagic = new Metamagic(_objCharacter); Improvement.ImprovementSource objSource; if (_objCharacter.MAGEnabled) { objXmlDocument = XmlManager.Instance.Load("metamagic.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/metamagics/metamagic[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Metamagic; } else { objXmlDocument = XmlManager.Instance.Load("echoes.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/echoes/echo[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Echo; } objNewMetamagic.Create(objXmlMetamagic, _objCharacter, objNode, objSource); objNewMetamagic.Grade = intGrade; objNode.ContextMenuStrip = cmsInitiationNotes; if (objNewMetamagic.InternalId == Guid.Empty.ToString()) return; _objCharacter.Metamagics.Add(objNewMetamagic); treMetamagic.SelectedNode.Nodes.Add(objNode); treMetamagic.SelectedNode.Expand(); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickMetamagic.AddAgain) cmdAddMetamagic_Click(sender, e); }
private void cmdAddMetamagic_Click(object sender, EventArgs e) { // Character can only have a number of Metamagics/Echoes equal to their Initiate Grade. Additional ones cost Karma. bool blnPayWithKarma = false; int intCount = 0; // Count the number of free Metamagics the character has and compare it to their Initiate Grade. If they have reached their limit, a new one is added for Karma. foreach (Metamagic objCharacterMetamagic in _objCharacter.Metamagics) { if (!objCharacterMetamagic.PaidWithKarma) intCount++; } // Make sure the character has Initiated. if (Convert.ToInt32(lblInitiateGrade.Text) == 0) { if (_objCharacter.MAGEnabled) MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotSelectMetamagic"), LanguageManager.Instance.GetString("MessageTitle_CannotSelectMetamagic"), MessageBoxButtons.OK, MessageBoxIcon.Information); else if (_objCharacter.RESEnabled) MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotSelectEcho"), LanguageManager.Instance.GetString("MessageTitle_CannotSelectEcho"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Character can only have MAG/RES + Grade Metamagics. Do not let them go beyond this limit. if (intCount + 1 > Convert.ToInt32(lblInitiateGrade.Text)) { string strMessage = ""; string strTitle = ""; int intGrade = Convert.ToInt32(lblInitiateGrade.Text); int intAttribute = 0; if (_objCharacter.MAGEnabled) intAttribute = _objCharacter.MAG.TotalValue; else intAttribute = _objCharacter.RES.TotalValue; if (intCount + 1 > intAttribute + intGrade) { if (_objCharacter.MAGEnabled) { strMessage = LanguageManager.Instance.GetString("Message_AdditionalMetamagicLimit"); strTitle = LanguageManager.Instance.GetString("MessageTitle_AdditionalMetamagic"); } else if (_objCharacter.RESEnabled) { strMessage = LanguageManager.Instance.GetString("Message_AdditionalEchoLimit"); strTitle = LanguageManager.Instance.GetString("MessageTitle_CannotSelectEcho"); } MessageBox.Show(strMessage, strTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } // Additional Metamagics beyond the standard 1 per Grade cost additional Karma, so ask if the user wants to spend the additional Karma. if (intCount >= Convert.ToInt32(lblInitiateGrade.Text)) { string strMessage = ""; string strTitle = ""; if (_objCharacter.MAGEnabled) { strMessage = LanguageManager.Instance.GetString("Message_AdditionalMetamagic").Replace("{0}", _objOptions.KarmaMetamagic.ToString()); strTitle = LanguageManager.Instance.GetString("MessageTitle_AdditionalMetamagic"); } else if (_objCharacter.RESEnabled) { strMessage = LanguageManager.Instance.GetString("Message_AdditionalEcho").Replace("{0}", _objOptions.KarmaMetamagic.ToString()); strTitle = LanguageManager.Instance.GetString("MessageTitle_AdditionalEcho"); } if (MessageBox.Show(strMessage, strTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; else blnPayWithKarma = true; } frmSelectMetamagic frmPickMetamagic = new frmSelectMetamagic(_objCharacter); if (_objCharacter.RESEnabled) frmPickMetamagic.WindowMode = frmSelectMetamagic.Mode.Echo; frmPickMetamagic.ShowDialog(this); // Make sure a value was selected. if (frmPickMetamagic.DialogResult == DialogResult.Cancel) return; string strMetamagic = frmPickMetamagic.SelectedMetamagic; XmlDocument objXmlDocument = new XmlDocument(); XmlNode objXmlMetamagic; TreeNode objNode = new TreeNode(); Metamagic objMetamagic = new Metamagic(_objCharacter); Improvement.ImprovementSource objSource; if (_objCharacter.MAGEnabled) { objXmlDocument = XmlManager.Instance.Load("metamagic.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/metamagics/metamagic[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Metamagic; } else { objXmlDocument = XmlManager.Instance.Load("echoes.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/echoes/echo[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Echo; } objMetamagic.Create(objXmlMetamagic, _objCharacter, objNode, objSource); objNode.ContextMenuStrip = cmsMetamagic; if (objMetamagic.InternalId == Guid.Empty.ToString()) return; objMetamagic.PaidWithKarma = blnPayWithKarma; _objCharacter.Metamagics.Add(objMetamagic); treMetamagic.Nodes.Add(objNode); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickMetamagic.AddAgain) cmdAddMetamagic_Click(sender, e); }
private void tsMetamagicAddMetamagic_Click(object sender, EventArgs e) { // Character can only have a number of Metamagics/Echoes equal to their Initiate Grade. Additional ones cost Karma. bool blnPayWithKarma = false; string strType = ""; if (treMetamagic.SelectedNode.Level != 0) return; int intGrade = 0; foreach (InitiationGrade objGrade in _objCharacter.InitiationGrades) { if (objGrade.InternalId == treMetamagic.SelectedNode.Tag.ToString()) { intGrade = objGrade.Grade; break; } } // Evaluate each object foreach (Metamagic objMetamagic in _objCharacter.Metamagics) { if (objMetamagic.Grade == intGrade) blnPayWithKarma = true; } foreach (Spell objSpell in _objCharacter.Spells) { if (objSpell.Grade == intGrade) blnPayWithKarma = true; } // Additional Metamagics beyond the standard 1 per Grade cost additional Karma, so ask if the user wants to spend the additional Karma. if (blnPayWithKarma && _objCharacter.Karma < _objOptions.KarmaMetamagic) { // Make sure the Karma expense would not put them over the limit. MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughKarma"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughKarma"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (_objCharacter.MAGEnabled && blnPayWithKarma) { if (!ConfirmKarmaExpense(LanguageManager.Instance.GetString("Message_ConfirmKarmaExpenseSpend").Replace("{0}", LanguageManager.Instance.GetString("String_Metamagic")).Replace("{1}", _objOptions.KarmaSpell.ToString()))) return; } else if (blnPayWithKarma) { if (!ConfirmKarmaExpense(LanguageManager.Instance.GetString("Message_ConfirmKarmaExpenseSpend").Replace("{0}", LanguageManager.Instance.GetString("String_Echo")).Replace("{1}", _objOptions.KarmaSpell.ToString()))) return; } frmSelectMetamagic frmPickMetamagic = new frmSelectMetamagic(_objCharacter); if (_objCharacter.RESEnabled) frmPickMetamagic.WindowMode = frmSelectMetamagic.Mode.Echo; frmPickMetamagic.ShowDialog(this); // Make sure a value was selected. if (frmPickMetamagic.DialogResult == DialogResult.Cancel) return; string strMetamagic = frmPickMetamagic.SelectedMetamagic; XmlDocument objXmlDocument = new XmlDocument(); XmlNode objXmlMetamagic; TreeNode objNode = new TreeNode(); Metamagic objNewMetamagic = new Metamagic(_objCharacter); Improvement.ImprovementSource objSource; if (_objCharacter.MAGEnabled) { objXmlDocument = XmlManager.Instance.Load("metamagic.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/metamagics/metamagic[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Metamagic; } else { objXmlDocument = XmlManager.Instance.Load("echoes.xml"); objXmlMetamagic = objXmlDocument.SelectSingleNode("/chummer/echoes/echo[name = \"" + strMetamagic + "\"]"); objSource = Improvement.ImprovementSource.Echo; } objNewMetamagic.Create(objXmlMetamagic, _objCharacter, objNode, objSource); objNewMetamagic.Grade = intGrade; objNode.ContextMenuStrip = cmsInitiationNotes; if (objNewMetamagic.InternalId == Guid.Empty.ToString()) return; _objCharacter.Metamagics.Add(objNewMetamagic); if (blnPayWithKarma) { // Create the Expense Log Entry. ExpenseLogEntry objEntry = new ExpenseLogEntry(); objEntry.Create(_objOptions.KarmaMetamagic * -1, strType + " " + frmPickMetamagic.SelectedMetamagic, ExpenseType.Karma, DateTime.Now); _objCharacter.ExpenseEntries.Add(objEntry); ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateKarma(KarmaExpenseType.AddMetamagic, objNewMetamagic.InternalId); objEntry.Undo = objUndo; // Adjust the character's Karma total. _objCharacter.Karma -= _objOptions.KarmaMetamagic; } treMetamagic.SelectedNode.Nodes.Add(objNode); treMetamagic.SelectedNode.Expand(); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickMetamagic.AddAgain) cmdAddMetamagic_Click(sender, e); }