예제 #1
0
        private static void UseSkillImpl(Client arg1, BinaryReader reader)
        {
            int skillId = reader.ReadInt32();

            Console.WriteLine("Use skill: " + skillId);
            int       targetId = (int)arg1.SelectedCharacter.GetStatsContainer().GetStat(StatType.TARGET_ID).value;
            Character target   = ServerManager.Instance.CharactersManager.GetCharacterById(targetId);

            if (target != null)
            {
                if (target.IsDead)
                {
                    return;
                }

                var data = ServerManager.Instance.SkillsManager.GetSkill(skillId);
                if (data != null)
                {
                    StatsContainer stats = arg1.SelectedCharacter.GetStatsContainer();
                    if (stats.CanUseSkill(data))
                    {
                        float time = ServerManager.Instance.TickManager.Time;
                        if (!stats.skillsUseTime.TryAdd(data.baseId, time))
                        {
                            stats.skillsUseTime[data.baseId] = time;
                        }
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }

                foreach (var client in ServerManager.Instance.CharactersManager.GetClientsInRange(arg1.SelectedCharacter.Position))
                {
                    Server.Instance.SendData(client.Value.ip, new ExecuteUseSkillPacket(arg1.SelectedCharacter.Id, targetId, skillId));
                }

                ServerManager.Instance.CombatManager.DealDamage(arg1.SelectedCharacter, target, new AttackData()
                {
                    attackerId = arg1.SelectedCharacter.Id,
                    targetId   = target.Id,
                    damage     = (ushort)new Random().Next(data.minDmg, data.maxDmg),
                    damageType = 0
                });
            }
        }