Implement discarding relics (the trash can button)

This commit is contained in:
Melledy
2024-02-06 23:31:28 -08:00
parent f67450203d
commit 83b6e975db
7 changed files with 480 additions and 24 deletions

View File

@@ -48,7 +48,8 @@ public class GameItem {
@Setter private int promotion;
@Setter private int rank; // Superimpose
@Setter private boolean locked;
@Setter private boolean discarded;
@Setter private int mainAffix;
private List<GameItemSubAffix> subAffixes;
@@ -277,6 +278,7 @@ public class GameItem {
.setLevel(this.getLevel())
.setExp(this.getExp())
.setIsProtected(this.isLocked())
.setIsDiscarded(this.isDiscarded())
.setBaseAvatarId(this.getEquipAvatar())
.setMainAffixId(this.mainAffix);

View File

@@ -526,18 +526,30 @@ public class InventoryService extends BaseGameService {
// === Etc ===
public void lockEquip(Player player, int equipId, boolean locked) {
GameItem equip = player.getInventory().getItemByUid(equipId);
if (equip == null || !equip.getExcel().isEquippable()) {
public void lockItem(Player player, int equipId, boolean locked) {
GameItem item = player.getInventory().getItemByUid(equipId);
if (item == null || !item.getExcel().isEquippable()) {
return;
}
equip.setLocked(locked);
equip.save();
item.setLocked(locked);
item.save();
// Send packet
player.sendPacket(new PacketPlayerSyncScNotify(equip));
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;
}
relic.setDiscarded(discarded);
relic.save();
// Send packet
player.sendPacket(new PacketPlayerSyncScNotify(relic));
}
public Int2IntMap sellItems(Player player, List<ItemParam> items) {

View File

@@ -0,0 +1,20 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.proto.DiscardRelicCsReqOuterClass.DiscardRelicCsReq;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
@Opcodes(CmdId.DiscardRelicCsReq)
public class HandlerDiscardRelicCsReq extends PacketHandler {
@Override
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.send(CmdId.DiscardRelicScRsp);
}
}

View File

@@ -13,7 +13,7 @@ public class HandlerLockEquipmentCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = LockEquipmentCsReq.parseFrom(data);
session.getServer().getInventoryService().lockEquip(session.getPlayer(), req.getEquipmentUniqueId(), req.getIsProtected());
session.getServer().getInventoryService().lockItem(session.getPlayer(), req.getEquipmentUniqueId(), 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().lockEquip(session.getPlayer(), req.getRelicUniqueId(), req.getIsProtected());
session.getServer().getInventoryService().lockItem(session.getPlayer(), req.getRelicUniqueId(), req.getIsProtected());
session.send(CmdId.LockRelicScRsp);
}