mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
Fix locking and discarding items
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user