Exemplo n.º 1
0
        private static void HandleAoeDamage(GameSession session, PacketReader packet)
        {
            List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >();
            long   skillSN        = packet.ReadLong();
            int    unkValue       = packet.ReadInt();
            int    playerObjectId = packet.ReadInt();
            CoordF coords         = packet.Read <CoordF>();
            CoordF coords2        = packet.Read <CoordF>();
            CoordF coords3        = packet.Read <CoordF>();

            packet.ReadByte();
            byte count = packet.ReadByte();

            packet.ReadInt();

            for (int i = 0; i < count; i++)
            {
                int entity = packet.ReadInt();
                mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(entity));
                packet.ReadByte();
                if (mobs[i] != null)
                {
                    mobs[i].Value.UpdateStats(session.FieldPlayer.Value.SkillCast.GetDamage());
                    session.Send(StatPacket.UpdateMobStats(mobs[i]));
                }
            }
            session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillSN, unkValue, coords, mobs));
        }
Exemplo n.º 2
0
        private static void HandleAoeDamage(GameSession session, PacketReader packet)
        {
            List <(IFieldObject <Mob>, DamageHandler)> mobs = new List <(IFieldObject <Mob>, DamageHandler)>();
            long   skillSN        = packet.ReadLong();
            int    unkValue       = packet.ReadInt();
            int    playerObjectId = packet.ReadInt();
            CoordF coords         = packet.Read <CoordF>();
            CoordF coords2        = packet.Read <CoordF>();
            CoordF coords3        = packet.Read <CoordF>();

            packet.ReadByte();
            byte count = packet.ReadByte();

            packet.ReadInt();

            bool isCrit = DamageHandler.RollCrit(session.Player.Stats[PlayerStatId.CritRate].Current);

            for (int i = 0; i < count; i++)
            {
                int entity = packet.ReadInt();
                packet.ReadByte();

                IFieldObject <Mob> mob = session.FieldManager.State.Mobs.GetValueOrDefault(entity);
                if (mob != null)
                {
                    DamageHandler damage = DamageHandler.CalculateDamage(session.FieldPlayer.Value.SkillCast, session.FieldPlayer.Value, mob.Value, isCrit);

                    mob.Value.Damage(damage.Damage);
                    session.Send(StatPacket.UpdateMobStats(mob));

                    if (mob.Value.IsDead)
                    {
                        HandleMobKill(session, mob);
                    }

                    if (mob.Value.Id == 29000128) // Temp fix for tutorial barrier
                    {
                        session.Send("4F 00 03 E8 03 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray());
                        session.Send("4F 00 03 D0 07 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray());
                        session.Send("4F 00 08 01 04 01 00 00".ToByteArray());
                    }

                    mobs.Add((mob, damage));
                }
            }
            session.Send(SkillDamagePacket.ApplyDamage(skillSN, unkValue, coords, session.FieldPlayer, mobs));
        }
Exemplo n.º 3
0
        private static void HandleAoeDamage(GameSession session, PacketReader packet)
        {
            List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >();
            long   skillSN        = packet.ReadLong();
            int    unkValue       = packet.ReadInt();
            int    playerObjectId = packet.ReadInt();
            CoordF coords         = packet.Read <CoordF>();
            CoordF coords2        = packet.Read <CoordF>();
            CoordF coords3        = packet.Read <CoordF>();

            packet.ReadByte();
            byte count = packet.ReadByte();

            packet.ReadInt();

            for (int i = 0; i < count; i++)
            {
                int entity = packet.ReadInt();
                mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(entity));
                packet.ReadByte();
                if (mobs[i] != null)
                {
                    mobs[i].Value.UpdateStats(session.FieldPlayer.Value.SkillCast.GetDamage());
                    session.Send(StatPacket.UpdateMobStats(mobs[i]));

                    // TODO: There needs to be a more centralized way to give rewards from killing mobs...
                    // TODO: Add trophy, exp, meso and item drops
                    if (mobs[i].Value.IsDead)
                    {
                        QuestHelper.UpdateQuest(session, mobs[i].Value.Id.ToString(), "npc");
                    }

                    if (mobs[i].Value.Id == 29000128) // Temp fix for tutorial barrier
                    {
                        session.Send("4F 00 03 E8 03 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray());
                        session.Send("4F 00 03 D0 07 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray());
                        session.Send("4F 00 08 01 04 01 00 00".ToByteArray());
                    }
                }
            }
            session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillSN, unkValue, coords, mobs));
        }
Exemplo n.º 4
0
        private void HandleAoeDamage(GameSession session, PacketReader packet)
        {
            List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >();
            long   skillUid       = packet.ReadLong();
            int    someValue      = packet.ReadInt();
            int    playerObjectId = packet.ReadInt();
            CoordF coords         = packet.Read <CoordF>();
            CoordF coords2        = packet.Read <CoordF>();
            CoordF coords3        = packet.Read <CoordF>();

            packet.ReadByte();
            byte count = packet.ReadByte();

            packet.ReadInt();
            for (int i = 0; i < count; i++)
            {
                mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(packet.ReadInt()));
                packet.ReadByte();
                session.Send(StatPacket.UpdateMobStats(mobs[i]));
            }

            session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillUid, someValue, coords, mobs));
        }