mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
Implement compose items
This commit is contained in:
@@ -29,6 +29,7 @@ public class GameData {
|
||||
@Getter private static Int2ObjectMap<MapEntranceExcel> mapEntranceExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<HeroExcel> heroExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<ShopExcel> shopExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<ItemComposeExcel> itemComposeExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
@Getter private static Int2ObjectMap<ChallengeExcel> challengeExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
@Getter private static Int2ObjectMap<ChallengeTargetExcel> challengeTargetExcelMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
31
src/main/java/emu/lunarcore/data/excel/ItemComposeExcel.java
Normal file
31
src/main/java/emu/lunarcore/data/excel/ItemComposeExcel.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package emu.lunarcore.data.excel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import emu.lunarcore.data.GameResource;
|
||||
import emu.lunarcore.data.ResourceType;
|
||||
import emu.lunarcore.data.common.ItemParam;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = {"ItemComposeConfig.json"})
|
||||
public class ItemComposeExcel extends GameResource {
|
||||
private int ID;
|
||||
private int ItemID;
|
||||
private FormulaType FormulaType;
|
||||
private List<ItemParam> MaterialCost;
|
||||
private int[] SpecialMaterialCost;
|
||||
private int CoinCost;
|
||||
private int WorldLevelRequire;
|
||||
private int[] RelicList;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public enum FormulaType {
|
||||
Unknown, Normal, Sepcial, SelectedRelic;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import java.util.List;
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.common.ItemParam;
|
||||
import emu.lunarcore.data.excel.*;
|
||||
import emu.lunarcore.data.excel.ItemComposeExcel.FormulaType;
|
||||
import emu.lunarcore.game.avatar.GameAvatar;
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
@@ -585,4 +586,42 @@ public class InventoryService extends BaseGameService {
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
public List<GameItem> composeItem(Player player, int composeId, int count) {
|
||||
// Sanity check
|
||||
if (count <= 0) return null;
|
||||
|
||||
// Get item compose excel data
|
||||
ItemComposeExcel excel = GameData.getItemComposeExcelMap().get(composeId);
|
||||
if (excel == null || excel.getFormulaType() != FormulaType.Normal) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Verify items
|
||||
for (ItemParam param : excel.getMaterialCost()) {
|
||||
GameItem item = player.getInventory().getItemByParam(param);
|
||||
if (item == null || item.getCount() < param.getCount() * count) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Verify credits
|
||||
if (player.getScoin() < excel.getCoinCost() * count) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Pay items
|
||||
player.getInventory().removeItemsByParams(excel.getMaterialCost(), count);
|
||||
player.addSCoin(-excel.getCoinCost() * count);
|
||||
|
||||
// Compose item
|
||||
List<GameItem> items = new ArrayList<>();
|
||||
GameItem item = new GameItem(excel.getItemID(), count);
|
||||
items.add(item);
|
||||
|
||||
// Add items to inventory
|
||||
player.getInventory().addItems(items);
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.lunarcore.server.packet.recv;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.proto.ComposeItemCsReqOuterClass.ComposeItemCsReq;
|
||||
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.PacketComposeItemScRsp;
|
||||
|
||||
@Opcodes(CmdId.ComposeItemCsReq)
|
||||
public class HandlerComposeItemCsReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
|
||||
var req = ComposeItemCsReq.parseFrom(data);
|
||||
|
||||
List<GameItem> returnList = session.getServer().getInventoryService().composeItem(
|
||||
session.getPlayer(),
|
||||
req.getComposeId(),
|
||||
req.getCount()
|
||||
);
|
||||
|
||||
session.send(new PacketComposeItemScRsp(req.getComposeId(), req.getCount(), returnList));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.lunarcore.server.packet.send;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.proto.ComposeItemScRspOuterClass.ComposeItemScRsp;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
|
||||
public class PacketComposeItemScRsp extends BasePacket {
|
||||
|
||||
public PacketComposeItemScRsp(int composeId, int count, Collection<GameItem> returnList) {
|
||||
super(CmdId.ComposeItemScRsp);
|
||||
|
||||
var data = ComposeItemScRsp.newInstance()
|
||||
.setComposeId(composeId)
|
||||
.setCount(count);
|
||||
|
||||
if (returnList != null) {
|
||||
for (var item : returnList) {
|
||||
data.getMutableReturnItemList().addItemList(item.toProto());
|
||||
}
|
||||
} else {
|
||||
data.getMutableReturnItemList();
|
||||
}
|
||||
|
||||
this.setData(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user