protected override async Task Handle(QuicklistAddElementEvent args, CancellationToken cancellation)
        {
            if (!(args.Sender is IPlayerEntity player))
            {
                return;
            }

            short type  = args.Type;
            short q1    = args.Q1;
            short q2    = args.Q2;
            short data1 = args.Data1;
            short data2 = args.Data2;

            player.Quicklist.Quicklist.RemoveAll(n => n.Q1 == q1 && n.Q2 == q2 && (player.HasSpWeared ? n.Morph == player.MorphId : n.Morph == 0));
            var tmp = new CharacterQuicklistDto
            {
                Id          = Guid.NewGuid(),
                CharacterId = player.Character.Id,
                Type        = type,
                Q1          = q1,
                Q2          = q2,
                Slot        = data1,
                Position    = data2,
                Morph       = player.HasSpWeared ? player.MorphId : (short)0
            };

            player.Quicklist.Quicklist.Add(tmp);

            await player.SendPacketAsync(player.Quicklist.GenerateQSetPacket(tmp));
        }
        public static IEnumerable <QSlotPacket> GenerateQuicklistPacket(this IPlayerEntity player)
        {
            var qslotZero = new QSlotPacket {
                Slot = 0
            };
            var qSlotOne = new QSlotPacket {
                Slot = 1
            };
            List <QSlotPacket> packets = new List <QSlotPacket> {
                qslotZero, qSlotOne
            };

            var tmp    = new StringBuilder();
            var tmpOne = new StringBuilder();

            for (int i = 0; i < 30; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    CharacterQuicklistDto dto =
                        player.Quicklist.Quicklist.FirstOrDefault(n => n.Q1 == j && n.Q2 == i && n.Morph == (player.HasSpWeared ? player.MorphId : 0));
                    if (dto == null)
                    {
                        if (j == 0)
                        {
                            tmp.Append("0.255.-1");
                            continue;
                        }

                        tmpOne.Append("7.7.-1");
                        continue;
                    }


                    string lel = $"{dto.Type}.{dto.Position}.{dto.Slot}";
                    if (j == 0)
                    {
                        tmp.Append(lel);
                    }
                    else
                    {
                        tmpOne.Append(lel);
                    }
                }
            }

            qslotZero.Data = tmp.ToString().Trim();
            qSlotOne.Data  = tmpOne.ToString().Trim();
            return(packets);
        }
Exemple #3
0
        protected override async Task Handle(QuicklistRemoveElementEvent e, CancellationToken cancellation)
        {
            if (!(e.Sender is IPlayerEntity player))
            {
                return;
            }

            CharacterQuicklistDto qlFrom = player.Quicklist.Quicklist.FirstOrDefault(n => n.Q1 == e.Data1 && n.Q2 == e.Data2);

            if (qlFrom == null)
            {
                // can't remove what does not exist
                return;
            }

            player.Quicklist.Quicklist.Remove(qlFrom);
            await player.SendPacketAsync(player.Quicklist.GenerateRemoveQSetPacket(qlFrom.Q1, qlFrom.Q2));
        }
        protected override async Task Handle(QuicklistSwapElementEvent e, CancellationToken cancellation)
        {
            if (!(e.Sender is IPlayerEntity player))
            {
                return;
            }

            // check sp
            CharacterQuicklistDto qlFrom = player.Quicklist.Quicklist.FirstOrDefault(n => n.Q1 == e.Data1 && n.Q2 == e.Data2);

            if (qlFrom == null)
            {
                // modified packet
                return;
            }

            // check sp
            CharacterQuicklistDto qlTo = player.Quicklist.Quicklist.FirstOrDefault(s => s.Q1 == e.Q1 && s.Q2 == e.Q2);

            if (qlTo == null)
            {
                await player.SendPacketAsync(player.Quicklist.GenerateRemoveQSetPacket(qlFrom.Q1, qlFrom.Q2));
            }
            else
            {
                qlTo.Q1 = qlFrom.Q1;
                qlTo.Q1 = qlFrom.Q2;
            }


            qlFrom.Q1 = e.Data1;
            qlFrom.Q2 = e.Data2;


            await player.SendPacketAsync(player.Quicklist.GenerateQSetPacket(qlFrom));
        }
Exemple #5
0
        public static QsetPacketReceive GenerateQSetPacket(this QuicklistComponent quicklist, CharacterQuicklistDto args)
        {
            string tmp = $"{args.Type}.{args.Slot}.{args.Position}.0";

            return(new QsetPacketReceive
            {
                Q1 = args.Q1,
                Q2 = args.Q2,
                Data = tmp
            });
        }