public void GenerateHitPoints(Random r = null, int hitDice = -1) { try { string[] splitOne = HitDice.Replace(" ", string.Empty).Split('d'); string[] splitTwo = splitOne[1].Split('+'); int diceCount = Int32.Parse(splitOne[0]); int diceValue = Int32.Parse(splitTwo[0]); int flat = splitTwo.Length == 2 ? Int32.Parse(splitTwo[1]) : 0; int hp = flat; r = r == null ? new Random() : r; for (int i = 0; i < diceCount; i++) { hp += r.Next(1, diceValue); } HitPoints = hp; } catch { HitPoints = 0; } }
private void PlayerViewModel_PlayerChanged(object sender, EventArgs e) { HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); OnPropertyChanged(null); Skills.ReplaceRange(Context.Player.GetSkills()); Scores.Update(Context.Player); ShowClasses.ChangeCanExecute(); ShowRace.ChangeCanExecute(); ShowBackground.ChangeCanExecute(); UpdateAllConditions(); UpdateCondtions(); resources.Clear(); resources.AddRange(from r in Context.Player.GetResourceInfo(true).Values select new ResourceViewModel(r, this)); resources.AddRange(from r in Context.Player.GetBonusSpells(false) select new ResourceViewModel(r, this)); UpdateResources(); features = (from f in Context.Player.GetFeatures() where f.Name != "" && !f.Hidden select f).ToList(); UpdateFeatures(); proficiencies = new List <IXML>(); proficiencies.AddRange(Context.Player.GetLanguages()); proficiencies.AddRange(Context.Player.GetToolProficiencies()); proficiencies.AddRange(from p in Context.Player.GetToolKWProficiencies() select new Feature(p, "Proficiency")); proficiencies.AddRange(from p in Context.Player.GetOtherProficiencies() select new Feature(p, "Proficiency")); UpdateProficiencies(); UpdateItems(); UpdateSpellcasting(); UpdateInventoryChoices(); UpdateJournal(); UpdateNotes(); }
public void Setup() { hitDice = new HitDice(); mockDice = new Mock <Dice>(); mockPartialRolls = new Dictionary <int, Mock <PartialRoll> >(); mockDice.Setup(d => d.Roll(It.IsAny <int>())).Returns((int q) => mockPartialRolls[q].Object); }
private void Parent_PlayerChanged(object sender, EventArgs e) { HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); Scores.Update(Context.Player); ShowClasses.ChangeCanExecute(); ShowRace.ChangeCanExecute(); ShowBackground.ChangeCanExecute(); }
public DDClass(Skills cS, string[] eq, SavingThrows[] sT, string[] tP, HitDice hD, bool iSC) { isSpellCaster = iSC; hitDice = hD; toolProficiencies = tP; savingThrows = sT; choosableSkills = cS; equipment = eq; }
// public public void AddHitDice(int dice_type, int number_of_dice) { if (HitDice.ContainsKey(dice_type)) { HitDice[dice_type] += number_of_dice; } else { HitDice[dice_type] = number_of_dice; } SetCurrentAndMaxHitPoints(); }
public Being(string _name, HitDice _hitDie, int _proficiencyBonus, int _perception, int _armorClass, int _speed, int _maxHealth, int _currentHealth = -1) { name = _name; hitDie = _hitDie; proficiencyBonus = _proficiencyBonus; initiative = 0; perception = _perception; armorClass = _armorClass; speed = _speed; health = new Health(_maxHealth, _currentHealth); statistics = new Dictionary <Trait, int>(); items = new List <Item>(); }
public PlayerInfoViewModel(PlayerModel parent) : base(parent, "Overview") { Image = ImageSource.FromResource("CB_5e.images.overview.png"); parent.PlayerChanged += Parent_PlayerChanged; Scores = new ScoresModelViewModel(Context); ResetHitDie = new Command(() => { HDBusy = true; MakeHistory(); Context.Player.UsedHitDice = new List <int>(); HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); Save(); HDBusy = false; }); ResetHD = new Command(() => { MakeHistory(); Context.Player.FailedDeathSaves = 0; Context.Player.SuccessDeathSaves = 0; OnPropertyChanged("DeathSaveFail"); OnPropertyChanged("DeathSaveSuccess"); Save(); }); ShowImage = new Command(async(par) => { await Navigation.PushAsync(new ImageViewer(par as ImageSource, Context.Player?.Portrait, Context.Player?.Name)); }); ShowClasses = new Command(async() => { List <IOGLElement> classes = new List <IOGLElement>(); foreach (PlayerClass pc in Context.Player.Classes) { classes.Add(pc.GetClass(Context)); classes.Add(pc.GetSubClass(Context)); } await Navigation.PushAsync(InfoSelectPage.Show(classes)); }, () => Context.Player?.Classes?.Count > 0); ShowRace = new Command(async() => { await Navigation.PushAsync(InfoSelectPage.Show(Context.Player.Race, Context.Player.SubRace)); }, () => Context.Player?.RaceName != null && Context.Player?.RaceName != ""); ShowBackground = new Command(async() => { await Navigation.PushAsync(InfoSelectPage.Show(Context.Player.Background)); }, () => Context.Player?.BackgroundName != null && Context.Player?.BackgroundName != ""); HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); }
public void LevelUp() { XP = 0; MaxXP = MaxXP * 2; Level += 1; Random rnd = new Random(); int k = rnd.Next(1, 6); #region Attribute UP if (k == 1) { Strenght += 2; } if (k == 2) { Dexterity += 2; } if (k == 3) { Constitution += 2; } if (k == 4) { Intelligence += 2; } if (k == 5) { Wisdom += 2; } if (k == 6) { Charisma += 2; } #endregion #region Mods calculations MODSTR = (Strenght - 10) / 2; MODDEX = (Dexterity - 10) / 2; MODCON = (Constitution - 10) / 2; MODINT = (Intelligence - 10) / 2; MODWIS = (Wisdom - 10) / 2; MODCHA = (Charisma - 10) / 2; ArmorClass = 10 + MODDEX + MODCON; try { Damage = Dice.Parse(DamageDice + MODSTR); } catch { } int additionalHealth = 0; additionalHealth = Dice.Parse(HitDice.ToString()).Roll().Value + MODCON; if (MaxHitPoints + additionalHealth > 0) { MaxHitPoints = MaxHitPoints + additionalHealth; } else { MaxHitPoints += 1; } AttackBonus = Level; MODAR = AttackBonus + MODSTR + MODDEX; #endregion }
public PlayerViewModel(BuilderContext context) : base(context) { Scores = new ScoresModelViewModel(Context); PlayerChanged += PlayerViewModel_PlayerChanged; ResetHitDie = new Command(() => { HDBusy = true; MakeHistory(); Context.Player.UsedHitDice = new List <int>(); HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); Save(); HDBusy = false; }); ResetHD = new Command(() => { MakeHistory(); Context.Player.FailedDeathSaves = 0; Context.Player.SuccessDeathSaves = 0; OnPropertyChanged("DeathSaveFail"); OnPropertyChanged("DeathSaveSuccess"); Save(); }); DeselectSkill = new Command(async() => { SkillBusy = true; SkillSearch = null; SelectedSkill = null; await Task.Delay(500); //Stupid Refereshindicator SkillBusy = false; }); Context.HistoryButtonChange += Player_HistoryButtonChange; Undo = new Command(() => { Context.Undo(); FirePlayerChanged(); Save(); }, () => { return(Context.CanUndo()); }); Redo = new Command(() => { Context.Redo(); FirePlayerChanged(); Save(); }, () => { return(Context.CanRedo()); }); ShowImage = new Command(async(par) => { await Navigation.PushAsync(new ImageViewer(par as ImageSource, Context.Player?.Portrait, Context.Player?.Name)); }); ShowClasses = new Command(async() => { List <IOGLElement> classes = new List <IOGLElement>(); foreach (PlayerClass pc in Context.Player.Classes) { classes.Add(pc.GetClass(Context)); classes.Add(pc.GetSubClass(Context)); } await Navigation.PushAsync(InfoSelectPage.Show(classes)); }, () => Context.Player?.Classes?.Count > 0); ShowRace = new Command(async() => { await Navigation.PushAsync(InfoSelectPage.Show(Context.Player.Race, Context.Player.SubRace)); }, () => Context.Player?.RaceName != null && Context.Player?.RaceName != ""); ShowBackground = new Command(async() => { await Navigation.PushAsync(InfoSelectPage.Show(Context.Player.Background)); }, () => Context.Player?.BackgroundName != null && Context.Player?.BackgroundName != ""); skills = Context.Player.GetSkills(); Skills.ReplaceRange(skills); skillSearch = null; HitDice.ReplaceRange(from h in Context.Player.GetHitDie() orderby h select new HitDieViewModel(this, h)); UpdateAllConditions(); UpdateCondtions(); resources = new List <ResourceViewModel>(); resources.AddRange(from r in Context.Player.GetResourceInfo(true).Values select new ResourceViewModel(r, this)); resources.AddRange(from r in Context.Player.GetBonusSpells(false) select new ResourceViewModel(r, this)); UpdateResources(); features = (from f in Context.Player.GetFeatures() where f.Name != "" && !f.Hidden select f).ToList(); UpdateFeatures(); proficiencies = new List <IXML>(); proficiencies.AddRange(Context.Player.GetLanguages()); proficiencies.AddRange(Context.Player.GetToolProficiencies()); proficiencies.AddRange(from p in Context.Player.GetToolKWProficiencies() select new Feature(p, "Proficiency")); proficiencies.AddRange(from p in Context.Player.GetOtherProficiencies() select new Feature(p, "Proficiency")); UpdateProficiencies(); UpdateSpellcasting(); AddCustomCondition = new Command(() => { if (CustomCondition != null && CustomCondition != "") { MakeHistory(); Context.Player.Conditions.Add(CustomCondition); UpdateCondtions(); Save(); } }, () => CustomCondition != null && CustomCondition != ""); AddCondition = new Command((par) => { if (par is OGL.Condition p) { MakeHistory(); Context.Player.Conditions.Add(p.Name + " " + ConfigManager.SourceSeperator + " " + p.Source); UpdateCondtions(); Save(); } }); RemoveCondition = new Command((par) => { if (par is OGL.Condition p) { MakeHistory(); Context.Player.Conditions.RemoveAll(s => ConfigManager.SourceInvariantComparer.Equals(s, p.Name + " " + ConfigManager.SourceSeperator + " " + p.Source)); UpdateCondtions(); Save(); } }); ResetConditions = new Command((par) => { ConditionsBusy = true; MakeHistory(); Context.Player.Conditions.Clear(); UpdateCondtions(); Save(); ConditionsBusy = false; }); DeselectResource = new Command(async() => { ResourceBusy = true; SelectedResource = null; Resources.ReplaceRange(new List <ResourceViewModel>()); resources.Clear(); resources.AddRange(from r in Context.Player.GetResourceInfo(true).Values select new ResourceViewModel(r, this)); resources.AddRange(from r in Context.Player.GetBonusSpells(false) select new ResourceViewModel(r, this)); UpdateResources(); await Task.Delay(500); //Stupid Refereshindicator ResourceBusy = false; }); LongRest = new Command(() => { MakeHistory("LongRest"); foreach (ResourceInfo r in Context.Player.GetResourceInfo(true).Values) { if (r.Recharge >= RechargeModifier.LongRest) { Context.Player.SetUsedResources(r.ResourceID, 0); } } foreach (ModifiedSpell ms in Context.Player.GetBonusSpells()) { if (ms.RechargeModifier >= RechargeModifier.LongRest) { Context.Player.SetUsedResources(ms.getResourceID(), 0); } } DeselectResource.Execute(null); }); ShortRest = new Command(() => { MakeHistory("ShortRest"); foreach (ResourceInfo r in Context.Player.GetResourceInfo(true).Values) { if (r.Recharge >= RechargeModifier.ShortRest) { Context.Player.SetUsedResources(r.ResourceID, 0); } } foreach (ModifiedSpell ms in Context.Player.GetBonusSpells()) { if (ms.RechargeModifier >= RechargeModifier.ShortRest) { Context.Player.SetUsedResources(ms.getResourceID(), 0); } } DeselectResource.Execute(null); }); UpdateJournal(); UpdateNotes(); NewNote = new Command(() => { if (Note != null) { MakeHistory(); Context.Player.Journal.Add(Note); RefreshNotes.Execute(null); Save(); } }, () => Note != null && Note != ""); SaveNote = new Command(() => { if (selectedNote >= 0) { MakeHistory(); if (Note != null && Note != "") { Context.Player.Journal[selectedNote] = Note; } else { Context.Player.Journal.RemoveAt(selectedNote); } RefreshNotes.Execute(null); Save(); } }, () => selectedNote >= 0); RefreshNotes = new Command(() => { NotesBusy = true; UpdateNotes(); NotesBusy = false; }); RefreshJournal = new Command(() => { JournalBusy = true; UpdateJournal(); JournalBusy = false; }); }
public override void WritePropertyXML(XmlWriter xmlWriter) { base.WritePropertyXML(xmlWriter); xmlWriter.WriteStartElement("Type"); xmlWriter.WriteString(Methods.GetCreatureTypeString(Type)); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("ChallengeRating"); xmlWriter.WriteString(ChallengeRating.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("AttackSets"); foreach (AttackSet attackSet in AttackSets) { attackSet.WriteXML(xmlWriter); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Strength"); xmlWriter.WriteString(Strength.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Dexterity"); xmlWriter.WriteString(Dexterity.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Constitution"); xmlWriter.WriteString(Constitution.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Intelligence"); xmlWriter.WriteString(Intelligence.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Wisdom"); xmlWriter.WriteString(Wisdom.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Charisma"); xmlWriter.WriteString(Charisma.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("BaseAttackBonus"); xmlWriter.WriteString(BaseAttackBonus.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("GrappleModifier"); xmlWriter.WriteString(GrappleModifier.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("HitPoints"); xmlWriter.WriteString(HitPoints.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("HitDice"); xmlWriter.WriteString(HitDice.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("HitDieType"); xmlWriter.WriteString(Methods.GetDieTypeString(HitDieType)); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("ArmorClass"); xmlWriter.WriteString(ArmorClass.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("TouchArmorClass"); xmlWriter.WriteString(TouchArmorClass.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("FlatFootedArmorClass"); xmlWriter.WriteString(FlatFootedArmorClass.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Speed"); Speed.WriteXML(xmlWriter); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("FortitudeSave"); xmlWriter.WriteString(FortitudeSave.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("ReflexSave"); xmlWriter.WriteString(ReflexSave.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("WillSave"); xmlWriter.WriteString(WillSave.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Feats"); foreach (string feat in Feats) { xmlWriter.WriteStartElement("Feat"); xmlWriter.WriteString(feat); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Space"); xmlWriter.WriteString(Space.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Reach"); xmlWriter.WriteString(Reach.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Size"); xmlWriter.WriteString(Methods.GetSizeString(Size)); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("DamageReductions"); foreach (DamageReduction dr in DamageReductions) { dr.WriteXML(xmlWriter); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("Immunities"); Immunities.WriteXML(xmlWriter); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("EnergyResistances"); foreach (EnergyResistance er in EnergyResistances) { er.WriteXML(xmlWriter); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("SpellResistance"); xmlWriter.WriteString(SpellResistance.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("FastHealing"); xmlWriter.WriteString(FastHealing.ToString()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("SpecialAttacks"); xmlWriter.WriteString(SpecialAttacks); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("SpecialQualities"); xmlWriter.WriteString(String.Join(", ", SpecialQualities)); xmlWriter.WriteEndElement(); }
public override void WhenDeactivatedOn(Sheet c) { c.hitDice.Remove(last); last = null; }
public override void WhenActivatedOn(Sheet c) { last = new HitDice(sides); c.hitDice.Add(last); }