diff --git a/src/main/java/emu/lunarcore/data/GameData.java b/src/main/java/emu/lunarcore/data/GameData.java index 278eed2..06b696d 100644 --- a/src/main/java/emu/lunarcore/data/GameData.java +++ b/src/main/java/emu/lunarcore/data/GameData.java @@ -20,6 +20,7 @@ public class GameData { @Getter private static Int2ObjectMap equipExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap relicExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap monsterExcelMap = new Int2ObjectOpenHashMap<>(); + @Getter private static Int2ObjectMap propExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap npcExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap npcMonsterExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap stageExcelMap = new Int2ObjectOpenHashMap<>(); diff --git a/src/main/java/emu/lunarcore/data/excel/PropExcel.java b/src/main/java/emu/lunarcore/data/excel/PropExcel.java new file mode 100644 index 0000000..88a8a4a --- /dev/null +++ b/src/main/java/emu/lunarcore/data/excel/PropExcel.java @@ -0,0 +1,32 @@ +package emu.lunarcore.data.excel; + +import emu.lunarcore.data.GameResource; +import emu.lunarcore.data.ResourceType; +import lombok.Getter; + +@Getter +@ResourceType(name = {"MazeProp.json"}) +public class PropExcel extends GameResource { + private int ID; + private String JsonPath; + + private transient boolean recoverHp; + private transient boolean recoverMp; + + @Override + public int getId() { + return ID; + } + + @Override + public void onLoad() { + // Hacky way to determine if a prop will recover hp or mp + if (getJsonPath() != null && getJsonPath().length() > 0) { + if (getJsonPath().contains("MPRecoverBox")) { + this.recoverMp = true; + } else if (getJsonPath().contains("HPRecoverBox")) { + this.recoverHp = true; + } + } + } +} diff --git a/src/main/java/emu/lunarcore/game/scene/Scene.java b/src/main/java/emu/lunarcore/game/scene/Scene.java index 9aa64d9..fd8045a 100644 --- a/src/main/java/emu/lunarcore/game/scene/Scene.java +++ b/src/main/java/emu/lunarcore/game/scene/Scene.java @@ -8,6 +8,7 @@ import emu.lunarcore.data.config.*; import emu.lunarcore.data.config.GroupInfo.GroupLoadSide; import emu.lunarcore.data.excel.MazePlaneExcel; import emu.lunarcore.data.excel.NpcMonsterExcel; +import emu.lunarcore.data.excel.PropExcel; import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.enums.PropState; import emu.lunarcore.game.player.PlayerLineup; @@ -98,8 +99,14 @@ public class Scene { // Add props if (group.getPropList() != null && group.getPropList().size() > 0) { for (PropInfo propInfo : group.getPropList()) { + // Get prop excel + PropExcel propExcel = GameData.getPropExcelMap().get(propInfo.getPropID()); + if (propExcel == null) { + continue; + } + // Create prop from prop info - EntityProp prop = new EntityProp(propInfo.getPropID(), propInfo.clonePos()); + EntityProp prop = new EntityProp(propExcel, propInfo.clonePos()); prop.setState(propInfo.getState()); prop.getRot().set( (int) (propInfo.getRotX() * 1000f), diff --git a/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java b/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java index 0f95006..0ab9b32 100644 --- a/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java +++ b/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java @@ -1,14 +1,11 @@ package emu.lunarcore.game.scene.entity; -import emu.lunarcore.data.excel.NpcMonsterExcel; -import emu.lunarcore.data.excel.StageExcel; +import emu.lunarcore.data.excel.PropExcel; import emu.lunarcore.game.enums.PropState; import emu.lunarcore.game.scene.Scene; import emu.lunarcore.proto.MotionInfoOuterClass.MotionInfo; import emu.lunarcore.proto.SceneEntityInfoOuterClass.SceneEntityInfo; -import emu.lunarcore.proto.SceneNpcMonsterInfoOuterClass.SceneNpcMonsterInfo; import emu.lunarcore.proto.ScenePropInfoOuterClass.ScenePropInfo; -import emu.lunarcore.proto.VectorOuterClass.Vector; import emu.lunarcore.util.Position; import lombok.Getter; import lombok.Setter; @@ -18,23 +15,28 @@ public class EntityProp implements GameEntity { @Setter private int entityId; @Setter private int groupId; @Setter private int instId; - @Setter private int propId; @Setter private PropState state; + private PropExcel excel; private Position pos; private Position rot; - public EntityProp(int propId, Position pos) { - this.propId = propId; + public EntityProp(PropExcel excel, Position pos) { + this.excel = excel; this.pos = pos; this.rot = new Position(); this.state = PropState.Closed; } + public int getPropId() { + return excel.getId(); + } + @Override public void onRemove(Scene scene) { - // TODO Debug - scene.getPlayer().getLineupManager().addMp(2); + if (excel.isRecoverMp()) { + scene.getPlayer().getLineupManager().addMp(2); + } } @Override