public override void Handle(GameSession session, PacketReader packet) { int objectId = packet.ReadInt(); if (!session.FieldManager.State.TryGetItem(objectId, out IFieldObject <Item> fieldItem)) { return; } switch (fieldItem.Value.Id) { case 90000004: case 90000011: case 90000015: case 90000016: case 90000020: session.Player.Account.Meret.Modify(fieldItem.Value.Amount); break; case 90000008: session.Player.Levels.GainExp(fieldItem.Value.Amount); break; case 90000009: session.Player.FieldPlayer.RecoverSp(fieldItem.Value.Amount); break; case 90000010: session.Player.FieldPlayer.RecoverStamina(fieldItem.Value.Amount); break; default: if (!session.Player.Inventory.CanHold(fieldItem.Value)) { // No need to send "Inventory full" message since it's client sided. return; } fieldItem.Value.Slot = -1; // add to first empty slot session.Player.Inventory.AddItem(session, fieldItem.Value, true); break; } if (session.FieldManager.RemoveItem(objectId, out Item item)) { session.FieldManager.BroadcastPacket(FieldItemPacket.PickupItem(objectId, item, session.Player.FieldPlayer.ObjectId)); session.FieldManager.BroadcastPacket(FieldItemPacket.RemoveItem(objectId)); } int countExtra = packet.ReadByte(); for (int i = 0; i < countExtra; i++) { } }
public override void Handle(GameSession session, PacketReader packet) { int objectCount = packet.ReadByte(); for (int i = 0; i < objectCount; i++) { int objectId = packet.ReadInt(); bool foundItem = session.FieldManager.State.TryGetItem(objectId, out IFieldObject <Item> fieldItem); if (!foundItem || fieldItem.Value.Id is < 90000001 or > 90000003) { continue; } if (!session.FieldManager.RemoveItem(objectId, out Item item)) { continue; } session.Player.Wallet.Meso.Modify(fieldItem.Value.Amount); session.FieldManager.BroadcastPacket(FieldItemPacket.PickupItem(objectId, item, session.Player.FieldPlayer.ObjectId)); session.FieldManager.BroadcastPacket(FieldItemPacket.RemoveItem(objectId)); } }