Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
        }