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); }
public ClientCastSkillEventArgs(CastSkillInfo i) { info = i; }
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); }
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; }
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); }