mirror of
https://github.com/Sanae6/SmoOnlineServer.git
synced 2024-11-21 18:55:17 +00:00
add short-names for kingdoms, sendall cmd
This commit is contained in:
parent
661763b23f
commit
4e05fe9e3f
4 changed files with 51 additions and 2 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@ obj/
|
||||||
riderModule.iml
|
riderModule.iml
|
||||||
/_ReSharper.Caches/
|
/_ReSharper.Caches/
|
||||||
.idea/
|
.idea/
|
||||||
|
settings.json
|
||||||
|
|
|
@ -131,7 +131,12 @@ CommandHandler.RegisterCommand("send", args => {
|
||||||
|
|
||||||
string stage = args[0];
|
string stage = args[0];
|
||||||
string id = args[1];
|
string id = args[1];
|
||||||
if (!byte.TryParse(args[2], out byte scenario)) return $"Invalid scenario number {args[2]} (range: [0-255])";
|
|
||||||
|
if (Constants.MapNames.TryGetValue(stage, out string? mapName)) {
|
||||||
|
stage = mapName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sbyte.TryParse(args[2], out sbyte scenario)) return $"Invalid scenario number {args[2]} (range: [-128 to 127])";
|
||||||
Client[] players = args[3] == "*" ? server.Clients.Where(c => c.Connected).ToArray() : server.Clients.Where(c => c.Connected && args[3..].Contains(c.Name)).ToArray();
|
Client[] players = args[3] == "*" ? server.Clients.Where(c => c.Connected).ToArray() : server.Clients.Where(c => c.Connected && args[3..].Contains(c.Name)).ToArray();
|
||||||
Parallel.ForEachAsync(players, async (c,_) => {
|
Parallel.ForEachAsync(players, async (c,_) => {
|
||||||
await c.Send(new ChangeStagePacket {
|
await c.Send(new ChangeStagePacket {
|
||||||
|
@ -144,6 +149,31 @@ CommandHandler.RegisterCommand("send", args => {
|
||||||
return $"Sent players to {stage}:{scenario}";
|
return $"Sent players to {stage}:{scenario}";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
CommandHandler.RegisterCommand("sendall", args => {
|
||||||
|
const string optionUsage = "Usage: sendall <stage>";
|
||||||
|
if (args.Length < 1)
|
||||||
|
return optionUsage;
|
||||||
|
|
||||||
|
string stage = args[0];
|
||||||
|
|
||||||
|
if (Constants.MapNames.TryGetValue(stage, out string? mapName)) {
|
||||||
|
stage = mapName;
|
||||||
|
}
|
||||||
|
|
||||||
|
Client[] players = server.Clients.Where(c => c.Connected).ToArray();
|
||||||
|
|
||||||
|
Parallel.ForEachAsync(players, async (c,_) => {
|
||||||
|
await c.Send(new ChangeStagePacket {
|
||||||
|
Stage = stage,
|
||||||
|
Id = "",
|
||||||
|
Scenario = -1,
|
||||||
|
SubScenarioType = 0
|
||||||
|
});
|
||||||
|
}).Wait();
|
||||||
|
|
||||||
|
return $"Sent players to {stage}:{-1}";
|
||||||
|
});
|
||||||
|
|
||||||
CommandHandler.RegisterCommand("scenario", args => {
|
CommandHandler.RegisterCommand("scenario", args => {
|
||||||
const string optionUsage = "Valid options: merge <true/false>";
|
const string optionUsage = "Valid options: merge <true/false>";
|
||||||
if (args.Length < 1)
|
if (args.Length < 1)
|
||||||
|
|
|
@ -21,4 +21,22 @@ public static class Constants {
|
||||||
.ToDictionary(type => type.GetCustomAttribute<PacketAttribute>()!.Type, type => type);
|
.ToDictionary(type => type.GetCustomAttribute<PacketAttribute>()!.Type, type => type);
|
||||||
|
|
||||||
public static int HeaderSize { get; } = Marshal.SizeOf<PacketHeader>();
|
public static int HeaderSize { get; } = Marshal.SizeOf<PacketHeader>();
|
||||||
|
|
||||||
|
public static readonly Dictionary<string, string> MapNames = new Dictionary<string, string>() {
|
||||||
|
{"Cap", "CapWorldHomeStage"},
|
||||||
|
{"Cascade", "WaterfallWorldHomeStage"},
|
||||||
|
{"Sand", "SandWorldHomeStage"},
|
||||||
|
{"Lake", "LakeWorldHomeStage"},
|
||||||
|
{"Wooded", "ForestWorldHomeStage"},
|
||||||
|
{"Cloud", "CloudWorldHomeStage"},
|
||||||
|
{"Lost", "ClashWorldHomeStage"},
|
||||||
|
{"Metro", "CityWorldHomeStage"},
|
||||||
|
{"Sea", "SeaWorldHomeStage"},
|
||||||
|
{"Snow", "SnowWorldHomeStage"},
|
||||||
|
{"Lunch", "LavaWorldHomeStage"},
|
||||||
|
{"Ruined", "BossRaidWorldHomeStage"},
|
||||||
|
{"Bowser", "SkyWorldHomeStage"},
|
||||||
|
{"Moon", "MoonWorldHomeStage"},
|
||||||
|
{"Mush", "PeachWorldHomeStage"}
|
||||||
|
};
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@ public struct ChangeStagePacket : IPacket {
|
||||||
private const int StageSize = 0x30;
|
private const int StageSize = 0x30;
|
||||||
public string Stage = "";
|
public string Stage = "";
|
||||||
public string Id = "";
|
public string Id = "";
|
||||||
public byte Scenario = 0;
|
public sbyte Scenario = 0;
|
||||||
public byte SubScenarioType = 0;
|
public byte SubScenarioType = 0;
|
||||||
public ChangeStagePacket() { }
|
public ChangeStagePacket() { }
|
||||||
public short Size => 0x44;
|
public short Size => 0x44;
|
||||||
|
|
Loading…
Reference in a new issue