Example #1
0
        public void HandleAutoAttackOnPlayer(WorldClient client, CharacterAutoAttackPacket packet)
        {
            var target = _mapProvider.Map.GetPlayer(packet.TargetId);

            if (target is null)
            {
                return;
            }

            _attackManager.Target = target;

            if (_attackManager.CanAttack(IAttackManager.AUTO_ATTACK_NUMBER, target, out var success))
            {
                _attackManager.AutoAttack(_gameWorld.Players[_gameSession.CharId]);
            }
            else
            {
                _packetFactory.SendAutoAttackFailed(client, _gameSession.CharId, target, success);
            }
        }
        private void UseSkill(WorldClient client, byte number, Character player, IKillable target)
        {
            _skillsManager.Skills.TryGetValue(number, out var skill);
            if (skill is null)
            {
                return;
            }

            if (!_attackManager.CanAttack(skill.Number, target, out var success))
            {
                if (success != AttackSuccess.TooFastAttack)
                {
                    _packetFactory.SendUseSkillFailed(client, player.Id, skill, target, success);
                }
                else
                {
                    _packetFactory.SendUseSkillFailed(client, player.Id, skill, target, AttackSuccess.CooldownNotOver);
                }
                return;
            }

            if (!_skillsManager.CanUseSkill(skill, target, out success))
            {
                _packetFactory.SendUseSkillFailed(client, player.Id, skill, target, success);
                return;
            }

            if (skill.CastTime == 0)
            {
                _skillsManager.UseSkill(skill, player, target);
            }
            else
            {
                _skillCastingManager.StartCasting(skill, target);
            }
        }