feat(loader): read SVSIM_INSTANCE_ID and derive per-instance identity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,25 @@ namespace SVSimLoader
|
|||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
Log = base.Logger;
|
Log = base.Logger;
|
||||||
|
var instanceRaw = System.Environment.GetEnvironmentVariable("SVSIM_INSTANCE_ID");
|
||||||
|
if (!string.IsNullOrEmpty(instanceRaw) && int.TryParse(instanceRaw, out var instanceId) && instanceId > 0)
|
||||||
|
{
|
||||||
|
SvSimConfig.SecondaryInstance = true;
|
||||||
|
SvSimConfig.InstanceId = instanceId;
|
||||||
|
SvSimConfig.FakeSteamId = 900000UL + (ulong)instanceId;
|
||||||
|
// Ticket must be non-empty, even-length, valid hex (the server HexDecodes it before
|
||||||
|
// the bypass) and DISTINCT per instance (SteamSessionService caches ticket->steamId
|
||||||
|
// and rejects a reused ticket under a different steamId).
|
||||||
|
string hex = SvSimConfig.FakeSteamId.ToString("x");
|
||||||
|
if (hex.Length % 2 == 1) hex = "0" + hex;
|
||||||
|
SvSimConfig.FakeTicket = hex;
|
||||||
|
SvSimConfig.IdentityFilePath =
|
||||||
|
System.IO.Path.Combine(Paths.ConfigPath, $"svsim-identity-{instanceId}.json");
|
||||||
|
InstanceIdentityStore.Initialize(SvSimConfig.IdentityFilePath);
|
||||||
|
Logger.LogWarning(
|
||||||
|
$"MULTI-INSTANCE MODE: id={instanceId}, fakeSteamId={SvSimConfig.FakeSteamId}, " +
|
||||||
|
$"identity file={SvSimConfig.IdentityFilePath}. Single-instance mutex will be skipped.");
|
||||||
|
}
|
||||||
// Plugin startup logic
|
// Plugin startup logic
|
||||||
Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!");
|
Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!");
|
||||||
_applicationUrl = Config.Bind("Connection", "ApplicationUrl", "https://utoongaize.shadowverse.jp/shadowverse/",
|
_applicationUrl = Config.Bind("Connection", "ApplicationUrl", "https://utoongaize.shadowverse.jp/shadowverse/",
|
||||||
|
|||||||
@@ -19,4 +19,11 @@ public static class SvSimConfig
|
|||||||
public static bool ProbeEventSection { get; set; }
|
public static bool ProbeEventSection { get; set; }
|
||||||
public static string StorySectionIdFilter { get; set; }
|
public static string StorySectionIdFilter { get; set; }
|
||||||
public static bool NukeIdentityOnStartup { get; set; }
|
public static bool NukeIdentityOnStartup { get; set; }
|
||||||
|
|
||||||
|
// Multi-instance (same-machine two-client PvP smoke) — driven by the SVSIM_INSTANCE_ID env var.
|
||||||
|
public static bool SecondaryInstance { get; set; } // true when SVSIM_INSTANCE_ID is set
|
||||||
|
public static int InstanceId { get; set; } // parsed env value
|
||||||
|
public static string IdentityFilePath { get; set; } // per-instance identity file
|
||||||
|
public static ulong FakeSteamId { get; set; } // 900000 + InstanceId
|
||||||
|
public static string FakeTicket { get; set; } // even-length hex of FakeSteamId
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user