diff --git a/src/main/java/emu/nebula/game/tower/StarTowerManager.java b/src/main/java/emu/nebula/game/tower/StarTowerManager.java index 3116242..137bc41 100644 --- a/src/main/java/emu/nebula/game/tower/StarTowerManager.java +++ b/src/main/java/emu/nebula/game/tower/StarTowerManager.java @@ -92,24 +92,40 @@ public class StarTowerManager extends PlayerManager implements GameDatabaseObjec return game; } - public boolean saveBuild(boolean delete, String name, boolean lock) { + // Build + + private PlayerChangeInfo dismantleBuild(StarTowerBuild build, PlayerChangeInfo change) { + // Calculate quanity of tickets from record score + int count = (int) Math.floor(build.getScore() / 100); + + // Add journey tickets + this.getPlayer().getInventory().addItem(12, count, change); + + // Success + return change; + } + + public PlayerChangeInfo saveBuild(boolean delete, String name, boolean lock) { // Sanity check if (this.getLastBuild() == null) { - return false; + return null; } + // Create player change info + var change = new PlayerChangeInfo(); + // Cache build and clear reference var build = this.lastBuild; this.lastBuild = null; // Check if the player wants this build or not if (delete) { - return true; + return this.dismantleBuild(build, change); } // Check limit if (this.getBuilds().size() >= 50) { - return false; + return null; } // Add to builds @@ -118,25 +134,31 @@ public class StarTowerManager extends PlayerManager implements GameDatabaseObjec // Save build to database build.save(); - // - return true; + // Success + return change; } - // TODO give rewards to player - public PlayerChangeInfo deleteBuild(long buildId, PlayerChangeInfo changes) { + public PlayerChangeInfo deleteBuild(long buildId, PlayerChangeInfo change) { // Create change info - if (changes == null) { - changes = new PlayerChangeInfo(); + if (change == null) { + change = new PlayerChangeInfo(); } // Get build var build = this.getBuilds().remove(buildId); - if (build != null) { - build.delete(); + if (build == null) { + return change; } - return changes; + // Delete + build.delete(); + + // Add journey tickets + this.dismantleBuild(build, change); + + // Success + return change; } // Database diff --git a/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildDeleteReq.java b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildDeleteReq.java index b6bb28e..b0a7ca3 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildDeleteReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildDeleteReq.java @@ -16,17 +16,17 @@ public class HandlerStarTowerBuildDeleteReq extends NetHandler { // Parse request var req = StarTowerBuildDeleteReq.parseFrom(message); - // - var changes = new PlayerChangeInfo(); + // Player change info + var change = new PlayerChangeInfo(); // Delete for (var id : req.getBuildIds()) { - session.getPlayer().getStarTowerManager().deleteBuild(id, changes); + session.getPlayer().getStarTowerManager().deleteBuild(id, change); } // Build response var rsp = StarTowerBuildDeleteResp.newInstance() - .setChange(changes.toProto()); + .setChange(change.toProto()); // Encode packet return session.encodeMsg(NetMsgId.star_tower_build_delete_succeed_ack, rsp); diff --git a/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildWhetherSaveReq.java b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildWhetherSaveReq.java index 521bb28..71435a9 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildWhetherSaveReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerStarTowerBuildWhetherSaveReq.java @@ -16,18 +16,19 @@ public class HandlerStarTowerBuildWhetherSaveReq extends NetHandler { var req = StarTowerBuildWhetherSaveReq.parseFrom(message); // Save build - boolean result = session.getPlayer().getStarTowerManager().saveBuild( + var change = session.getPlayer().getStarTowerManager().saveBuild( req.getDelete(), req.getBuildName(), req.getLock() ); - if (!result) { + if (change == null) { return session.encodeMsg(NetMsgId.star_tower_build_whether_save_failed_ack); } // Build response - var rsp = StarTowerBuildWhetherSaveResp.newInstance(); + var rsp = StarTowerBuildWhetherSaveResp.newInstance() + .setChange(change.toProto()); return session.encodeMsg(NetMsgId.star_tower_build_whether_save_succeed_ack, rsp); }