diff --git a/src/main/java/emu/nebula/command/commands/BattlePassCommand.java b/src/main/java/emu/nebula/command/commands/BattlePassCommand.java new file mode 100644 index 0000000..664c130 --- /dev/null +++ b/src/main/java/emu/nebula/command/commands/BattlePassCommand.java @@ -0,0 +1,61 @@ +package emu.nebula.command.commands; + +import emu.nebula.command.Command; +import emu.nebula.command.CommandArgs; +import emu.nebula.command.CommandHandler; +import emu.nebula.net.NetMsgId; + +@Command(label = "battlepass", aliases = {"bp"}, permission = "player.battlepass", desc = "/battlepass [free | premium] lv(level). mMdifies your battle pass") +public class BattlePassCommand implements CommandHandler { + + @Override + public String execute(CommandArgs args) { + // Get target + var target = args.getTarget(); + var battlepass = target.getBattlePassManager().getBattlePass(); + boolean changed = false; + + // Check if we are changing premium status + int mode = -1; + + for (var arg : args.getList()) { + if (arg.equalsIgnoreCase("free")) { + mode = 0; + } else if (arg.equalsIgnoreCase("premium")) { + mode = 2; + } + } + + if (mode >= 0 && battlepass.getMode() != mode) { + battlepass.setMode(mode); + changed = true; + } + + // Set level + int level = Math.min(args.getLevel(), 50); + + if (level >= 0 && battlepass.getLevel() != level) { + battlepass.setLevel(level); + changed = true; + } + + // Check if we have made any changes + if (changed) { + // Save battle pass to the database + battlepass.save(); + + // Send package to notify the client that the battle pass needs updating + target.addNextPackage( + NetMsgId.battle_pass_info_succeed_ack, + battlepass.toProto() + ); + + // Success message + return "Changed the battle pass successfully."; + } + + // Result message + return "No changes were made to the battle pass."; + } + +} diff --git a/src/main/java/emu/nebula/game/battlepass/BattlePass.java b/src/main/java/emu/nebula/game/battlepass/BattlePass.java index 7974366..61b0276 100644 --- a/src/main/java/emu/nebula/game/battlepass/BattlePass.java +++ b/src/main/java/emu/nebula/game/battlepass/BattlePass.java @@ -30,7 +30,7 @@ public class BattlePass implements GameDatabaseObject { private int uid; private transient BattlePassManager manager; - private int battlePassId; + private int battlePassId; // Season id private int mode; private int level; private int exp; @@ -71,6 +71,13 @@ public class BattlePass implements GameDatabaseObject { return manager.getPlayer(); } + /** + * Sets the mode directly + */ + public synchronized void setMode(int mode) { + this.mode = mode; + } + public boolean isPremium() { return this.mode > 0; } @@ -79,6 +86,14 @@ public class BattlePass implements GameDatabaseObject { return GameData.getBattlePassRewardDataTable().get((this.getBattlePassId() << 16) + level); } + /** + * Sets the level directly, use getMaxExp() instead if adding exp. + */ + public synchronized void setLevel(int level) { + this.level = level; + this.exp = 0; + } + public int getMaxExp() { var data = GameData.getBattlePassLevelDataTable().get(this.getLevel() + 1); return data != null ? data.getExp() : 0;