diff --git a/.gitignore b/.gitignore index 00452f7..962c8d5 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ tmp/ *~.nib .loadpath .recommenders +./StellaSoraData # VSCode .vscode diff --git a/StellaSoraData b/StellaSoraData new file mode 160000 index 0000000..bb5ed8a --- /dev/null +++ b/StellaSoraData @@ -0,0 +1 @@ +Subproject commit bb5ed8a3fd2aee5c72082a003311e137e50942cf diff --git a/src/main/java/emu/nebula/command/commands/RemoteKeyCommand.java b/src/main/java/emu/nebula/command/commands/RemoteKeyCommand.java index bc4a331..b591a01 100644 --- a/src/main/java/emu/nebula/command/commands/RemoteKeyCommand.java +++ b/src/main/java/emu/nebula/command/commands/RemoteKeyCommand.java @@ -21,7 +21,7 @@ public class RemoteKeyCommand implements CommandHandler { int index = random.nextInt(characters.length()); sb.append(characters.charAt(index)); } - + args.getTarget().setRemoteToken(sb.toString()); return "Key Generated: " + sb.toString(); } else { diff --git a/src/main/java/emu/nebula/command/commands/SetLevelCommand.java b/src/main/java/emu/nebula/command/commands/SetLevelCommand.java new file mode 100644 index 0000000..4ad1795 --- /dev/null +++ b/src/main/java/emu/nebula/command/commands/SetLevelCommand.java @@ -0,0 +1,41 @@ +package emu.nebula.command.commands; + +import emu.nebula.command.Command; +import emu.nebula.command.CommandArgs; +import emu.nebula.command.CommandHandler; +import emu.nebula.data.GameData; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.NotifyGm.GmWorldClass; +import emu.nebula.util.Utils; + +@Command(label = "setlevel", aliases = {"level", "l"}, permission = "player.level", requireTarget = true, desc = "/level [level]. Set player level") +public class SetLevelCommand implements CommandHandler { + + @Override + public String execute(CommandArgs args) { + // Get target + var target = args.getTarget(); + + // Parse level + int level = Utils.parseSafeInt(args.get(0)); + + // Check to make sure world class data exists for this level + var data = GameData.getWorldClassDataTable().get(level); + if (data == null) { + return "The game does not support level " + level; + } + + target.setLevel(level); + target.setExp(0); + + // Update + target.addNextPackage( + NetMsgId.world_class_number_notify, + GmWorldClass.newInstance() + .setFinalClass(target.getLevel()) + .setLastExp(target.getExp()) + ); + + return "Level set to " + level; + } +} diff --git a/src/main/java/emu/nebula/data/GameData.java b/src/main/java/emu/nebula/data/GameData.java index 444a91e..ce350c5 100644 --- a/src/main/java/emu/nebula/data/GameData.java +++ b/src/main/java/emu/nebula/data/GameData.java @@ -130,4 +130,4 @@ public class GameData { // Score boss @Getter private static DataTable ScoreBossControlDataTable = new DataTable<>(); -} +} \ No newline at end of file diff --git a/src/main/java/emu/nebula/game/player/Player.java b/src/main/java/emu/nebula/game/player/Player.java index d0b7844..fbbe98e 100644 --- a/src/main/java/emu/nebula/game/player/Player.java +++ b/src/main/java/emu/nebula/game/player/Player.java @@ -201,7 +201,17 @@ public class Player implements GameDatabaseObject { public boolean hasSession() { return this.session != null; } + + public void setLevel(int level) { + this.level = level; + Nebula.getGameDatabase().update(this, this.getUid(), "level", this.level); + } + public void setExp(int exp) { + this.exp = exp; + Nebula.getGameDatabase().update(this, this.getUid(), "exp", this.exp); + } + public void setRemoteToken(String token) { // Skip if tokens are the same if (this.remoteToken == null) { @@ -898,4 +908,4 @@ public class Player implements GameDatabaseObject { return proto; } -} +} \ No newline at end of file diff --git a/src/main/java/emu/nebula/server/HttpServer.java b/src/main/java/emu/nebula/server/HttpServer.java index ad5c183..c288b5a 100644 --- a/src/main/java/emu/nebula/server/HttpServer.java +++ b/src/main/java/emu/nebula/server/HttpServer.java @@ -163,14 +163,9 @@ public class HttpServer { // https://nova-static.stellasora.global/ getApp().get("/meta/serverlist.html", new MetaServerlistHandler(this)); getApp().get("/meta/win.html", new MetaWinHandler(this)); - // if (!Nebula.getConfig().getRemoteCommand().useRemoteServices) { - // getApp().post("/api/command", new RemoteHandler()); - // } + getApp().post("/api/command", new RemoteHandler()); - // getApp.get("/notice/noticelist.html"); - getApp().get("/webchatv3/*", ctx -> { - ctx.redirect("https://google.com"); - }); + }