Refactor many functions in InventoryService

Inventory handlers should now always send a rsp packet even if there is an error
This commit is contained in:
Melledy
2023-11-25 03:00:13 -08:00
parent c81e17f10c
commit f22e0f3ef3
16 changed files with 127 additions and 140 deletions

View File

@@ -13,8 +13,6 @@ import emu.lunarcore.game.avatar.GameAvatar;
import emu.lunarcore.game.player.Player; import emu.lunarcore.game.player.Player;
import emu.lunarcore.server.game.BaseGameService; import emu.lunarcore.server.game.BaseGameService;
import emu.lunarcore.server.game.GameServer; 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 emu.lunarcore.server.packet.send.*;
import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntMap;
@@ -28,13 +26,13 @@ public class InventoryService extends BaseGameService {
// === Avatars === // === Avatars ===
public void levelUpAvatar(Player player, int avatarId, Collection<ItemParam> items) { public List<GameItem> levelUpAvatar(Player player, int avatarId, Collection<ItemParam> items) {
// Get avatar // Get avatar
GameAvatar avatar = player.getAvatarById(avatarId); GameAvatar avatar = player.getAvatarById(avatarId);
if (avatar == null) return; if (avatar == null) return null;
AvatarPromotionExcel promoteData = GameData.getAvatarPromotionExcel(avatarId, avatar.getPromotion()); AvatarPromotionExcel promoteData = GameData.getAvatarPromotionExcel(avatarId, avatar.getPromotion());
if (promoteData == null) return; if (promoteData == null) return null;
// Exp gain // Exp gain
int amount = 0; int amount = 0;
@@ -42,7 +40,9 @@ public class InventoryService extends BaseGameService {
// Verify items // Verify items
for (ItemParam param : items) { for (ItemParam param : items) {
GameItem item = player.getInventory().getItemByParam(param); 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(); amount += item.getExcel().getAvatarExp() * param.getCount();
} }
@@ -50,8 +50,7 @@ public class InventoryService extends BaseGameService {
// Verify credits // Verify credits
int cost = amount / 10; int cost = amount / 10;
if (player.getScoin() < cost) { if (player.getScoin() < cost) {
player.sendPacket(new PacketAvatarExpUpScRsp()); return null;
return;
} }
// Pay items // Pay items
@@ -111,24 +110,23 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(avatar)); 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 // Get avatar
GameAvatar avatar = player.getAvatarById(avatarId); 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()); AvatarPromotionExcel promotion = GameData.getAvatarPromotionExcel(avatarId, avatar.getPromotion());
// Sanity check // Sanity check
if ((promotion == null) || avatar.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) { if ((promotion == null) || avatar.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) {
return; return false;
} }
// Verify item params // Verify item params
if (!player.getInventory().verifyItems(promotion.getPromotionCostList())) { if (!player.getInventory().verifyItems(promotion.getPromotionCostList())) {
player.sendPacket(new BasePacket(CmdId.PromoteAvatarScRsp)); return false;
return;
} }
// Pay items // Pay items
@@ -142,26 +140,24 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(avatar)); player.sendPacket(new PacketPlayerSyncScNotify(avatar));
player.sendPacket(new BasePacket(CmdId.PromoteAvatarScRsp)); return true;
} }
public void unlockSkillTreeAvatar(Player player, int pointId) { public boolean unlockSkillTreeAvatar(Player player, int avatarId, int pointId) {
// Hacky way to get avatar id
int avatarId = pointId / 1000;
// Get avatar + Skill Tree data // Get avatar + Skill Tree data
GameAvatar avatar = player.getAvatarById(avatarId); GameAvatar avatar = player.getAvatarById(avatarId);
if (avatar == null) return; if (avatar == null) return false;
int nextLevel = avatar.getSkills().getOrDefault(pointId, 0) + 1; int nextLevel = avatar.getSkills().getOrDefault(pointId, 0) + 1;
AvatarSkillTreeExcel skillTree = GameData.getAvatarSkillTreeExcel(pointId, nextLevel); 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 // Verify item params
if (!player.getInventory().verifyItems(skillTree.getMaterialList())) { if (!player.getInventory().verifyItems(skillTree.getMaterialList())) {
player.sendPacket(new PacketUnlockSkilltreeScRsp()); return false;
return;
} }
// Pay items // Pay items
@@ -180,23 +176,22 @@ public class InventoryService extends BaseGameService {
player.sendPacket(new PacketPlayerSyncScNotify(avatar)); 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 // Get avatar
GameAvatar avatar = player.getAvatarById(avatarId); 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())); AvatarRankExcel rankData = GameData.getAvatarRankExcel(avatar.getExcel().getRankId(avatar.getRank()));
if (rankData == null) return; if (rankData == null) return false;
// Verify items // Verify items
for (ItemParam param : rankData.getUnlockCost()) { for (ItemParam param : rankData.getUnlockCost()) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
if (item == null || item.getCount() < param.getCount()) { if (item == null || item.getCount() < param.getCount()) {
player.sendPacket(new BasePacket(CmdId.RankUpAvatarScRsp)); return false;
return;
} }
} }
@@ -214,27 +209,24 @@ public class InventoryService extends BaseGameService {
player.sendPacket(new PacketPlayerSyncScNotify(avatar)); player.sendPacket(new PacketPlayerSyncScNotify(avatar));
} }
player.sendPacket(new BasePacket(CmdId.RankUpAvatarScRsp)); return true;
} }
public void takePromotionRewardAvatar(Player player, int avatarId, int promotion) { public List<GameItem> takePromotionRewardAvatar(Player player, int avatarId, int promotion) {
// Get avatar // Get avatar
GameAvatar avatar = player.getAvatarById(avatarId); GameAvatar avatar = player.getAvatarById(avatarId);
if (avatar == null) { if (avatar == null) {
player.sendPacket(new PacketTakePromotionRewardScRsp()); return null;
return;
} }
// Sanity // Sanity
if (promotion <= 0 || promotion > avatar.getPromotion()) { if (promotion <= 0 || promotion > avatar.getPromotion()) {
player.sendPacket(new PacketTakePromotionRewardScRsp()); return null;
return;
} }
// Make sure promotion level is odd + Make sure promotion reward isnt already taken // Make sure promotion level is odd + Make sure promotion reward isnt already taken
if (promotion % 2 == 0 || avatar.getTakenRewards().contains(promotion)) { if (promotion % 2 == 0 || avatar.getTakenRewards().contains(promotion)) {
player.sendPacket(new PacketTakePromotionRewardScRsp()); return null;
return;
} }
// Set reward as taken // Set reward as taken
@@ -250,22 +242,21 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(avatar)); player.sendPacket(new PacketPlayerSyncScNotify(avatar));
player.sendPacket(new PacketTakePromotionRewardScRsp(rewards)); return rewards;
} }
// === Equipment === // === Equipment ===
public void levelUpEquipment(Player player, int equipId, Collection<ItemParam> items) { public List<GameItem> levelUpEquipment(Player player, int equipId, Collection<ItemParam> items) {
// Get equipment // Get equipment
GameItem equip = player.getInventory().getItemByUid(equipId); GameItem equip = player.getInventory().getItemByUid(equipId);
if (equip == null || !equip.getExcel().isEquipment()) { if (equip == null || !equip.getExcel().isEquipment()) {
player.sendPacket(new PacketExpUpEquipmentScRsp()); return null;
return;
} }
EquipmentPromotionExcel promoteData = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion()); EquipmentPromotionExcel promoteData = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion());
if (promoteData == null) return; if (promoteData == null) return null;
// Exp gain // Exp gain
int cost = 0; int cost = 0;
@@ -274,10 +265,8 @@ public class InventoryService extends BaseGameService {
// Verify items // Verify items
for (ItemParam param : items) { for (ItemParam param : items) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
System.out.println(param.getId());
if (item == null || item.isLocked() || item.getCount() < param.getCount()) { if (item == null || item.isLocked() || item.getCount() < param.getCount()) {
player.sendPacket(new PacketExpUpEquipmentScRsp()); return null;
return;
} }
if (item.getExcel().getEquipmentExp() > 0) { if (item.getExcel().getEquipmentExp() > 0) {
@@ -288,8 +277,7 @@ public class InventoryService extends BaseGameService {
// Verify credits // Verify credits
if (player.getScoin() < cost) { if (player.getScoin() < cost) {
player.sendPacket(new PacketExpUpEquipmentScRsp()); return null;
return;
} }
// Pay items // Pay items
@@ -349,38 +337,34 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(equip)); 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 // Get equipment
GameItem equip = player.getInventory().getItemByUid(equipId); GameItem equip = player.getInventory().getItemByUid(equipId);
if (equip == null || !equip.getExcel().isEquipment() || equip.getPromotion() >= equip.getExcel().getEquipmentExcel().getMaxPromotion()) { if (equip == null || !equip.getExcel().isEquipment() || equip.getPromotion() >= equip.getExcel().getEquipmentExcel().getMaxPromotion()) {
player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); return false;
return;
} }
EquipmentPromotionExcel promotion = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion()); EquipmentPromotionExcel promotion = GameData.getEquipmentPromotionExcel(equip.getItemId(), equip.getPromotion());
// Sanity check // Sanity check
if ((promotion == null) || equip.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) { if ((promotion == null) || equip.getLevel() < promotion.getMaxLevel() || player.getLevel() < promotion.getPlayerLevelRequire() || player.getWorldLevel() < promotion.getWorldLevelRequire()) {
player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); return false;
return;
} }
// Verify items // Verify items
for (ItemParam param : promotion.getPromotionCostList()) { for (ItemParam param : promotion.getPromotionCostList()) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
if (item == null || item.getCount() < param.getCount()) { if (item == null || item.getCount() < param.getCount()) {
player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); return false;
return;
} }
} }
// Verify credits // Verify credits
if (player.getScoin() < promotion.getPromotionCostCoin()) { if (player.getScoin() < promotion.getPromotionCostCoin()) {
player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); return false;
return;
} }
// Pay items // Pay items
@@ -395,48 +379,50 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(equip)); player.sendPacket(new PacketPlayerSyncScNotify(equip));
player.sendPacket(new BasePacket(CmdId.PromoteEquipmentScRsp)); return true;
} }
public void rankUpEquipment(Player player, int equipId, List<ItemParam> items) { public boolean rankUpEquipment(Player player, int equipId, List<ItemParam> items) {
// Get avatar // Get avatar
GameItem equip = player.getInventory().getItemByUid(equipId); GameItem equip = player.getInventory().getItemByUid(equipId);
if (equip == null || !equip.getExcel().isEquipment() || equip.getRank() >= equip.getExcel().getEquipmentExcel().getMaxRank()) { if (equip == null || !equip.getExcel().isEquipment() || equip.getRank() >= equip.getExcel().getEquipmentExcel().getMaxRank()) {
player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); return false;
return;
} }
// Rank up amount
int amount = 0;
// Verify items // Verify items
for (ItemParam param : items) { for (ItemParam param : items) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
if (item == null || !equip.getExcel().getEquipmentExcel().isRankUpItem(item) || item.getCount() < param.getCount()) { if (item == null || !equip.getExcel().getEquipmentExcel().isRankUpItem(item) || item.getCount() < param.getCount()) {
player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); return false;
return;
} }
amount += item.getRank();
} }
// Pay items // Pay items
player.getInventory().removeItemsByParams(items); player.getInventory().removeItemsByParams(items);
// Add rank // 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(); equip.save();
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(equip)); player.sendPacket(new PacketPlayerSyncScNotify(equip));
player.sendPacket(new BasePacket(CmdId.RankUpEquipmentScRsp)); return true;
} }
// === Relic === // === Relic ===
public void levelUpRelic(Player player, int equipId, Collection<ItemParam> items) { public List<GameItem> levelUpRelic(Player player, int equipId, Collection<ItemParam> items) {
// Get relic // Get relic
GameItem equip = player.getInventory().getItemByUid(equipId); GameItem equip = player.getInventory().getItemByUid(equipId);
if (equip == null || !equip.getExcel().isRelic()) { if (equip == null || !equip.getExcel().isRelic()) {
player.sendPacket(new PacketExpUpRelicScRsp()); return null;
return;
} }
// Exp gain // Exp gain
@@ -447,8 +433,7 @@ public class InventoryService extends BaseGameService {
for (ItemParam param : items) { for (ItemParam param : items) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
if (item == null || item.isLocked() || item.getCount() < param.getCount()) { if (item == null || item.isLocked() || item.getCount() < param.getCount()) {
player.sendPacket(new PacketExpUpRelicScRsp()); return null;
return;
} }
if (item.getExcel().getRelicExp() > 0) { if (item.getExcel().getRelicExp() > 0) {
@@ -463,8 +448,7 @@ public class InventoryService extends BaseGameService {
// Verify credits // Verify credits
if (player.getScoin() < cost) { if (player.getScoin() < cost) {
player.sendPacket(new PacketExpUpRelicScRsp()); return null;
return;
} }
// Pay items // Pay items
@@ -537,7 +521,7 @@ public class InventoryService extends BaseGameService {
// Send packets // Send packets
player.sendPacket(new PacketPlayerSyncScNotify(equip)); player.sendPacket(new PacketPlayerSyncScNotify(equip));
player.sendPacket(new PacketExpUpRelicScRsp(returnItems)); return returnItems;
} }
// === Etc === // === Etc ===
@@ -556,15 +540,14 @@ public class InventoryService extends BaseGameService {
player.sendPacket(new PacketPlayerSyncScNotify(equip)); player.sendPacket(new PacketPlayerSyncScNotify(equip));
} }
public void sellItems(Player player, List<ItemParam> items) { public Int2IntMap sellItems(Player player, List<ItemParam> items) {
// Verify items // Verify items
var returnItems = new Int2IntOpenHashMap(); var returnItems = new Int2IntOpenHashMap();
for (ItemParam param : items) { for (ItemParam param : items) {
GameItem item = player.getInventory().getItemByParam(param); GameItem item = player.getInventory().getItemByParam(param);
if (item == null || item.isLocked() || item.getCount() < param.getCount()) { if (item == null || item.isLocked() || item.getCount() < param.getCount()) {
player.sendPacket(new PacketSellItemScRsp(null)); return null;
return;
} }
// Add return items // Add return items
@@ -582,8 +565,8 @@ public class InventoryService extends BaseGameService {
player.getInventory().addItem(returnItem.getIntKey(), returnItem.getIntValue()); player.getInventory().addItem(returnItem.getIntKey(), returnItem.getIntValue());
} }
// Send packet // Done
player.sendPacket(new PacketSellItemScRsp(returnItems)); return returnItems;
} }
public List<GameItem> composeItem(Player player, int composeId, int count) { public List<GameItem> composeItem(Player player, int composeId, int count) {

View File

@@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketAvatarExpUpScRsp;
@Opcodes(CmdId.AvatarExpUpCsReq) @Opcodes(CmdId.AvatarExpUpCsReq)
public class HandlerAvatarExpUpCsReq extends PacketHandler { public class HandlerAvatarExpUpCsReq extends PacketHandler {
@@ -23,7 +24,8 @@ public class HandlerAvatarExpUpCsReq extends PacketHandler {
items.add(new ItemParam(cost)); 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));
} }
} }

View File

@@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketExpUpEquipmentScRsp;
@Opcodes(CmdId.ExpUpEquipmentCsReq) @Opcodes(CmdId.ExpUpEquipmentCsReq)
public class HandlerExpUpEquipmentCsReq extends PacketHandler { public class HandlerExpUpEquipmentCsReq extends PacketHandler {
@@ -23,7 +24,8 @@ public class HandlerExpUpEquipmentCsReq extends PacketHandler {
items.add(new ItemParam(cost)); 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));
} }
} }

View File

@@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketExpUpRelicScRsp;
@Opcodes(CmdId.ExpUpRelicCsReq) @Opcodes(CmdId.ExpUpRelicCsReq)
public class HandlerExpUpRelicCsReq extends PacketHandler { public class HandlerExpUpRelicCsReq extends PacketHandler {
@@ -23,7 +24,8 @@ public class HandlerExpUpRelicCsReq extends PacketHandler {
items.add(new ItemParam(cost)); 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));
} }
} }

View File

@@ -14,6 +14,7 @@ public class HandlerPromoteAvatarCsReq extends PacketHandler {
var req = PromoteAvatarCsReq.parseFrom(data); var req = PromoteAvatarCsReq.parseFrom(data);
session.getServer().getInventoryService().promoteAvatar(session.getPlayer(), req.getBaseAvatarId()); session.getServer().getInventoryService().promoteAvatar(session.getPlayer(), req.getBaseAvatarId());
session.send(CmdId.PromoteAvatarScRsp);
} }
} }

View File

@@ -14,6 +14,7 @@ public class HandlerPromoteEquipmentCsReq extends PacketHandler {
var req = PromoteEquipmentCsReq.parseFrom(data); var req = PromoteEquipmentCsReq.parseFrom(data);
session.getServer().getInventoryService().promoteEquipment(session.getPlayer(), req.getEquipmentUniqueId()); session.getServer().getInventoryService().promoteEquipment(session.getPlayer(), req.getEquipmentUniqueId());
session.send(CmdId.PromoteEquipmentScRsp);
} }
} }

View File

@@ -14,6 +14,7 @@ public class HandlerRankUpAvatarCsReq extends PacketHandler {
var req = RankUpAvatarCsReq.parseFrom(data); var req = RankUpAvatarCsReq.parseFrom(data);
session.getServer().getInventoryService().rankUpAvatar(session.getPlayer(), req.getBaseAvatarId()); session.getServer().getInventoryService().rankUpAvatar(session.getPlayer(), req.getBaseAvatarId());
session.send(CmdId.RankUpAvatarScRsp);
} }
} }

View File

@@ -24,6 +24,7 @@ public class HandlerRankUpEquipmentCsReq extends PacketHandler {
} }
session.getServer().getInventoryService().rankUpEquipment(session.getPlayer(), req.getEquipmentUniqueId(), items); session.getServer().getInventoryService().rankUpEquipment(session.getPlayer(), req.getEquipmentUniqueId(), items);
session.send(CmdId.RankUpEquipmentScRsp);
} }
} }

View File

@@ -10,6 +10,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketSellItemScRsp;
@Opcodes(CmdId.SellItemCsReq) @Opcodes(CmdId.SellItemCsReq)
public class HandlerSellItemCsReq extends PacketHandler { public class HandlerSellItemCsReq extends PacketHandler {
@@ -23,7 +24,8 @@ public class HandlerSellItemCsReq extends PacketHandler {
items.add(new ItemParam(cost)); 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));
} }
} }

View File

@@ -5,6 +5,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketTakePromotionRewardScRsp;
@Opcodes(CmdId.TakePromotionRewardCsReq) @Opcodes(CmdId.TakePromotionRewardCsReq)
public class HandlerTakePromotionRewardCsReq extends PacketHandler { public class HandlerTakePromotionRewardCsReq extends PacketHandler {
@@ -13,7 +14,8 @@ public class HandlerTakePromotionRewardCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception { public void handle(GameSession session, byte[] data) throws Exception {
var req = TakePromotionRewardCsReq.parseFrom(data); 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));
} }
} }

View File

@@ -5,6 +5,7 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketUnlockSkilltreeScRsp;
@Opcodes(CmdId.UnlockSkilltreeCsReq) @Opcodes(CmdId.UnlockSkilltreeCsReq)
public class HandlerUnlockSkilltreeCsReq extends PacketHandler { public class HandlerUnlockSkilltreeCsReq extends PacketHandler {
@@ -12,8 +13,15 @@ public class HandlerUnlockSkilltreeCsReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] data) throws Exception { public void handle(GameSession session, byte[] data) throws Exception {
var req = UnlockSkilltreeCsReq.parseFrom(data); 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());
}
} }
} }

View File

@@ -14,18 +14,14 @@ public class PacketAvatarExpUpScRsp extends BasePacket {
var data = AvatarExpUpScRsp.newInstance(); var data = AvatarExpUpScRsp.newInstance();
if (returnItems != null) {
for (GameItem item : returnItems) { for (GameItem item : returnItems) {
data.addReturnItemList(item.toPileProto()); data.addReturnItemList(item.toPileProto());
} }
} else {
this.setData(data); data.setRetcode(1);
} }
public PacketAvatarExpUpScRsp() {
super(CmdId.AvatarExpUpScRsp);
var data = AvatarExpUpScRsp.newInstance().setRetcode(1);
this.setData(data); this.setData(data);
} }
} }

View File

@@ -14,18 +14,15 @@ public class PacketExpUpEquipmentScRsp extends BasePacket {
var data = ExpUpEquipmentScRsp.newInstance(); var data = ExpUpEquipmentScRsp.newInstance();
if (returnItems != null) {
for (GameItem item : returnItems) { for (GameItem item : returnItems) {
data.addReturnItemList(item.toPileProto()); data.addReturnItemList(item.toPileProto());
} }
} else {
data.setRetcode(1);
}
this.setData(data); this.setData(data);
} }
public PacketExpUpEquipmentScRsp() {
super(CmdId.ExpUpEquipmentScRsp);
var data = ExpUpEquipmentScRsp.newInstance().setRetcode(1);
this.setData(data);
}
} }

View File

@@ -14,18 +14,14 @@ public class PacketExpUpRelicScRsp extends BasePacket {
var data = ExpUpRelicScRsp.newInstance(); var data = ExpUpRelicScRsp.newInstance();
if (returnItems != null) {
for (GameItem item : returnItems) { for (GameItem item : returnItems) {
data.addReturnItemList(item.toPileProto()); data.addReturnItemList(item.toPileProto());
} }
} else {
this.setData(data); data.setRetcode(1);
} }
public PacketExpUpRelicScRsp() {
super(CmdId.ExpUpRelicScRsp);
var data = ExpUpRelicScRsp.newInstance().setRetcode(1);
this.setData(data); this.setData(data);
} }
} }

View File

@@ -1,6 +1,5 @@
package emu.lunarcore.server.packet.send; package emu.lunarcore.server.packet.send;
import emu.lunarcore.proto.ItemListOuterClass.ItemList;
import emu.lunarcore.proto.ItemOuterClass.Item; import emu.lunarcore.proto.ItemOuterClass.Item;
import emu.lunarcore.proto.SellItemScRspOuterClass.SellItemScRsp; import emu.lunarcore.proto.SellItemScRspOuterClass.SellItemScRsp;
import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.BasePacket;
@@ -12,16 +11,19 @@ public class PacketSellItemScRsp extends BasePacket {
public PacketSellItemScRsp(Int2IntMap returnItems) { public PacketSellItemScRsp(Int2IntMap returnItems) {
super(CmdId.SellItemScRsp); super(CmdId.SellItemScRsp);
var list = ItemList.newInstance(); var data = SellItemScRsp.newInstance();
if (returnItems != null) { if (returnItems != null) {
for (var item : returnItems.int2IntEntrySet()) { 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());
var data = SellItemScRsp.newInstance() data.getMutableReturnItemList().addItemList(itemProto);
.setReturnItemList(list); }
} else {
data.setRetcode(1);
}
this.setData(data); this.setData(data);
} }

View File

@@ -3,33 +3,24 @@ package emu.lunarcore.server.packet.send;
import java.util.Collection; import java.util.Collection;
import emu.lunarcore.game.inventory.GameItem; import emu.lunarcore.game.inventory.GameItem;
import emu.lunarcore.proto.ItemListOuterClass.ItemList;
import emu.lunarcore.proto.TakePromotionRewardScRspOuterClass.TakePromotionRewardScRsp; import emu.lunarcore.proto.TakePromotionRewardScRspOuterClass.TakePromotionRewardScRsp;
import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
public class PacketTakePromotionRewardScRsp extends BasePacket { public class PacketTakePromotionRewardScRsp extends BasePacket {
public PacketTakePromotionRewardScRsp() {
super(CmdId.TakePromotionRewardScRsp);
var data = TakePromotionRewardScRsp.newInstance()
.setRetcode(1);
this.setData(data);
}
public PacketTakePromotionRewardScRsp(Collection<GameItem> rewards) { public PacketTakePromotionRewardScRsp(Collection<GameItem> rewards) {
super(CmdId.TakePromotionRewardScRsp); super(CmdId.TakePromotionRewardScRsp);
var rewardList = ItemList.newInstance(); var data = TakePromotionRewardScRsp.newInstance();
if (rewards != null) {
for (GameItem item : rewards) { for (GameItem item : rewards) {
rewardList.addItemList(item.toProto()); data.getMutableRewardList().addItemList(item.toProto());
}
} else {
data.setRetcode(1);
} }
var data = TakePromotionRewardScRsp.newInstance()
.setRewardList(rewardList);
this.setData(data); this.setData(data);
} }