Merge f4eaf381e3
into 497b5b44d6
This commit is contained in:
commit
3215b1858c
|
@ -66,13 +66,13 @@ server.ClientJoined += (c, _) => {
|
||||||
c.Metadata["loadedSave"] = false;
|
c.Metadata["loadedSave"] = false;
|
||||||
c.Metadata["scenario"] = (byte?) 0;
|
c.Metadata["scenario"] = (byte?) 0;
|
||||||
c.Metadata["2d"] = false;
|
c.Metadata["2d"] = false;
|
||||||
c.Metadata["speedrun"] = false;
|
c.Metadata["disableShineSync"] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
async Task ClientSyncShineBag(Client client) {
|
async Task ClientSyncShineBag(Client client) {
|
||||||
if (!Settings.Instance.Shines.Enabled) return;
|
if (!Settings.Instance.Shines.Enabled) return;
|
||||||
try {
|
try {
|
||||||
if ((bool?) client.Metadata["speedrun"] ?? false) return;
|
if ((bool?) client.Metadata["disableShineSync"] ?? false) return;
|
||||||
ConcurrentBag<int> clientBag = (ConcurrentBag<int>) (client.Metadata["shineSync"] ??= new ConcurrentBag<int>());
|
ConcurrentBag<int> clientBag = (ConcurrentBag<int>) (client.Metadata["shineSync"] ??= new ConcurrentBag<int>());
|
||||||
foreach (int shine in shineBag.Except(clientBag).Except(Settings.Instance.Shines.Excluded).ToArray()) {
|
foreach (int shine in shineBag.Except(clientBag).Except(Settings.Instance.Shines.Excluded).ToArray()) {
|
||||||
if (!client.Connected) return;
|
if (!client.Connected) return;
|
||||||
|
@ -148,21 +148,28 @@ server.PacketHandler = (c, p) => {
|
||||||
c.Metadata["lastGamePacket"] = gamePacket;
|
c.Metadata["lastGamePacket"] = gamePacket;
|
||||||
|
|
||||||
switch (gamePacket.Stage) {
|
switch (gamePacket.Stage) {
|
||||||
case "CapWorldHomeStage" when gamePacket.ScenarioNum == 0:
|
case "CapWorldHomeStage" when gamePacket.ScenarioNum == 1:
|
||||||
c.Metadata["speedrun"] = true;
|
case "CapWorldTowerStage" when gamePacket.ScenarioNum == 1:
|
||||||
((ConcurrentBag<int>) (c.Metadata["shineSync"] ??= new ConcurrentBag<int>())).Clear();
|
if (!((bool?) c.Metadata["disableShineSync"] ?? false)) {
|
||||||
shineBag.Clear();
|
c.Metadata["disableShineSync"] = true;
|
||||||
c.Logger.Info("Entered Cap on new save, preventing moon sync until Cascade");
|
((ConcurrentBag<int>) (c.Metadata["shineSync"] ??= new ConcurrentBag<int>())).Clear();
|
||||||
|
c.Logger.Info("Entered Cap on new save, preventing moon sync until Cascade");
|
||||||
|
if (Settings.Instance.Shines.ClearOnNewSaves) {
|
||||||
|
shineBag.Clear();
|
||||||
|
c.Logger.Info("Cleared shine bags");
|
||||||
|
Task.Run(PersistShines);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "WaterfallWorldHomeStage":
|
default:
|
||||||
bool wasSpeedrun = (bool) c.Metadata["speedrun"]!;
|
if ((bool?) c.Metadata["disableShineSync"] ?? false) {
|
||||||
c.Metadata["speedrun"] = false;
|
|
||||||
if (wasSpeedrun)
|
|
||||||
Task.Run(async () => {
|
Task.Run(async () => {
|
||||||
c.Logger.Info("Entered Cascade with moon sync disabled, enabling moon sync");
|
c.Logger.Info("Entered Cascade or later with moon sync disabled, enabling moon sync again");
|
||||||
await Task.Delay(15000);
|
await Task.Delay(2000);
|
||||||
|
c.Metadata["disableShineSync"] = false;
|
||||||
await ClientSyncShineBag(c);
|
await ClientSyncShineBag(c);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,9 +596,7 @@ CommandHandler.RegisterCommand("shine", args => {
|
||||||
);
|
);
|
||||||
case "clear" when args.Length == 1:
|
case "clear" when args.Length == 1:
|
||||||
shineBag.Clear();
|
shineBag.Clear();
|
||||||
Task.Run(async () => {
|
Task.Run(PersistShines);
|
||||||
await PersistShines();
|
|
||||||
});
|
|
||||||
|
|
||||||
foreach (ConcurrentBag<int> playerBag in server.Clients.Select(serverClient =>
|
foreach (ConcurrentBag<int> playerBag in server.Clients.Select(serverClient =>
|
||||||
(ConcurrentBag<int>)serverClient.Metadata["shineSync"]!)) playerBag?.Clear();
|
(ConcurrentBag<int>)serverClient.Metadata["shineSync"]!)) playerBag?.Clear();
|
||||||
|
|
|
@ -81,6 +81,7 @@ public class Settings {
|
||||||
public class ShineTable {
|
public class ShineTable {
|
||||||
public bool Enabled { get; set; } = true;
|
public bool Enabled { get; set; } = true;
|
||||||
public ISet<int> Excluded { get; set; } = new SortedSet<int> { 496 };
|
public ISet<int> Excluded { get; set; } = new SortedSet<int> { 496 };
|
||||||
|
public bool ClearOnNewSaves { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PersistShinesTable
|
public class PersistShinesTable
|
||||||
|
|
Loading…
Reference in New Issue