Example #1
0
        public ActionResult Save(SpellDataDto data)
        {
            Spell spellToUpdate;

            if (data.SelectedItem.ID == Guid.Empty)
            {
                spellToUpdate = data.SelectedItem;
            }
            else
            {
                spellToUpdate = Context.Get <Spell>(data.SelectedItem.ID);
            }
            if (data.DamageType.HasValue && !string.IsNullOrEmpty(data.DamageString))
            {
                if (spellToUpdate.Damage == null)
                {
                    spellToUpdate.Damage        = new SpellDamage();
                    spellToUpdate.Damage.Damage = new Damage();
                }
                spellToUpdate.Damage.Damage.Type = data.DamageType.Value;
                var newDiceRoll = DiceRoll.Parse(data.DamageString);
                if (spellToUpdate.Damage.Damage.Amount == null)
                {
                    spellToUpdate.Damage.Damage.Amount = newDiceRoll;
                }
                else
                {
                    spellToUpdate.Damage.Damage.Amount.FixedAmount = newDiceRoll.FixedAmount;
                    spellToUpdate.Damage.Damage.Amount.Dice        = newDiceRoll.Dice;
                }
            }//TODO: Else if by caster level
            else
            {
                spellToUpdate.Damage = null;
            }


            spellToUpdate.Range        = data.SelectedItem.Range;
            spellToUpdate.School       = data.SpellSchool.HasValue ? Context.Get <SpellSchool>(data.SpellSchool.Value) : null;
            spellToUpdate.SpellAbility = data.SpellAbility.HasValue
                ? Context.Get <SpecialAbility>(data.SpellAbility.Value)
                : null;
            spellToUpdate.SpellResistance          = data.SelectedItem.SpellResistance;
            spellToUpdate.SpellSaveType            = data.SelectedItem.SpellSaveType;
            spellToUpdate.Target                   = data.SelectedItem.Target;
            spellToUpdate.CastingTime              = data.SelectedItem.CastingTime;
            spellToUpdate.Descriptor               = data.SpellDescriptor != null && data.SpellDescriptor.Length == 1 ? Context.Get <SpellDescriptor>(data.SpellDescriptor[0]) : null;
            spellToUpdate.FixedRangeExpresedInFeet = data.SelectedItem.FixedRangeExpresedInFeet;
            spellToUpdate.Name        = data.SelectedItem.Name;
            spellToUpdate.Description = data.SelectedItem.Description;
            //spellToUpdate.CasterRequirements
            spellToUpdate.ComponentRequirements = data.Components != null && data.Components.Length > 0
                ? Context.GetList <SpellComponent>(data.Components)
                : new List <SpellComponent>();

            Context.CreateOrUpdate(spellToUpdate);
            return(RedirectToAction("Index", "Spell", new { id = spellToUpdate.ID }));
            //return View("Creator/Spell", "CreatorLayoutPage", GetSpell(spellToUpdate.ID));
        }
Example #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var input = (string)reader.Value;

            return(DiceRoll.Parse(input));
        }
Example #3
0
        public ActionResult Save(ItemDataDto data)
        {
            var      manager = new ContextManager();
            ItemBase itemToUpdate;

            if (data.SelectedItem.ID == Guid.Empty)
            {
                itemToUpdate = data.SelectedItem;
            }
            else
            {
                itemToUpdate = manager.Get <ItemBase>(data.SelectedItem.ID);
            }
            if (data.DamageType.HasValue && !string.IsNullOrEmpty(data.DamageString))
            {
                if (itemToUpdate.Damage == null)
                {
                    itemToUpdate.Damage = new Damage();
                }
                itemToUpdate.Damage.Type = data.DamageType.Value;
                var newDiceRoll = DiceRoll.Parse(data.DamageString);
                if (itemToUpdate.Damage.Amount == null)
                {
                    itemToUpdate.Damage.Amount = newDiceRoll;
                }
                else
                {
                    itemToUpdate.Damage.Amount.FixedAmount = newDiceRoll.FixedAmount;
                    itemToUpdate.Damage.Amount.Dice        = newDiceRoll.Dice;
                }
            }
            else
            {
                itemToUpdate.Damage = null;
            }
            if (data.RequiredSlots != null)
            {
                itemToUpdate.RequiresSlots = data.RequiredSlots.Select(x => new ItemSlotRequirements
                {
                    Requirement = x == -1 ? ItemSlotRequirement.WeaponHand : (ItemSlotRequirement)x
                }).ToList();
            }
            if (data.GrantedSlots != null)
            {
                itemToUpdate.HasSlots = data.GrantedSlots.Select(x => new ItemSlotRequirements
                {
                    Requirement = (ItemSlotRequirement)x
                }).ToList();
            }
            if (data.EnchantetBonuses != null)
            {
                itemToUpdate.EnchanmentsBonuses = manager.GetList <Bonus>(data.EnchantetBonuses);
            }
            if (data.EnchantetSpecialAbilities != null)
            {
                itemToUpdate.EnchanmentAbilities = manager.GetList <SpecialAbility>(data.EnchantetSpecialAbilities);
            }
            if (data.RequiresSpecialAbilities != null)
            {
                foreach (var newAbiReq in data.RequiresSpecialAbilities)
                {
                    if (itemToUpdate.RequiresAbility != null && itemToUpdate.RequiresAbility.All(x => x.SpecialAbilityGuid != newAbiReq))
                    {
                        itemToUpdate.RequiresAbility.Add(new ItemProficiency
                        {
                            SpecialAbilityGuid = newAbiReq
                        });
                    }
                }
                //TODO delete requirements if not in list
            }

            if (data.SpecialMaterial != null)
            {
                itemToUpdate.Material = manager.Get <ItemMaterial>(data.SpecialMaterial.Value);
            }
            itemToUpdate.AC = data.SelectedItem.AC;
            itemToUpdate.ArcaneSpellFailure       = data.SelectedItem.ArcaneSpellFailure;
            itemToUpdate.ArmorCheckPenelty        = data.SelectedItem.ArmorCheckPenelty;
            itemToUpdate.AttackBonus              = data.SelectedItem.AttackBonus;
            itemToUpdate.CanAttack                = data.SelectedItem.CanAttack;
            itemToUpdate.CritRange                = data.SelectedItem.CritRange;
            itemToUpdate.Description              = data.SelectedItem.Description;
            itemToUpdate.EnchanmentBonus          = data.SelectedItem.EnchanmentBonus;
            itemToUpdate.IsOneAndAHalfHanded      = data.SelectedItem.IsOneAndAHalfHanded;
            itemToUpdate.IsLightWeapon            = data.SelectedItem.IsLightWeapon;
            itemToUpdate.IsRanged                 = data.SelectedItem.IsRanged;
            itemToUpdate.Masterworked             = data.SelectedItem.Masterworked;
            itemToUpdate.IsOneAndAHalfHanded      = data.SelectedItem.IsOneAndAHalfHanded;
            itemToUpdate.IsRanged                 = data.SelectedItem.IsRanged;
            itemToUpdate.UseItemsOwnAbilistyScore = data.SelectedItem.UseItemsOwnAbilistyScore;
            itemToUpdate.Masterworked             = data.SelectedItem.Masterworked;
            itemToUpdate.MaxDexBonus              = data.SelectedItem.MaxSpeed;
            itemToUpdate.MaxSpeed                 = data.SelectedItem.MaxSpeed;
            itemToUpdate.Price              = data.SelectedItem.Price;
            itemToUpdate.RangeIncrement     = data.SelectedItem.RangeIncrement;
            itemToUpdate.Type               = data.SelectedItem.Type;
            itemToUpdate.Weight             = data.SelectedItem.Weight;
            itemToUpdate.CriticalMultiplier = data.SelectedItem.CriticalMultiplier;
            itemToUpdate.Name               = data.SelectedItem.Name;

            manager.CreateOrUpdate(itemToUpdate);
            return(RedirectToAction("Index", "Item", new { id = itemToUpdate.ID }));
            //return View("Creator/Item", "CreatorLayoutPage", GetItem(itemToUpdate.ID));
        }
Example #4
0
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var s = (string)value;

            return(DiceRoll.Parse(s));
        }
Example #5
0
        public ActionResult Save(BonusDataDto data)
        {
            Bonus itemToAddOrUpdate;

            if (data.SelectedItem.ID == Guid.Empty)
            {
                itemToAddOrUpdate = data.SelectedItem;
            }
            else
            {
                itemToAddOrUpdate = Context.Get <Bonus>(data.SelectedItem.ID);
            }
            itemToAddOrUpdate.Name                 = data.SelectedItem.Name;
            itemToAddOrUpdate.Description          = data.SelectedItem.Description;
            itemToAddOrUpdate.Type                 = data.SelectedItem.Type;
            itemToAddOrUpdate.ParentAbility        = data.SelectedItem.ParentAbility;
            itemToAddOrUpdate.ApplyTo              = data.SelectedItem.ApplyTo;
            itemToAddOrUpdate.CanTakeAsEnchantment = data.SelectedItem.CanTakeAsEnchantment;
            if (itemToAddOrUpdate.BonusValue == null)
            {
                itemToAddOrUpdate.BonusValue = new BonusToAdd();
            }

            itemToAddOrUpdate.BonusValue.Dice       = DiceRoll.Parse(data.AmountDice);
            itemToAddOrUpdate.BonusValue.FixedValue = data.SelectedItem.BonusValue.FixedValue;

            if (data.BonusToAddAbility.HasValue)
            {
                itemToAddOrUpdate.BonusValue.AbilityModifyer = Context.Get <Ability>(data.BonusToAddAbility.Value);
            }
            if (data.NewBonusToAddClassAtLevelClass != null)
            {
                if (itemToAddOrUpdate.BonusValue.ClassProgression == null)
                {
                    itemToAddOrUpdate.BonusValue.ClassProgression = new List <BonusToAddClassProgression>();
                }
                foreach (var progression in itemToAddOrUpdate.BonusValue.ClassProgression)
                {
                    foreach (var dataProgression in data.BonusToAddClassAtLevel)
                    {
                        if (progression.ID == dataProgression.Id)
                        {
                            progression.AtLevel = dataProgression.Level;
                        }
                    }
                }
                if (data.NewBonusToAddClassAtLevelClass != null)
                {
                    itemToAddOrUpdate.BonusValue.ClassProgression.Add(new BonusToAddClassProgression
                    {
                        AtLevel          = data.NewBonusToAddClassAtLevelClassLevel.GetValueOrDefault(),
                        Bonues           = DiceRoll.Parse(data.NewBonusToAddClassAtLevelClassBonues),
                        ClassProgression = Context.Get <ClassBase>(data.NewBonusToAddClassAtLevelClass.Value)
                    });
                }
            }

            Context.CreateOrUpdate(itemToAddOrUpdate);

            return(RedirectToAction("Index", "Bonus", new { id = itemToAddOrUpdate.ID }));
        }
Example #6
0
        public ActionResult Save(SpecialAbilityDataDto data)
        {
            SpecialAbility abiToCreateOrUpdate;

            if (data.SelectedItem.ID == Guid.Empty)
            {
                abiToCreateOrUpdate = data.SelectedItem;
            }
            else
            {
                abiToCreateOrUpdate = Context.Get <SpecialAbility>(data.SelectedItem.ID);
            }

            if (data.ConditionOnActivate.HasValue)
            {
                abiToCreateOrUpdate.ApplyConditionOnActivate = Context.Get <Condition>(data.ConditionOnActivate.Value);
            }
            else
            {
                abiToCreateOrUpdate.ApplyConditionOnActivate = null;
            }
            if (data.ConditionOnDeactivate.HasValue)
            {
                abiToCreateOrUpdate.ApplyConditionOnDeactivate = Context.Get <Condition>(data.ConditionOnDeactivate.Value);
            }
            else
            {
                abiToCreateOrUpdate.ApplyConditionOnDeactivate = null;
            }

            if (data.Bonuses != null)
            {
                abiToCreateOrUpdate.Bonuses = Context.GetList <Bonus>(data.Bonuses);
            }
            else
            {
                abiToCreateOrUpdate.Bonuses = null;
            }

            if (data.LimitAmountAbility.HasValue)
            {
                abiToCreateOrUpdate.Limit.Amount.Ability = Context.Get <Ability>(data.LimitAmountAbility.Value);
            }
            if (data.LimitAmountClass.HasValue && data.LimitAmountClassAtLevel != null)
            {
                abiToCreateOrUpdate.Limit.Amount.ClassProgression = new List <UsableAmountClassProgression>();
                var classUsedForProgress = Context.Get <ClassBase>(data.LimitAmountClass.Value);
                foreach (var lvl in data.LimitAmountClassAtLevel)
                {
                    abiToCreateOrUpdate.Limit.Amount.ClassProgression.Add(new UsableAmountClassProgression
                    {
                        AtLevel          = lvl,
                        ClassProgression = classUsedForProgress
                    });
                }
            }
            if (data.DurationAmountAbility.HasValue)
            {
                abiToCreateOrUpdate.Limit.Duration.DurationAbilityModifier = Context.Get <Ability>(data.DurationAmountAbility.Value);
            }

            abiToCreateOrUpdate.Name                         = data.SelectedItem.Name;
            abiToCreateOrUpdate.Description                  = data.SelectedItem.Description;
            abiToCreateOrUpdate.CanTakeAsFeat                = data.SelectedItem.CanTakeAsFeat;
            abiToCreateOrUpdate.CanTakeAsEnchantment         = data.SelectedItem.CanTakeAsEnchantment;
            abiToCreateOrUpdate.RequiredNumberOfCharges      = data.SelectedItem.RequiredNumberOfCharges;
            abiToCreateOrUpdate.RequiresSpecialAbilityActive = data.RequiredAbility;

            if (data.SelectedItem.Limit != null)
            {
                if (abiToCreateOrUpdate.Limit == null)
                {
                    abiToCreateOrUpdate.Limit          = new UsableLimit();
                    abiToCreateOrUpdate.Limit.Amount   = new UsableAmount();
                    abiToCreateOrUpdate.Limit.Duration = new Duration();
                }

                abiToCreateOrUpdate.Limit.Amount.ProvokesAttackOfOppertunity = data.SelectedItem.Limit.Amount.ProvokesAttackOfOppertunity;
                abiToCreateOrUpdate.Limit.Amount.ResetUseTimeLimtUnit        = data.SelectedItem.Limit.Amount.ResetUseTimeLimtUnit;
                abiToCreateOrUpdate.Limit.Amount.ActionRequired           = data.SelectedItem.Limit.Amount.ActionRequired;
                abiToCreateOrUpdate.Limit.Amount.FixedAmount              = data.SelectedItem.Limit.Amount.FixedAmount;
                abiToCreateOrUpdate.Limit.Amount.LimitAutoCharges         = data.SelectedItem.Limit.Amount.LimitAutoCharges;
                abiToCreateOrUpdate.Limit.Amount.VariableLimitAutoCharges = data.SelectedItem.Limit.Amount.VariableLimitAutoCharges;

                abiToCreateOrUpdate.Limit.Duration.Amount = data.SelectedItem.Limit.Duration.Amount;
                abiToCreateOrUpdate.Limit.Duration.Unit   = data.SelectedItem.Limit.Duration.Unit;
            }
            abiToCreateOrUpdate.Name = data.SelectedItem.Name;

            if (abiToCreateOrUpdate.BonusFromCharges == null)
            {
                abiToCreateOrUpdate.BonusFromCharges = new List <BonusFromCharges>();
            }
            var nrOfChargesObjects        = data.BonusFromCharges == null ? 0 : data.BonusFromCharges.Count(x => !x.IsNullOrWhiteSpace());
            var nrOfCurrentChargesObjects = abiToCreateOrUpdate.BonusFromCharges.Count;

            for (int i = 0; i < nrOfChargesObjects - nrOfCurrentChargesObjects; i++)
            {
                abiToCreateOrUpdate.BonusFromCharges.Add(new BonusFromCharges());
            }
            for (int i = 0; i < nrOfChargesObjects; i++)
            {
                abiToCreateOrUpdate.BonusFromCharges[i].NumberOfChargesForBonus = i + 1;
                var strAsDiceRoll = DiceRoll.Parse(data.BonusFromCharges[i]);
                if (abiToCreateOrUpdate.BonusFromCharges[i].Bonus != null && abiToCreateOrUpdate.BonusFromCharges[i].Bonus.ToString() != strAsDiceRoll.ToString())
                {
                    Context.Delete <DiceRoll>(abiToCreateOrUpdate.BonusFromCharges[i].Bonus.ID);
                    abiToCreateOrUpdate.BonusFromCharges[i].Bonus = strAsDiceRoll;
                }
                else if (abiToCreateOrUpdate.BonusFromCharges[i].Bonus == null)
                {
                    abiToCreateOrUpdate.BonusFromCharges[i].Bonus = strAsDiceRoll;
                }
            }
            for (int i = nrOfCurrentChargesObjects; i > nrOfChargesObjects; i--)
            {
                Context.Delete <BonusFromCharges>(abiToCreateOrUpdate.BonusFromCharges[i - 1].ID);
            }


            if (data.SelectedItem.Limit != null)
            {
                abiToCreateOrUpdate.Limit.Amount.TradeMaxTrade    = data.SelectedItem.Limit.Amount.TradeMaxTrade;
                abiToCreateOrUpdate.Limit.Amount.TradeMultiplyer  = data.SelectedItem.Limit.Amount.TradeMultiplyer;
                abiToCreateOrUpdate.Limit.Amount.TradeDoubleIfThw = data.SelectedItem.Limit.Amount.TradeDoubleIfThw;
                if (data.TradeWithId.HasValue)
                {
                    abiToCreateOrUpdate.Limit.Amount.TradeWith = Context.Get <Bonus>(data.TradeWithId.Value);
                }
            }


            Context.CreateOrUpdate(abiToCreateOrUpdate);
            return(RedirectToAction("Index", "SpecialAbility", new { id = abiToCreateOrUpdate.ID }));
            //return View("Creator/SpecialAbility", "CreatorLayoutPage", GetSpecialAbility(abiToCreateOrUpdate.ID));
        }