public void Move(PacketReader packet) { var moveAction = packet.ReadShort(); var skillByte = packet.ReadByte(); var skillId = packet.ReadByte(); var projectileTarget = packet.ReadPoint(); var movements = new Movements(packet); Position = movements.Position; Foothold = movements.Foothold; Stance = movements.Stance; // TODO - Load the mob skill MobSkill skill = null; if (skill != null) { if (Health * 100 / MaxHealth > skill.CachedReference.PercentageLimitHp || Cooldowns.ContainsKey(skill) && Cooldowns[skill].AddSeconds(skill.CachedReference.Cooldown) >= DateTime.UtcNow || (MobSkillName)skill.MapleId == MobSkillName.Summon && Map.Mobs.Count >= 100) { skill = null; } } skill?.Cast(this); using var pwControl = new PacketWriter(ServerOperationCode.MobControlResponse); pwControl.WriteInt(ObjectId); pwControl.WriteShort(moveAction); pwControl.WriteBool(skill != null); // use skills pwControl.WriteShort((short)Mana); pwControl.WriteShort(0); // skill id, skill level Controller?.Send(pwControl); using var pwMove = new PacketWriter(ServerOperationCode.MobMove); pwMove.WriteInt(ObjectId); pwMove.WriteBool(skill != null); // use skills pwMove.WriteInt(skillId); pwMove.WriteByte(0); pwMove.WriteBytes(movements.ToByteArray()); Map.Send(pwMove, Controller); }
private void ScheduleBuffExpiration(MobStatus buff, MobSkill skill) { TaskRunner.Run(() => { // using (var packet = new PacketWriter(ServerOperationCode.MobStatReset)) // { // packet.WriteInt(ObjectId); // packet.WriteLong(0); // packet.WriteInt(0); // packet.WriteInt((int)buff); // packet.WriteInt(0); // // Map.Send(packet); // } Buffs.Remove(buff); }, TimeSpan.FromSeconds(skill.CachedReference.Duration)); }
public void Buff(MobStatus buff, short value, MobSkill skill) { // using (var pw = new PacketWriter(ServerOperationCode.MobStatSet)) // { // pw.WriteInt(ObjectId); // pw.WriteLong(0); // pw.WriteInt(0); // pw.WriteInt((int)buff); // pw.WriteShort(value); // pw.WriteShort(skill.MapleId); // pw.WriteShort(skill.Level); // pw.WriteShort(-1); // pw.WriteShort(0); // Delay // pw.WriteInt(0); // // Map.Send(pw); // } ScheduleBuffExpiration(buff, skill); }