コード例 #1
0
        /// <summary>
        /// Casts a melee skill on a target.
        /// </summary>
        /// <param name="caster">Living entity casting a skill.</param>
        /// <param name="target">Living target entity touched by the skill.</param>
        /// <param name="skill">Skill to be casted.</param>
        /// <param name="skillUseType">Skill use type.</param>
        private void CastMeleeSkill(ILivingEntity caster, ILivingEntity target, SkillInfo skill, SkillUseType skillUseType)
        {
            int skillCastingTime = GetSkillCastingTime(caster, skill);

            if (skill.Data.SpellRegionType == SpellRegionType.Around)
            {
                // TODO: AoE
                _textPacketFactory.SendFeatureNotImplemented(caster as IPlayerEntity, "AoE skills");
            }
            else
            {
                _skillPacketFactory.SendUseSkill(caster, target, skill, skillCastingTime, skillUseType);

                caster.Delayer.DelayAction(TimeSpan.FromMilliseconds(skill.LevelData.ComboSkillTime), () =>
                {
                    ExecuteSkill(caster, target, skill);
                });
            }
        }
コード例 #2
0
        public void UseFoodItem(IPlayerEntity player, Item foodItemToUse)
        {
            foreach (KeyValuePair <DefineAttributes, int> parameter in foodItemToUse.Data.Params)
            {
                if (parameter.Key == DefineAttributes.HP || parameter.Key == DefineAttributes.MP || parameter.Key == DefineAttributes.FP)
                {
                    int currentPoints   = player.Attributes[parameter.Key];
                    int maxPoints       = PlayerHelper.GetMaxPoints(player, parameter.Key);
                    int itemMaxRecovery = foodItemToUse.Data.AbilityMin;

                    if (parameter.Value >= 0)
                    {
                        if (currentPoints >= itemMaxRecovery)
                        {
                            float limitedRecovery = parameter.Value * 0.3f;

                            if (currentPoints + limitedRecovery > maxPoints)
                            {
                                currentPoints = maxPoints;
                            }
                            else
                            {
                                switch (parameter.Key)
                                {
                                case DefineAttributes.HP: _textPacketFactory.SendDefinedText(player, DefineText.TID_GAME_LIMITHP); break;

                                case DefineAttributes.MP: _textPacketFactory.SendDefinedText(player, DefineText.TID_GAME_LIMITMP); break;

                                case DefineAttributes.FP: _textPacketFactory.SendDefinedText(player, DefineText.TID_GAME_LIMITFP); break;
                                }

                                currentPoints += (int)limitedRecovery;
                            }
                        }
                        else
                        {
                            currentPoints = Math.Min(currentPoints + parameter.Value, maxPoints);
                        }
                    }

                    PlayerHelper.SetPoints(player, parameter.Key, currentPoints);
                    _moverPacketFactory.SendUpdateAttributes(player, parameter.Key, player.Attributes[parameter.Key]);
                }
                else
                {
                    // TODO: food triggers a skill.
                    _logger.LogWarning($"Activating a skill throught food.");
                    _textPacketFactory.SendFeatureNotImplemented(player, "skill with food");
                }
            }

            DecreaseItem(player, foodItemToUse);
        }