From f22e0f3ef369a18eb2f97e0739b1047dd514d276 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sat, 25 Nov 2023 03:00:13 -0800 Subject: [PATCH] Refactor many functions in InventoryService Inventory handlers should now always send a rsp packet even if there is an error --- .../game/inventory/InventoryService.java | 139 ++++++++---------- .../packet/recv/HandlerAvatarExpUpCsReq.java | 4 +- .../recv/HandlerExpUpEquipmentCsReq.java | 4 +- .../packet/recv/HandlerExpUpRelicCsReq.java | 4 +- .../recv/HandlerPromoteAvatarCsReq.java | 1 + .../recv/HandlerPromoteEquipmentCsReq.java | 1 + .../packet/recv/HandlerRankUpAvatarCsReq.java | 1 + .../recv/HandlerRankUpEquipmentCsReq.java | 1 + .../packet/recv/HandlerSellItemCsReq.java | 4 +- .../recv/HandlerTakePromotionRewardCsReq.java | 4 +- .../recv/HandlerUnlockSkilltreeCsReq.java | 10 +- .../packet/send/PacketAvatarExpUpScRsp.java | 16 +- .../send/PacketExpUpEquipmentScRsp.java | 21 ++- .../packet/send/PacketExpUpRelicScRsp.java | 18 +-- .../packet/send/PacketSellItemScRsp.java | 14 +- .../send/PacketTakePromotionRewardScRsp.java | 25 +--- 16 files changed, 127 insertions(+), 140 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/inventory/InventoryService.java b/src/main/java/emu/lunarcore/game/inventory/InventoryService.java index 3c1afcb..7a3c001 100644 --- a/src/main/java/emu/lunarcore/game/inventory/InventoryService.java +++ b/src/main/java/emu/lunarcore/game/inventory/InventoryService.java @@ -13,8 +13,6 @@ import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.player.Player; import emu.lunarcore.server.game.BaseGameService; import emu.lunarcore.server.game.GameServer; -import emu.lunarcore.server.packet.BasePacket; -import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.send.*; import it.unimi.dsi.fastutil.ints.Int2IntMap; @@ -28,13 +26,13 @@ public class InventoryService extends BaseGameService { // === Avatars === - public void levelUpAvatar(Player player, int avatarId, Collection items) { + public List levelUpAvatar(Player player, int avatarId, Collection items) { // Get avatar GameAvatar avatar = player.getAvatarById(avatarId); - if (avatar == null) return; + if (avatar == null) return null; AvatarPromotionExcel promoteData = GameData.getAvatarPromotionExcel(avatarId, avatar.getPromotion()); - if (promoteData == null) return; + if (promoteData == null) return null; // Exp gain int amount = 0; @@ -42,7 +40,9 @@ public class InventoryService extends BaseGameService { // Verify items for (ItemParam param : items) { GameItem item = player.getInventory().getItemByParam(param); - if (item == null || item.getExcel().getAvatarExp() == 0 || item.getCount() < param.getCount()) return; + if (item == null || item.getExcel().getAvatarExp() == 0 || item.getCount() < param.getCount()) { + return null; + } amount += item.getExcel().getAvatarExp() * param.getCount(); } @@ -50,8 +50,7 @@ public class InventoryService extends BaseGameService { // Verify credits int cost = amount / 10; if (player.getScoin() < cost) { - player.sendPacket(new PacketAvatarExpUpScRsp()); - return; + return null; } // Pay items @@ -111,24 +110,23 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(avatar)); - player.sendPacket(new PacketAvatarExpUpScRsp(returnItems)); + return returnItems; } - public void promoteAvatar(Player player, int avatarId) { + public boolean promoteAvatar(Player player, int avatarId) { // Get avatar GameAvatar avatar = player.getAvatarById(avatarId); - if (avatar == null || avatar.getPromotion() >= avatar.getExcel().getMaxPromotion()) return; + if (avatar == null || avatar.getPromotion() >= avatar.getExcel().getMaxPromotion()) return false; AvatarPromotionExcel promotion = GameData.getAvatarPromotionExcel(avatarId, avatar.getPromotion()); // Sanity check if ((promotion == null) || avatar.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) { - return; + return false; } // Verify item params if (!player.getInventory().verifyItems(promotion.getPromotionCostList())) { - player.sendPacket(new BasePacket(CmdId.PromoteAvatarScRsp)); - return; + return false; } // Pay items @@ -142,26 +140,24 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(avatar)); - player.sendPacket(new BasePacket(CmdId.PromoteAvatarScRsp)); + return true; } - public void unlockSkillTreeAvatar(Player player, int pointId) { - // Hacky way to get avatar id - int avatarId = pointId / 1000; - + public boolean unlockSkillTreeAvatar(Player player, int avatarId, int pointId) { // Get avatar + Skill Tree data GameAvatar avatar = player.getAvatarById(avatarId); - if (avatar == null) return; + if (avatar == null) return false; int nextLevel = avatar.getSkills().getOrDefault(pointId, 0) + 1; AvatarSkillTreeExcel skillTree = GameData.getAvatarSkillTreeExcel(pointId, nextLevel); - if (skillTree == null || skillTree.getAvatarID() != avatar.getExcel().getAvatarID()) return; + if (skillTree == null || skillTree.getAvatarID() != avatar.getExcel().getAvatarID()) { + return false; + } // Verify item params if (!player.getInventory().verifyItems(skillTree.getMaterialList())) { - player.sendPacket(new PacketUnlockSkilltreeScRsp()); - return; + return false; } // Pay items @@ -180,23 +176,22 @@ public class InventoryService extends BaseGameService { player.sendPacket(new PacketPlayerSyncScNotify(avatar)); } - player.sendPacket(new PacketUnlockSkilltreeScRsp(avatarId, pointId, nextLevel)); + return true; } - public void rankUpAvatar(Player player, int avatarId) { + public boolean rankUpAvatar(Player player, int avatarId) { // Get avatar GameAvatar avatar = player.getAvatarById(avatarId); - if (avatar == null || avatar.getRank() >= avatar.getExcel().getMaxRank()) return; + if (avatar == null || avatar.getRank() >= avatar.getExcel().getMaxRank()) return false; AvatarRankExcel rankData = GameData.getAvatarRankExcel(avatar.getExcel().getRankId(avatar.getRank())); - if (rankData == null) return; + if (rankData == null) return false; // Verify items for (ItemParam param : rankData.getUnlockCost()) { GameItem item = player.getInventory().getItemByParam(param); if (item == null || item.getCount() < param.getCount()) { - player.sendPacket(new BasePacket(CmdId.RankUpAvatarScRsp)); - return; + return false; } } @@ -214,27 +209,24 @@ public class InventoryService extends BaseGameService { player.sendPacket(new PacketPlayerSyncScNotify(avatar)); } - player.sendPacket(new BasePacket(CmdId.RankUpAvatarScRsp)); + return true; } - public void takePromotionRewardAvatar(Player player, int avatarId, int promotion) { + public List takePromotionRewardAvatar(Player player, int avatarId, int promotion) { // Get avatar GameAvatar avatar = player.getAvatarById(avatarId); if (avatar == null) { - player.sendPacket(new PacketTakePromotionRewardScRsp()); - return; + return null; } // Sanity if (promotion <= 0 || promotion > avatar.getPromotion()) { - player.sendPacket(new PacketTakePromotionRewardScRsp()); - return; + return null; } // Make sure promotion level is odd + Make sure promotion reward isnt already taken if (promotion % 2 == 0 || avatar.getTakenRewards().contains(promotion)) { - player.sendPacket(new PacketTakePromotionRewardScRsp()); - return; + return null; } // Set reward as taken @@ -250,22 +242,21 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(avatar)); - player.sendPacket(new PacketTakePromotionRewardScRsp(rewards)); + return rewards; } // === Equipment === - public void levelUpEquipment(Player player, int equipId, Collection items) { + public List levelUpEquipment(Player player, int equipId, Collection items) { // Get equipment GameItem equip = player.getInventory().getItemByUid(equipId); if (equip == null || !equip.getExcel().isEquipment()) { - player.sendPacket(new PacketExpUpEquipmentScRsp()); - return; + return null; } EquipmentPromotionExcel promoteData = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion()); - if (promoteData == null) return; + if (promoteData == null) return null; // Exp gain int cost = 0; @@ -274,10 +265,8 @@ public class InventoryService extends BaseGameService { // Verify items for (ItemParam param : items) { GameItem item = player.getInventory().getItemByParam(param); - System.out.println(param.getId()); if (item == null || item.isLocked() || item.getCount() < param.getCount()) { - player.sendPacket(new PacketExpUpEquipmentScRsp()); - return; + return null; } if (item.getExcel().getEquipmentExp() > 0) { @@ -288,8 +277,7 @@ public class InventoryService extends BaseGameService { // Verify credits if (player.getScoin() < cost) { - player.sendPacket(new PacketExpUpEquipmentScRsp()); - return; + return null; } // Pay items @@ -349,38 +337,34 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(equip)); - player.sendPacket(new PacketExpUpEquipmentScRsp(returnItems)); + return returnItems; } - public void promoteEquipment(Player player, int equipId) { + public boolean promoteEquipment(Player player, int equipId) { // Get equipment GameItem equip = player.getInventory().getItemByUid(equipId); if (equip == null || !equip.getExcel().isEquipment() || equip.getPromotion() >= equip.getExcel().getEquipmentExcel().getMaxPromotion()) { - player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); - return; + return false; } EquipmentPromotionExcel promotion = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion()); // Sanity check if ((promotion == null) || equip.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) { - player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); - return; + return false; } // Verify items for (ItemParam param : promotion.getPromotionCostList()) { GameItem item = player.getInventory().getItemByParam(param); if (item == null || item.getCount() < param.getCount()) { - player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); - return; + return false; } } // Verify credits if (player.getScoin() < promotion.getPromotionCostCoin()) { - player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); - return; + return false; } // Pay items @@ -395,48 +379,50 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(equip)); - player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); + return true; } - public void rankUpEquipment(Player player, int equipId, List items) { + public boolean rankUpEquipment(Player player, int equipId, List items) { // Get avatar GameItem equip = player.getInventory().getItemByUid(equipId); if (equip == null || !equip.getExcel().isEquipment() || equip.getRank() >= equip.getExcel().getEquipmentExcel().getMaxRank()) { - player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); - return; + return false; } + + // Rank up amount + int amount = 0; // Verify items for (ItemParam param : items) { GameItem item = player.getInventory().getItemByParam(param); if (item == null || !equip.getExcel().getEquipmentExcel().isRankUpItem(item) || item.getCount() < param.getCount()) { - player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); - return; + return false; } + + amount += item.getRank(); } // Pay items player.getInventory().removeItemsByParams(items); // Add rank - equip.setRank(Math.min(equip.getRank() + items.size(), equip.getExcel().getEquipmentExcel().getMaxRank())); + equip.setRank(Math.min(equip.getRank() + amount, equip.getExcel().getEquipmentExcel().getMaxRank())); equip.save(); // Send packets player.sendPacket(new PacketPlayerSyncScNotify(equip)); - player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); + return true; } // === Relic === - public void levelUpRelic(Player player, int equipId, Collection items) { + public List levelUpRelic(Player player, int equipId, Collection items) { // Get relic GameItem equip = player.getInventory().getItemByUid(equipId); if (equip == null || !equip.getExcel().isRelic()) { - player.sendPacket(new PacketExpUpRelicScRsp()); - return; + return null; } // Exp gain @@ -447,8 +433,7 @@ public class InventoryService extends BaseGameService { for (ItemParam param : items) { GameItem item = player.getInventory().getItemByParam(param); if (item == null || item.isLocked() || item.getCount() < param.getCount()) { - player.sendPacket(new PacketExpUpRelicScRsp()); - return; + return null; } if (item.getExcel().getRelicExp() > 0) { @@ -463,8 +448,7 @@ public class InventoryService extends BaseGameService { // Verify credits if (player.getScoin() < cost) { - player.sendPacket(new PacketExpUpRelicScRsp()); - return; + return null; } // Pay items @@ -537,7 +521,7 @@ public class InventoryService extends BaseGameService { // Send packets player.sendPacket(new PacketPlayerSyncScNotify(equip)); - player.sendPacket(new PacketExpUpRelicScRsp(returnItems)); + return returnItems; } // === Etc === @@ -556,15 +540,14 @@ public class InventoryService extends BaseGameService { player.sendPacket(new PacketPlayerSyncScNotify(equip)); } - public void sellItems(Player player, List items) { + public Int2IntMap sellItems(Player player, List items) { // Verify items var returnItems = new Int2IntOpenHashMap(); for (ItemParam param : items) { GameItem item = player.getInventory().getItemByParam(param); if (item == null || item.isLocked() || item.getCount() < param.getCount()) { - player.sendPacket(new PacketSellItemScRsp(null)); - return; + return null; } // Add return items @@ -582,8 +565,8 @@ public class InventoryService extends BaseGameService { player.getInventory().addItem(returnItem.getIntKey(), returnItem.getIntValue()); } - // Send packet - player.sendPacket(new PacketSellItemScRsp(returnItems)); + // Done + return returnItems; } public List composeItem(Player player, int composeId, int count) { diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerAvatarExpUpCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerAvatarExpUpCsReq.java index 34bc29d..d29de9f 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerAvatarExpUpCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerAvatarExpUpCsReq.java @@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketAvatarExpUpScRsp; @Opcodes(CmdId.AvatarExpUpCsReq) public class HandlerAvatarExpUpCsReq extends PacketHandler { @@ -23,7 +24,8 @@ public class HandlerAvatarExpUpCsReq extends PacketHandler { items.add(new ItemParam(cost)); } - session.getServer().getInventoryService().levelUpAvatar(session.getPlayer(), req.getBaseAvatarId(), items); + var returnItems = session.getServer().getInventoryService().levelUpAvatar(session.getPlayer(), req.getBaseAvatarId(), items); + session.send(new PacketAvatarExpUpScRsp(returnItems)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpEquipmentCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpEquipmentCsReq.java index c50e4dd..8602d52 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpEquipmentCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpEquipmentCsReq.java @@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketExpUpEquipmentScRsp; @Opcodes(CmdId.ExpUpEquipmentCsReq) public class HandlerExpUpEquipmentCsReq extends PacketHandler { @@ -23,7 +24,8 @@ public class HandlerExpUpEquipmentCsReq extends PacketHandler { items.add(new ItemParam(cost)); } - session.getServer().getInventoryService().levelUpEquipment(session.getPlayer(), req.getEquipmentUniqueId(), items); + var returnItems = session.getServer().getInventoryService().levelUpEquipment(session.getPlayer(), req.getEquipmentUniqueId(), items); + session.send(new PacketExpUpEquipmentScRsp(returnItems)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpRelicCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpRelicCsReq.java index 30d1db4..f3e51f8 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpRelicCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExpUpRelicCsReq.java @@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketExpUpRelicScRsp; @Opcodes(CmdId.ExpUpRelicCsReq) public class HandlerExpUpRelicCsReq extends PacketHandler { @@ -23,7 +24,8 @@ public class HandlerExpUpRelicCsReq extends PacketHandler { items.add(new ItemParam(cost)); } - session.getServer().getInventoryService().levelUpRelic(session.getPlayer(), req.getRelicUniqueId(), items); + var returnItems = session.getServer().getInventoryService().levelUpRelic(session.getPlayer(), req.getRelicUniqueId(), items); + session.send(new PacketExpUpRelicScRsp(returnItems)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteAvatarCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteAvatarCsReq.java index 28821a6..2e61067 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteAvatarCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteAvatarCsReq.java @@ -14,6 +14,7 @@ public class HandlerPromoteAvatarCsReq extends PacketHandler { var req = PromoteAvatarCsReq.parseFrom(data); session.getServer().getInventoryService().promoteAvatar(session.getPlayer(), req.getBaseAvatarId()); + session.send(CmdId.PromoteAvatarScRsp); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteEquipmentCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteEquipmentCsReq.java index 213ddf3..b43b0e2 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteEquipmentCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPromoteEquipmentCsReq.java @@ -14,6 +14,7 @@ public class HandlerPromoteEquipmentCsReq extends PacketHandler { var req = PromoteEquipmentCsReq.parseFrom(data); session.getServer().getInventoryService().promoteEquipment(session.getPlayer(), req.getEquipmentUniqueId()); + session.send(CmdId.PromoteEquipmentScRsp); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpAvatarCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpAvatarCsReq.java index b693c07..2bcf2b6 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpAvatarCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpAvatarCsReq.java @@ -14,6 +14,7 @@ public class HandlerRankUpAvatarCsReq extends PacketHandler { var req = RankUpAvatarCsReq.parseFrom(data); session.getServer().getInventoryService().rankUpAvatar(session.getPlayer(), req.getBaseAvatarId()); + session.send(CmdId.RankUpAvatarScRsp); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpEquipmentCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpEquipmentCsReq.java index 48b918f..06f0f14 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpEquipmentCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRankUpEquipmentCsReq.java @@ -24,6 +24,7 @@ public class HandlerRankUpEquipmentCsReq extends PacketHandler { } session.getServer().getInventoryService().rankUpEquipment(session.getPlayer(), req.getEquipmentUniqueId(), items); + session.send(CmdId.RankUpEquipmentScRsp); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerSellItemCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerSellItemCsReq.java index c323fd2..c12c29c 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerSellItemCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerSellItemCsReq.java @@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketSellItemScRsp; @Opcodes(CmdId.SellItemCsReq) public class HandlerSellItemCsReq extends PacketHandler { @@ -23,7 +24,8 @@ public class HandlerSellItemCsReq extends PacketHandler { items.add(new ItemParam(cost)); } - session.getServer().getInventoryService().sellItems(session.getPlayer(), items); + var returnItems = session.getServer().getInventoryService().sellItems(session.getPlayer(), items); + session.send(new PacketSellItemScRsp(returnItems)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerTakePromotionRewardCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerTakePromotionRewardCsReq.java index 8230042..b61d27d 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerTakePromotionRewardCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerTakePromotionRewardCsReq.java @@ -5,6 +5,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketTakePromotionRewardScRsp; @Opcodes(CmdId.TakePromotionRewardCsReq) public class HandlerTakePromotionRewardCsReq extends PacketHandler { @@ -13,7 +14,8 @@ public class HandlerTakePromotionRewardCsReq extends PacketHandler { public void handle(GameSession session, byte[] data) throws Exception { var req = TakePromotionRewardCsReq.parseFrom(data); - session.getServer().getInventoryService().takePromotionRewardAvatar(session.getPlayer(), req.getBaseAvatarId(), req.getPromotion()); + var rewards = session.getServer().getInventoryService().takePromotionRewardAvatar(session.getPlayer(), req.getBaseAvatarId(), req.getPromotion()); + session.send(new PacketTakePromotionRewardScRsp(rewards)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerUnlockSkilltreeCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerUnlockSkilltreeCsReq.java index fe927ae..dc85e27 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerUnlockSkilltreeCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerUnlockSkilltreeCsReq.java @@ -5,6 +5,7 @@ import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketUnlockSkilltreeScRsp; @Opcodes(CmdId.UnlockSkilltreeCsReq) public class HandlerUnlockSkilltreeCsReq extends PacketHandler { @@ -12,8 +13,15 @@ public class HandlerUnlockSkilltreeCsReq extends PacketHandler { @Override public void handle(GameSession session, byte[] data) throws Exception { var req = UnlockSkilltreeCsReq.parseFrom(data); + int avatarId = req.getPointId() / 1000; // Hacky way to get avatar id - session.getServer().getInventoryService().unlockSkillTreeAvatar(session.getPlayer(), req.getPointId()); + boolean success = session.getServer().getInventoryService().unlockSkillTreeAvatar(session.getPlayer(), avatarId, req.getPointId()); + + if (success) { + session.send(new PacketUnlockSkilltreeScRsp(avatarId, req.getPointId(), req.getLevel())); + } else { + session.send(new PacketUnlockSkilltreeScRsp()); + } } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketAvatarExpUpScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketAvatarExpUpScRsp.java index 02f0e4e..5550cdd 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketAvatarExpUpScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketAvatarExpUpScRsp.java @@ -14,18 +14,14 @@ public class PacketAvatarExpUpScRsp extends BasePacket { var data = AvatarExpUpScRsp.newInstance(); - for (GameItem item : returnItems) { - data.addReturnItemList(item.toPileProto()); + if (returnItems != null) { + for (GameItem item : returnItems) { + data.addReturnItemList(item.toPileProto()); + } + } else { + data.setRetcode(1); } this.setData(data); } - - public PacketAvatarExpUpScRsp() { - super(CmdId.AvatarExpUpScRsp); - - var data = AvatarExpUpScRsp.newInstance().setRetcode(1); - - this.setData(data); - } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpEquipmentScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpEquipmentScRsp.java index 19c5f42..55a21ab 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpEquipmentScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpEquipmentScRsp.java @@ -13,19 +13,16 @@ public class PacketExpUpEquipmentScRsp extends BasePacket { super(CmdId.ExpUpEquipmentScRsp); var data = ExpUpEquipmentScRsp.newInstance(); - - for (GameItem item : returnItems) { - data.addReturnItemList(item.toPileProto()); + + if (returnItems != null) { + for (GameItem item : returnItems) { + data.addReturnItemList(item.toPileProto()); + } + } else { + data.setRetcode(1); } - - this.setData(data); - } - - public PacketExpUpEquipmentScRsp() { - super(CmdId.ExpUpEquipmentScRsp); - - var data = ExpUpEquipmentScRsp.newInstance().setRetcode(1); - + this.setData(data); } + } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpRelicScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpRelicScRsp.java index 88b1e27..e2b58ea 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpRelicScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketExpUpRelicScRsp.java @@ -14,18 +14,14 @@ public class PacketExpUpRelicScRsp extends BasePacket { var data = ExpUpRelicScRsp.newInstance(); - for (GameItem item : returnItems) { - data.addReturnItemList(item.toPileProto()); + if (returnItems != null) { + for (GameItem item : returnItems) { + data.addReturnItemList(item.toPileProto()); + } + } else { + data.setRetcode(1); } - - this.setData(data); - } - - public PacketExpUpRelicScRsp() { - super(CmdId.ExpUpRelicScRsp); - - var data = ExpUpRelicScRsp.newInstance().setRetcode(1); - + this.setData(data); } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketSellItemScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketSellItemScRsp.java index 661403b..fb5b324 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketSellItemScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketSellItemScRsp.java @@ -1,6 +1,5 @@ package emu.lunarcore.server.packet.send; -import emu.lunarcore.proto.ItemListOuterClass.ItemList; import emu.lunarcore.proto.ItemOuterClass.Item; import emu.lunarcore.proto.SellItemScRspOuterClass.SellItemScRsp; import emu.lunarcore.server.packet.BasePacket; @@ -12,17 +11,20 @@ public class PacketSellItemScRsp extends BasePacket { public PacketSellItemScRsp(Int2IntMap returnItems) { super(CmdId.SellItemScRsp); - var list = ItemList.newInstance(); + var data = SellItemScRsp.newInstance(); if (returnItems != null) { for (var item : returnItems.int2IntEntrySet()) { - list.addItemList(Item.newInstance().setItemId(item.getIntKey()).setNum(item.getIntValue())); + var itemProto = Item.newInstance() + .setItemId(item.getIntKey()) + .setNum(item.getIntValue()); + + data.getMutableReturnItemList().addItemList(itemProto); } + } else { + data.setRetcode(1); } - var data = SellItemScRsp.newInstance() - .setReturnItemList(list); - this.setData(data); } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketTakePromotionRewardScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketTakePromotionRewardScRsp.java index b31cb8c..22e4a24 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketTakePromotionRewardScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketTakePromotionRewardScRsp.java @@ -3,34 +3,25 @@ package emu.lunarcore.server.packet.send; import java.util.Collection; import emu.lunarcore.game.inventory.GameItem; -import emu.lunarcore.proto.ItemListOuterClass.ItemList; import emu.lunarcore.proto.TakePromotionRewardScRspOuterClass.TakePromotionRewardScRsp; import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.CmdId; public class PacketTakePromotionRewardScRsp extends BasePacket { - - public PacketTakePromotionRewardScRsp() { - super(CmdId.TakePromotionRewardScRsp); - - var data = TakePromotionRewardScRsp.newInstance() - .setRetcode(1); - - this.setData(data); - } public PacketTakePromotionRewardScRsp(Collection rewards) { super(CmdId.TakePromotionRewardScRsp); + + var data = TakePromotionRewardScRsp.newInstance(); - var rewardList = ItemList.newInstance(); - - for (GameItem item : rewards) { - rewardList.addItemList(item.toProto()); + if (rewards != null) { + for (GameItem item : rewards) { + data.getMutableRewardList().addItemList(item.toProto()); + } + } else { + data.setRetcode(1); } - var data = TakePromotionRewardScRsp.newInstance() - .setRewardList(rewardList); - this.setData(data); }