예제 #1
0
        public static void HandleSkill(MapleClient c, PacketReader pr)
        {
            int         objectId = pr.ReadInt();
            MapleSummon summon   = c.Account.Character.Map.GetSummon(objectId);

            if (summon != null && summon.Owner.Id == c.Account.Character.Id && summon.MovementType != SummonMovementType.Stationary)
            {
                int skillId = pr.ReadInt();
                WzCharacterSkill skillInfo = DataBuffer.GetCharacterSkillById(skillId);
                if (skillInfo == null)
                {
                    return;
                }
                SkillEffect effect = skillInfo.GetEffect(summon.SkillLevel);
                switch (skillId)
                {
                case Spearman.EVIL_EYE:
                    if (summon.SourceSkillId != Spearman.EVIL_EYE)
                    {
                        return;
                    }
                    if (DateTime.UtcNow.Subtract(summon.LastAbilityTime).TotalMilliseconds < effect.Info[CharacterSkillStat.x] * 1000)
                    {
                        c.CheatTracker.AddOffence(AntiCheat.OffenceType.NoDelaySummon);
                        return;
                    }
                    c.Account.Character.AddHP(effect.Info[CharacterSkillStat.hp]);
                    summon.LastAbilityTime = DateTime.UtcNow;
                    break;

                case Berserker.HEX_OF_THE_EVIL_EYE:
                    if (summon.SourceSkillId != Spearman.EVIL_EYE)
                    {
                        return;
                    }
                    effect.ApplyBuffEffect(summon.Owner);
                    break;

                default:
                    string txt = "Unhandled summon skill: " + skillId + " from summon skill: " + summon.SourceSkillId;
                    ServerConsole.Warning(txt);
                    Helpers.FileLogging.Log("Unhandled Summon Skills", txt);
                    break;
                }
                //c.SendPacket(Skill.ShowOwnSkillEffect(skillId, summon.SkillLevel));
                c.Account.Character.Map.BroadcastPacket(summon.GetUseSkillPacket(skillId, (byte)7), c.Account.Character); //stance ?
            }
        }