Esempio n. 1
0
    /// <inheritdoc/>
    public bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (player.PlayerState.CurrentState != PlayerState.EnteredWorld)
        {
            return(false);
        }

        // Check Requirements
        if (!player.CompliesRequirements(item))
        {
            return(false);
        }

        var skill = this.GetLearnableSkill(item, player.GameContext.Configuration);

        if (skill is null || player.SkillList !.ContainsSkill(skill.Number.ToUnsigned()))
        {
            return(false);
        }

        player.SkillList.AddLearnedSkill(skill);
        player.Inventory !.RemoveItem(item);
        player.PersistenceContext.Delete(item);
        return(true);
    }
Esempio n. 2
0
        /// <inheritdoc/>
        public override bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                player.ViewPlugIns.GetPlugIn <IDrinkAlcoholPlugIn>()?.DrinkAlcohol();
                return(true);
            }

            return(false);
        }
        /// <inheritdoc />
        public override bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                player.ViewPlugIns.GetPlugIn <IUpdateCurrentManaPlugIn>()?.UpdateCurrentMana();
                return(true);
            }

            return(false);
        }
Esempio n. 4
0
        /// <inheritdoc/>
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                this.Recover(player);
                return(true);
            }

            return(false);
        }
        /// <inheritdoc/>
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                // maybe instead of calling UpdateCurrentHealth etc. provide a more general method where we pass this.CurrentAttribute. The view can then decide what to do with it.
                player.ViewPlugIns.GetPlugIn <IUpdateCurrentHealthPlugIn>()?.UpdateCurrentHealth();
                return(true);
            }

            return(false);
        }
        /// <inheritdoc />
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                this.healthPotionConsumeHandler.Recover(player);
                this.shieldPotionConsumeHandler.Recover(player);
                return(true);
            }

            return(false);
        }
Esempio n. 7
0
    /// <inheritdoc/>
    public virtual bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (!this.CheckPreconditions(player, item))
        {
            return(false);
        }

        this.ConsumeSourceItem(player, item);

        return(true);
    }
Esempio n. 8
0
        /// <inheritdoc/>
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                var recabs = (player.Attributes[this.MaximumAttribute] * this.RecoverPercent / 100) + this.GetAdditionalRecover(player);
                player.Attributes[this.CurrentAttribute] = (uint)Math.Min(player.Attributes[this.MaximumAttribute], player.Attributes[this.CurrentAttribute] + recabs);
                return(true);
            }

            return(false);
        }
        /// <inheritdoc />
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (base.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                var targetMap = player.CurrentMap.Definition.SafezoneMap ?? player.SelectedCharacter.CharacterClass.HomeMap;
                var exitGate  = targetMap.ExitGates.Where(g => g.IsSpawnGate).SelectRandom();
                player.WarpTo(exitGate);
                return(true);
            }

            return(false);
        }
Esempio n. 10
0
    /// <inheritdoc />
    public override bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (base.ConsumeItem(player, item, targetItem, fruitUsage))
        {
            if (player.MagicEffectList.ActiveEffects.TryGetValue(PoisonEffectNumber, out var effect))
            {
                effect.Dispose();
            }

            return(true);
        }

        return(false);
    }
Esempio n. 11
0
        /// <inheritdoc />
        public override bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
        {
            if (!this.CheckPreconditions(player, item))
            {
                return(false);
            }

            var isAdding      = fruitUsage != FruitUsage.RemovePoints;
            var statAttribute = this.GetStatAttribute(item);

            if (player.Level < 10 || item.Level > 4)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPrevented : FruitConsumptionResult.MinusPrevented, 0, statAttribute);
                return(false);
            }

            var statAttributeDefinition = player.SelectedCharacter !.CharacterClass?.StatAttributes.FirstOrDefault(a =>
                                                                                                                   a.IncreasableByPlayer && a.Attribute == statAttribute);

            if (statAttributeDefinition is null)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPrevented : FruitConsumptionResult.MinusPrevented, 0, statAttribute);
                return(false);
            }

            if (player.Inventory !.EquippedItems.Any())
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?.ShowResponse(FruitConsumptionResult.PreventedByEquippedItems, 0, statAttribute);
                return(false);
            }

            var maximumRemainingPoints = player.SelectedCharacter.GetMaximumFruitPoints()
                                         - (isAdding
                                             ? player.SelectedCharacter.UsedFruitPoints
                                             : player.SelectedCharacter.UsedNegFruitPoints);

            if (maximumRemainingPoints <= 0)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPreventedByMaximum : FruitConsumptionResult.MinusPreventedByMaximum, 0, statAttribute);
                return(false);
            }

            if (!isAdding && player.Attributes ![statAttribute] <= statAttributeDefinition.BaseValue)
Esempio n. 12
0
        /// <inheritdoc/>
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (player.PlayerState.CurrentState != PlayerState.EnteredWorld)
            {
                return(false);
            }

            if (targetItem is null)
            {
                return(false);
            }

            if (targetItem.ItemSlot <= InventoryConstants.LastEquippableItemSlotIndex)
            {
                // It shouldn't be possible to upgrade an equipped item.
                // The original server allowed this, however people managed to downgrade their maxed out weapons to +6 when some
                // visual bugs on the client occured :D Example: On the server side there is a jewel of bless on a certain slot,
                // but client shows a health potion. When the client then consumes the potion it would apply the bless to item slot 0.
                return(false);
            }

            if (!this.CheckPreconditions(player, item))
            {
                return(false);
            }

            if (!this.ModifyItem(targetItem, player.PersistenceContext))
            {
                return(false);
            }

            this.ConsumeSourceItem(player, item);

            player.ViewPlugIns.GetPlugIn <IItemUpgradedPlugIn>()?.ItemUpgraded(targetItem);
            return(true);
        }
Esempio n. 13
0
        /// <summary>
        /// Handles the consume request.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="inventorySlot">The inventory slot.</param>
        /// <param name="inventoryTargetSlot">The inventory target slot.</param>
        /// <param name="fruitUsage">The fruit usage.</param>
        public void HandleConsumeRequest(Player player, byte inventorySlot, byte inventoryTargetSlot, FruitUsage fruitUsage)
        {
            Item item = player.Inventory.GetItem(inventorySlot);

            if (item == null)
            {
                player.ViewPlugIns.GetPlugIn <IRequestedItemConsumptionFailedPlugIn>()?.RequestedItemConsumptionFailed();
                return;
            }

            this.InitializeConsumeHandlersIfRequired(player.GameContext);
            if (!this.consumeHandlers.TryGetValue(item.Definition, out var consumeHandler))
            {
                player.ViewPlugIns.GetPlugIn <IRequestedItemConsumptionFailedPlugIn>()?.RequestedItemConsumptionFailed();
                return;
            }

            var targetItem = player.Inventory.GetItem(inventoryTargetSlot);

            if (player.GameContext.PlugInManager.GetPlugInPoint <IItemConsumingPlugIn>() is { } plugInPoint)
            {
                var eventArgs = new CancelEventArgs();
                plugInPoint.ItemConsuming(player, item, targetItem, eventArgs);
                if (eventArgs.Cancel)
                {
                    return;
                }
            }

            if (!consumeHandler.ConsumeItem(player, item, targetItem, fruitUsage))
            {
                player.ViewPlugIns.GetPlugIn <IRequestedItemConsumptionFailedPlugIn>()?.RequestedItemConsumptionFailed();
                return;
            }

            if (item.Durability == 0)
            {
                player.Inventory.RemoveItem(item);
                player.ViewPlugIns.GetPlugIn <Views.Inventory.IItemRemovedPlugIn>()?.RemoveItem(inventorySlot);
            }
            else
            {
                player.ViewPlugIns.GetPlugIn <IItemDurabilityChangedPlugIn>()?.ItemDurabilityChanged(item, true);
            }

            player.GameContext.PlugInManager.GetPlugInPoint <PlugIns.IItemConsumedPlugIn>()?.ItemConsumed(player, item, targetItem);
            if (item.Durability == 0)
            {
                player.GameContext.PlugInManager.GetPlugInPoint <IItemDestroyedPlugIn>()?.ItemDestroyed(item);
            }
        }
    /// <inheritdoc />
    public override async ValueTask <bool> ConsumeItemAsync(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (await base.ConsumeItemAsync(player, item, targetItem, fruitUsage).ConfigureAwait(false))
        {
            this._healthPotionConsumeHandler.Recover(player);
            this._shieldPotionConsumeHandler.Recover(player);
            return(true);
        }

        return(false);
    }
Esempio n. 15
0
    /// <inheritdoc/>
    public override async ValueTask <bool> ConsumeItemAsync(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        var skill = this.GetLearnableSkill(item, player.GameContext.Configuration);

        if (skill is null || player.SkillList !.ContainsSkill(skill.Number.ToUnsigned()))
        {
            return(false);
        }

        if (!await base.ConsumeItemAsync(player, item, targetItem, fruitUsage))
        {
            return(false);
        }

        await player.SkillList.AddLearnedSkillAsync(skill).ConfigureAwait(false);

        return(true);
    }
Esempio n. 16
0
        /// <inheritdoc />
        public override bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
        {
            if (!this.CheckPreconditions(player, item, targetItem))
            {
                return(false);
            }

            var isAdding      = fruitUsage != FruitUsage.RemovePoints;
            var statAttribute = this.GetStatAttribute(item);

            if (player.Level < 10 || item.Level > 4)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPrevented : FruitConsumptionResult.MinusPrevented, 0, statAttribute);
                return(false);
            }

            var statAttributeDefinition = player.SelectedCharacter.CharacterClass.StatAttributes.FirstOrDefault(a =>
                                                                                                                a.IncreasableByPlayer && a.Attribute == statAttribute);

            if (statAttributeDefinition is null)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPrevented : FruitConsumptionResult.MinusPrevented, 0, statAttribute);
                return(false);
            }

            if (player.Inventory.EquippedItems.Any())
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?.ShowResponse(FruitConsumptionResult.PreventedByEquippedItems, 0, statAttribute);
                return(false);
            }

            var maximumRemainingPoints = player.SelectedCharacter.GetMaximumFruitPoints()
                                         - (isAdding
                                             ? player.SelectedCharacter.UsedFruitPoints
                                             : player.SelectedCharacter.UsedNegFruitPoints);

            if (maximumRemainingPoints <= 0)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusPreventedByMaximum : FruitConsumptionResult.MinusPreventedByMaximum, 0, statAttribute);
                return(false);
            }

            if (!isAdding && player.Attributes[statAttribute] <= statAttributeDefinition.BaseValue)
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(FruitConsumptionResult.MinusPreventedByDefault, 0, statAttribute);
                return(false);
            }

            var successPercentage = this.GetSuccessPercentage(player, isAdding);

            if (Rand.NextRandomBool(successPercentage))
            {
                var randomPoints = (byte)Math.Min(maximumRemainingPoints, this.GetRandomPoints(isAdding));
                if (isAdding)
                {
                    player.Attributes[statAttribute]         += randomPoints;
                    player.SelectedCharacter.UsedFruitPoints += randomPoints;
                    player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                    .ShowResponse(FruitConsumptionResult.PlusSuccess, randomPoints, statAttribute);
                }
                else
                {
                    player.Attributes[statAttribute]            -= randomPoints;
                    player.SelectedCharacter.UsedNegFruitPoints += randomPoints;
                    player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                    .ShowResponse(FruitConsumptionResult.MinusSuccess, randomPoints, statAttribute);
                }
            }
            else
            {
                player.ViewPlugIns.GetPlugIn <IFruitConsumptionResponsePlugIn>()?
                .ShowResponse(isAdding ? FruitConsumptionResult.PlusFailed : FruitConsumptionResult.MinusFailed, 0, statAttribute);
            }

            this.ConsumeSourceItem(player, item);
            return(true);
        }
Esempio n. 17
0
 /// <inheritdoc />
 public override async ValueTask <bool> ConsumeItemAsync(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
 {
     if (await base.ConsumeItemAsync(player, item, targetItem, fruitUsage).ConfigureAwait(false))
     {
         var targetMapDef = player.CurrentMap !.Definition.SafezoneMap ?? player.SelectedCharacter !.CharacterClass !.HomeMap;
         if (targetMapDef is { } &&
 /// <inheritdoc />
 public override bool ConsumeItem(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
 {
     if (base.ConsumeItem(player, item, targetItem, fruitUsage))
     {
         var targetMapDef = player.CurrentMap !.Definition.SafezoneMap ?? player.SelectedCharacter !.CharacterClass !.HomeMap;
         if (targetMapDef is { } &&
Esempio n. 19
0
    /// <inheritdoc/>
    public virtual async ValueTask <bool> ConsumeItemAsync(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (!this.CheckPreconditions(player, item))
        {
            return(false);
        }

        await this.ConsumeSourceItemAsync(player, item).ConfigureAwait(false);

        return(true);
    }
 /// <inheritdoc/>
 public bool ConsumeItem(Player player, Item item, Item targetItem, FruitUsage fruitUsage)
 {
     player.ViewPlugIns.GetPlugIn <IShowMessagePlugIn>()?.ShowMessage("Using this item is not implemented yet.", MessageType.BlueNormal);
     return(false);
 }
Esempio n. 21
0
    /// <inheritdoc />
    public override async ValueTask <bool> ConsumeItemAsync(Player player, Item item, Item?targetItem, FruitUsage fruitUsage)
    {
        if (await base.ConsumeItemAsync(player, item, targetItem, fruitUsage).ConfigureAwait(false))
        {
            if (player.MagicEffectList.ActiveEffects.TryGetValue(PoisonEffectNumber, out var effect))
            {
                effect.Dispose();
            }

            return(true);
        }

        return(false);
    }