示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }