diff --git a/src/main/java/emu/nebula/game/tower/StarTowerGame.java b/src/main/java/emu/nebula/game/tower/StarTowerGame.java index 1fdb12c..b174adf 100644 --- a/src/main/java/emu/nebula/game/tower/StarTowerGame.java +++ b/src/main/java/emu/nebula/game/tower/StarTowerGame.java @@ -249,6 +249,10 @@ public class StarTowerGame { return Utils.randomElement(this.getCharIds()); } + public void setHp(int hp) { + this.charHp = hp; + } + public StarTowerStageDef getStageData(int stageNum, int stageFloor) { var stageId = (this.getId() * 10000) + (stageNum * 100) + stageFloor; return GameData.getStarTowerStageDataTable().get(stageId); @@ -792,7 +796,13 @@ public class StarTowerGame { // Handle interaction with tower case if (towerCase != null) { + // Interact with case rsp = towerCase.interact(req, rsp); + + // Remove case + if (towerCase.removeAfterInteract()) { + this.getRoom().getCases().remove(req.getId()); + } } else { rsp.getMutableNilResp(); } diff --git a/src/main/java/emu/nebula/game/tower/cases/StarTowerBaseCase.java b/src/main/java/emu/nebula/game/tower/cases/StarTowerBaseCase.java index a1da99a..4b7900b 100644 --- a/src/main/java/emu/nebula/game/tower/cases/StarTowerBaseCase.java +++ b/src/main/java/emu/nebula/game/tower/cases/StarTowerBaseCase.java @@ -29,6 +29,10 @@ public abstract class StarTowerBaseCase { } public abstract CaseType getType(); + + public boolean removeAfterInteract() { + return true; + } public void register(StarTowerBaseRoom room) { this.game = room.getGame(); diff --git a/src/main/java/emu/nebula/game/tower/cases/StarTowerHawkerCase.java b/src/main/java/emu/nebula/game/tower/cases/StarTowerHawkerCase.java index a2999de..6fdd398 100644 --- a/src/main/java/emu/nebula/game/tower/cases/StarTowerHawkerCase.java +++ b/src/main/java/emu/nebula/game/tower/cases/StarTowerHawkerCase.java @@ -30,6 +30,11 @@ public class StarTowerHawkerCase extends StarTowerBaseCase { return CaseType.Hawker; } + @Override + public boolean removeAfterInteract() { + return false; + } + @Override public void onRegister() { this.initGoods(); @@ -251,6 +256,10 @@ public class StarTowerHawkerCase extends StarTowerBaseCase { info.setCharPos(goods.getCharPos()); } + if (goods.isSold()) { + hawker.addPurchase(sid); + } + hawker.addList(info); } diff --git a/src/main/java/emu/nebula/game/tower/cases/StarTowerNpcRecoveryHPCase.java b/src/main/java/emu/nebula/game/tower/cases/StarTowerNpcRecoveryHPCase.java index 46d1c0e..aa1068c 100644 --- a/src/main/java/emu/nebula/game/tower/cases/StarTowerNpcRecoveryHPCase.java +++ b/src/main/java/emu/nebula/game/tower/cases/StarTowerNpcRecoveryHPCase.java @@ -24,6 +24,13 @@ public class StarTowerNpcRecoveryHPCase extends StarTowerBaseCase { @Override public StarTowerInteractResp interact(StarTowerInteractReq req, StarTowerInteractResp rsp) { + // Get hp + int hp = req.getRecoveryHPReq().getHp(); + + // Sync with game + this.getGame().setHp(hp); + + // Complete return rsp; } diff --git a/src/main/java/emu/nebula/game/tower/cases/StarTowerStrengthenMachineCase.java b/src/main/java/emu/nebula/game/tower/cases/StarTowerStrengthenMachineCase.java index 7ea3c50..a9bfbc4 100644 --- a/src/main/java/emu/nebula/game/tower/cases/StarTowerStrengthenMachineCase.java +++ b/src/main/java/emu/nebula/game/tower/cases/StarTowerStrengthenMachineCase.java @@ -14,6 +14,11 @@ public class StarTowerStrengthenMachineCase extends StarTowerBaseCase { private int discount; private int times; + @Override + public boolean removeAfterInteract() { + return false; + } + @Override public void onRegister() { // Set strengthen price diff --git a/src/main/java/emu/nebula/game/tower/cases/StarTowerSyncHPCase.java b/src/main/java/emu/nebula/game/tower/cases/StarTowerSyncHPCase.java index e519c83..db1d0ac 100644 --- a/src/main/java/emu/nebula/game/tower/cases/StarTowerSyncHPCase.java +++ b/src/main/java/emu/nebula/game/tower/cases/StarTowerSyncHPCase.java @@ -15,6 +15,13 @@ public class StarTowerSyncHPCase extends StarTowerBaseCase { @Override public StarTowerInteractResp interact(StarTowerInteractReq req, StarTowerInteractResp rsp) { + // Get hp + int hp = req.getRecoveryHPReq().getHp(); + + // Sync with game + this.getGame().setHp(hp); + + // Complete return rsp; } diff --git a/src/main/java/emu/nebula/server/handlers/HandlerStarTowerInfoReq.java b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerInfoReq.java new file mode 100644 index 0000000..ce85ad7 --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerInfoReq.java @@ -0,0 +1,24 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.net.HandlerId; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.star_tower_info_req) +public class HandlerStarTowerInfoReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Get star tower game + var game = session.getPlayer().getStarTowerManager().getGame(); + + if (game == null) { + return session.encodeMsg(NetMsgId.star_tower_info_failed_ack); + } + + // Encode and send + return session.encodeMsg(NetMsgId.star_tower_info_succeed_ack, game.toProto()); + } + +}