예제 #1
0
        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;
            }
        }
예제 #2
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();
        }
예제 #3
0
        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);
        }
예제 #4
0
 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();
 }
예제 #5
0
파일: Class.cs 프로젝트: CyberSpiral/D-D
 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;
 }
예제 #6
0
파일: Health.cs 프로젝트: mcmelmon/archfey
    // 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();
    }
예제 #7
0
 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>();
 }
예제 #8
0
 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));
 }
예제 #9
0
        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
        }
예제 #10
0
        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;
            });
        }
예제 #11
0
        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();
        }
예제 #12
0
 public override void WhenDeactivatedOn(Sheet c)
 {
     c.hitDice.Remove(last);
     last = null;
 }
예제 #13
0
        public override void WhenActivatedOn(Sheet c)
        {
            last = new HitDice(sides);

            c.hitDice.Add(last);
        }