mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-16 15:24:44 +01:00
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:
@@ -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) {
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user