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); } }