/// <summary> /// Vends l'équipement du type donné possédé par le héros pour un certain pourcentage /// de sa valeur d'origine. /// </summary> public ShopTransactionResult Sell(EntityHero hero, EquipmentType equipKind) { EquipmentModel model = null; // Vérifie la distance au shop. float dst = Vector2.Distance(hero.Position, m_owner.Position); if (dst > m_shopRange) { return(ShopTransactionResult.NotInShopRange); } switch (equipKind) { //case EquipmentType.Amulet: model = (hero.Amulet == null ? null : hero.Amulet.Model); hero.Amulet = null; break; case EquipmentType.Armor: model = (hero.Armor == null ? null : hero.Armor.Model); hero.Armor = null; break; case EquipmentType.Boots: model = (hero.Boots == null ? null : hero.Boots.Model); hero.Boots = null; break; case EquipmentType.Weapon: model = (hero.Weapon == null ? null : hero.Weapon.Model); hero.Weapon = null; break; case EquipmentType.WeaponEnchant: if (hero.Weapon == null) { model = null; } else if (hero.Weapon.Enchant == null) { model = null; } else { model = hero.Weapon.Enchant; } if (model != null) { hero.Weapon.Enchant = null; } break; case EquipmentType.Consummable: return(ShopTransactionResult.ItemDoesNotExist); } // Vérifie que le héros possède un équipement. if (model == null) { return(ShopTransactionResult.NoItemToSell); } float factor = GameServer.GetScene().Constants.Structures.Shops.SellingPriceFactor; hero.PA += factor * model.Price; return(ShopTransactionResult.Success); }
/// <summary> /// Achète un consommable pour le héros donné, et le place dans le slot donné. /// </summary> public ShopTransactionResult PurchaseConsummable(EntityHero hero, int consummableId, int slot) { EquipmentModel equip = GetEquipmentById(consummableId); if (equip == null || equip.Type != EquipmentType.Consummable) { return(ShopTransactionResult.ItemDoesNotExist); } ConsummableModel model = (ConsummableModel)equip; if (equip.Price > hero.PA) { return(ShopTransactionResult.NotEnoughMoney); } float dst = Vector2.Distance(hero.Position, m_owner.Position); if (dst > m_shopRange) { return(ShopTransactionResult.NotInShopRange); } // Slot out of range : erreur if (slot < 0 || slot >= hero.Consummables.Length) { return(ShopTransactionResult.ProvidedSlotDoesNotExist); } bool emptySlot = hero.Consummables[slot].Model.ConsummableType == ConsummableType.Empty; // Si un consommable d'un autre type est dans le slot, erreur if (!emptySlot && (hero.Consummables[slot].Model.ConsummableType != model.ConsummableType)) { return(ShopTransactionResult.NoSlotAvailableOnHero); } // Dépassement de la stack du consommable : erreur if (hero.Consummables[slot].Count >= hero.Consummables[slot].Model.MaxStackSize) { return(ShopTransactionResult.StackOverflow); } // Achat !! hero.Consummables[slot].Model = model; hero.Consummables[slot].Count++; hero.PA -= equip.Price; return(ShopTransactionResult.Success); }
/// <summary> /// Achète un objet d'id donné au shop. /// </summary> /// <param name="equipId"></param> /// <returns></returns> public ShopTransactionResult Purchase(EntityHero hero, int equipId) { EquipmentModel equip = GetEquipmentById(equipId); if (equip == null) { return(ShopTransactionResult.ItemDoesNotExist); } if (equip.Price > hero.PA) { return(ShopTransactionResult.NotEnoughMoney); } float dst = Vector2.Distance(hero.Position, m_owner.Position); if (dst > m_shopRange) { return(ShopTransactionResult.NotInShopRange); } // Equipe l'arme au héros. switch (equip.Type) { /*case EquipmentType.Amulet: * if (hero.Amulet != null) * return ShopTransactionResult.NoSlotAvailableOnHero; * hero.Amulet = new Amulet(hero, (PassiveEquipmentModel)equip); * break;*/ case EquipmentType.Armor: if (hero.Armor != null) { return(ShopTransactionResult.NoSlotAvailableOnHero); } hero.Armor = new Armor(hero, (PassiveEquipmentModel)equip); break; case EquipmentType.Boots: if (hero.Boots != null) { return(ShopTransactionResult.NoSlotAvailableOnHero); } hero.Boots = new Boots(hero, (PassiveEquipmentModel)equip); break; case EquipmentType.Weapon: if (hero.Weapon != null) { return(ShopTransactionResult.NoSlotAvailableOnHero); } hero.Weapon = new Weapon(hero, (WeaponModel)equip); break; case EquipmentType.WeaponEnchant: if (hero.Weapon == null) { return(ShopTransactionResult.EnchantForNoWeapon); } if (hero.Weapon.Enchant != null) { return(ShopTransactionResult.NoSlotAvailableOnHero); } hero.Weapon.Enchant = (WeaponEnchantModel)equip; break; } hero.PA -= equip.Price; return(ShopTransactionResult.Success); }