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); }
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)); }
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 }); }