Пример #1
0
        public override CastSkillInfo OnCast(Character ch, BaseSkill skill)
        {
            if (Alive && ch.Alive)
            {
                CastSkillInfo info = new CastSkillInfo();

                info.Dead = false;
                info.Type = AttackType.Miss;
                info.Damage = 0;

                info.CasterType = (byte)ch.Type;
                info.CasterID = ch.CharacterId;
                info.CasterX = (short)ch.Position.X;
                info.CasterY = (short)ch.Position.Y;
                info.CasterZ = 0;

                info.TargetID = MonsterID;
                info.TargetType = (byte)Type;
                info.TargetX = (short)Position.X;
                info.TargetY = (short)Position.Y;
                info.TargetZ = 0;

                if (ch.TotalAttackRating > AttackRating)
                {
                    info.Type = AttackType.Hit;
                }
                else
                {
                    int chance = Random().Next(1, AttackRating);
                    if (chance <= ch.TotalAttackRating)
                        info.Type = AttackType.Hit;
                    else
                        info.Type = AttackType.Miss;
                }
                if (info.Type == AttackType.Hit)
                {
                    info.Damage = ch.TotalDamage - Defense / 3;
                    if (info.Damage <= 0)
                        info.Damage = 1;

                    if (skill.IncDamage != 0)
                    {
                        info.Damage += skill.IncDamage;
                    }

                    if (skill.IncDamagePerc != 0)
                    {
                        float DamageInc = skill.IncDamagePerc;
                        float increase = (DamageInc / 100);
                        info.Damage = (int)(info.Damage * increase);
                    }

                    if (info.Damage <= CurHealth)
                    {
                        CurHealth -= info.Damage;
                    }
                    else if (info.Damage >= CurHealth)
                    {
                        Alive = false;
                        CurHealth = 0;
                        DeathTime = DateTime.Now;
                        info.Dead = true;
                        info.Experience = Experience;
                    }
                }

                return info;
            }
            else
                return base.OnCast(ch, skill);
        }
Пример #2
0
 public ClientCastSkillEventArgs(CastSkillInfo i)
 {
     info = i;
 }
Пример #3
0
 public static byte[] SendCast2(BaseSkill skill, CastSkillInfo i, Monster m)
 {
     Packet p = new Packet(500);
     p.WriteByte((byte)i.Type);
     p.WriteInt(skill.SkillID);
     p.WriteByte(skill.SkillLevel);
     p.WriteByte(i.CasterType);
     p.WriteInt(i.CasterID);
     p.WriteShort(i.CasterX);
     p.WriteShort(i.CasterY);
     p.WriteByte(i.CasterZ);
     if (m != null)
     {
         p.WriteByte(3);
         p.WriteInt(m.MonsterID);
         p.WriteInt(m.MaxHealth);
         p.WriteInt(m.CurHealth);
         p.WriteInt(i.Damage);
         p.WriteInt(i.Experience);
         p.WriteHexString("00");
     }
     else
     {
         p.WriteByte(i.TargetType);
         p.WriteInt(i.TargetID);
         p.WriteHexString("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00");
     }
     return p.GetWrittenBuffer(PacketIds.SendCast2);
 }
Пример #4
0
        public static CastSkillInfo RecvCastSkill2(Packet p)
        {
            p.Skip(2);
            int skillid = p.ReadInt();
            byte castertype = p.ReadByte();
            int casterid = p.ReadInt();
            short casterx = p.ReadShort();
            short castery = p.ReadShort();
            byte casterz = p.ReadByte();
            byte targettype = p.ReadByte();
            int targetid = p.ReadInt();
            short targetx = p.ReadShort();
            short targety = p.ReadShort();
            byte targetz = p.ReadByte();

            CastSkillInfo i = new CastSkillInfo
            {
                PacketID = 2,
                SkillID = skillid,
                CasterType = castertype,
                CasterID = casterid,
                CasterX = casterx,
                CasterY = castery,
                CasterZ = casterz,
                TargetType = targettype,
                TargetID = targetid,
                TargetX = targetx,
                TargetY = targety,
                TargetZ = targetz
            };

            return i;
        }
Пример #5
0
        public static byte[] SendCast1(BaseSkill skill, CastSkillInfo i, byte error)
        {
            Packet p = new Packet(500);
            p.WriteByte(error);
            p.WriteInt(skill.SkillID);
            p.WriteByte(skill.SkillLevel);
            p.WriteHexString("01");
            p.WriteInt(i.CasterID);
            p.WriteShort(i.CasterX);
            p.WriteShort(i.CasterY);
            p.WriteByte(i.CasterZ);
            p.WriteByte(i.TargetType);
            p.WriteInt(i.TargetID);
            p.WriteShort(i.TargetX);
            p.WriteShort(i.TargetY);
            p.WriteShort(i.TargetZ);
            p.WriteHexString("00 00 00");

            return p.GetWrittenBuffer(PacketIds.SendCast1);
        }