Fix locking and discarding items

This commit is contained in:
Melledy
2024-07-31 20:56:07 -07:00
parent b2718432cb
commit 47ec7c54b7
7 changed files with 292 additions and 277 deletions

View File

@@ -16,6 +16,7 @@ import emu.lunarcore.game.player.Player;
import emu.lunarcore.server.game.BaseGameService;
import emu.lunarcore.server.game.GameServer;
import emu.lunarcore.server.packet.send.*;
import us.hebi.quickbuf.RepeatedInt;
public class InventoryService extends BaseGameService {
@@ -524,30 +525,46 @@ public class InventoryService extends BaseGameService {
// === Etc ===
public void lockItem(Player player, int equipId, boolean locked) {
GameItem item = player.getInventory().getItemByUid(equipId);
if (item == null || !item.getExcel().isEquippable()) {
return;
public void lockItems(Player player, RepeatedInt list, boolean locked) {
// List of items to update on the client
List<GameItem> items = new ArrayList<>();
// Lock items
for (int equipId : list) {
GameItem item = player.getInventory().getItemByUid(equipId);
if (item == null || !item.getExcel().isEquippable()) {
continue;
}
item.setLocked(locked);
item.save();
}
// Send packet
if (items.size() > 0) {
player.sendPacket(new PacketPlayerSyncScNotify(items));
}
item.setLocked(locked);
item.save();
// Send packet
player.sendPacket(new PacketPlayerSyncScNotify(item));
}
public void discardRelic(Player player, int equipId, boolean discarded) {
GameItem relic = player.getInventory().getItemByUid(equipId);
if (relic == null || !relic.getExcel().isRelic()) {
return;
public void discardRelics(Player player, RepeatedInt list, boolean discarded) {
// List of items to update on the client
List<GameItem> items = new ArrayList<>();
// Lock items
for (int equipId : list) {
GameItem item = player.getInventory().getItemByUid(equipId);
if (item == null || !item.getExcel().isEquippable()) {
continue;
}
item.setDiscarded(discarded);
item.save();
}
// Send packet
if (items.size() > 0) {
player.sendPacket(new PacketPlayerSyncScNotify(items));
}
relic.setDiscarded(discarded);
relic.save();
// Send packet
player.sendPacket(new PacketPlayerSyncScNotify(relic));
}
public List<GameItem> sellItems(Player player, boolean toMaterials, List<ItemParam> items) {

View File

@@ -13,7 +13,7 @@ public class HandlerDiscardRelicCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = DiscardRelicCsReq.parseFrom(data);
session.getServer().getInventoryService().discardRelic(session.getPlayer(), req.getRelicUniqueId(), req.getIsDiscard());
session.getServer().getInventoryService().discardRelics(session.getPlayer(), req.getRelicIdList(), req.getIsDiscard());
session.send(CmdId.DiscardRelicScRsp);
}

View File

@@ -13,10 +13,7 @@ public class HandlerLockEquipmentCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = LockEquipmentCsReq.parseFrom(data);
for (int id : req.getEquipmentIdList()) {
session.getServer().getInventoryService().lockItem(session.getPlayer(), id, req.getIsProtected());
}
session.getServer().getInventoryService().lockItems(session.getPlayer(), req.getEquipmentIdList(), req.getIsProtected());
session.send(CmdId.LockEquipmentScRsp);
}

View File

@@ -13,7 +13,7 @@ public class HandlerLockRelicCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = LockRelicCsReq.parseFrom(data);
session.getServer().getInventoryService().lockItem(session.getPlayer(), req.getRelicUniqueId(), req.getIsProtected());
session.getServer().getInventoryService().lockItems(session.getPlayer(), req.getRelicIdList(), req.getIsProtected());
session.send(CmdId.LockRelicScRsp);
}