protected void CalculateKoef(ICanBeEnchanted itemToEnchant) { var enchantmentDamageKoef = 1 + itemToEnchant.EnchantmentLevel * (BaseEnchantmentValue + EnchantmentValueEnc / 2 * (1 + itemToEnchant.EnchantmentLevel)); itemToEnchant.MainStat.EnchantKoef = enchantmentDamageKoef; itemToEnchant.UpdateGoldValueKoef(); }
public double GetEnchantChance(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) { var levelDiff = itemToEnchant.Level >= scrollOfEnchant.Level ? itemToEnchant.Level - scrollOfEnchant.Level : 0; var enchantChance = BaseEnchantChance * Math.Pow(EnchantmentChanceKoef, itemToEnchant.EnchantmentLevel + levelDiff); return(enchantChance); }
public bool CanBeEnchantedWith(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) { if (scrollOfEnchant is ScrollOfEnchantWeapon && itemToEnchant is Weapon || scrollOfEnchant is ScrollOfEnchantArmor && itemToEnchant is Armor) { return(true); } return(false); }
public bool TryEnchant(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) { var enchantResult = Dice.TryGetChance(GetEnchantChance(itemToEnchant, scrollOfEnchant)); if (enchantResult) { SetEnchantmentLevel(itemToEnchant, itemToEnchant.EnchantmentLevel + 1); return(true); } else { return(false); } }
private void УлучшитьToolStripMenuItem_Click(object sender, EventArgs e) { var item = GetSelectedItem(); if (item == null) return; if (item is ICanBeEnchanted itemToEnchant) { _itemToEnchant = itemToEnchant; UpdateItemToEnchantSlot(_itemToEnchant); if (_scrollOfEnchant != null && !InventoryController.CanBeEnchantedWith(_itemToEnchant, _scrollOfEnchant)) { _scrollOfEnchant = null; SetPictureBox(ScrollOfEnchantSlot, null); } } else if (item is ScrollOfEnchant scrollOfEnchant) { if (_itemToEnchant == null || InventoryController.CanBeEnchantedWith(_itemToEnchant, scrollOfEnchant)) { _scrollOfEnchant = scrollOfEnchant; SetPictureBox(ScrollOfEnchantSlot, scrollOfEnchant); } } if (_itemToEnchant != null && _scrollOfEnchant != null) { EnchantChanceLabel.Text = InventoryController.GetItemEnchantChance(_itemToEnchant, _scrollOfEnchant) .ToPercentString(2); EnchantButton.Text = $"Улучшить на +{_itemToEnchant.EnchantmentLevel + 1}"; } else { EnchantChanceLabel.Text = ""; EnchantButton.Text = ""; } }
public void SetEnchantmentLevel(ICanBeEnchanted itemToEnchant, int newEnchantmentLevel) { itemToEnchant.EnchantmentLevel = newEnchantmentLevel; CalculateKoef(itemToEnchant); }
public bool CanBeEnchantedWith(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) => ForgeService.CanBeEnchantedWith(itemToEnchant, scrollOfEnchant);
public double GetItemEnchantChance(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) => ForgeService.EnchantManager.GetEnchantChance(itemToEnchant, scrollOfEnchant);
// TODO : Обобщить для интерфейса ICanBeEnchanted<TScrollOfEnchant>. public bool EnchantWeapon(ICanBeEnchanted itemToEnchant, ScrollOfEnchant scrollOfEnchant) => ForgeService.EnchantItem(itemToEnchant, scrollOfEnchant);
private void UpdateItemToEnchantSlot(ICanBeEnchanted itemToEnchant) { SetPictureBox(ItemToEnchantSlot, itemToEnchant); }