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)); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var input = (string)reader.Value; return(DiceRoll.Parse(input)); }
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)); }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var s = (string)value; return(DiceRoll.Parse(s)); }
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 })); }
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)); }