UPdate
This commit is contained in:
@@ -301,6 +301,17 @@ namespace Hallucinate.UI
|
||||
_spawnedCharacters.Remove(player);
|
||||
}
|
||||
|
||||
// Logic Reassign Leader (Logical)
|
||||
if (runner.IsServer && PlayerDataManager.Instance != null && PlayerDataManager.Instance.Leader == player)
|
||||
{
|
||||
var nextLeader = runner.ActivePlayers.FirstOrDefault();
|
||||
if (nextLeader != PlayerRef.None)
|
||||
{
|
||||
PlayerDataManager.Instance.Leader = nextLeader;
|
||||
Debug.Log($"[BasicSpawner] Leader left. New logical leader: {nextLeader}");
|
||||
}
|
||||
}
|
||||
|
||||
if (runner.IsServer && player == runner.LocalPlayer)
|
||||
{
|
||||
runner.Shutdown();
|
||||
@@ -319,6 +330,13 @@ namespace Hallucinate.UI
|
||||
return;
|
||||
}
|
||||
|
||||
// Nếu đang trong quá trình Host Migration, đừng quay về menu
|
||||
if (shutdownReason == ShutdownReason.HostMigration)
|
||||
{
|
||||
Debug.Log("[BasicSpawner] Shutdown due to Host Migration. Waiting for recovery...");
|
||||
return;
|
||||
}
|
||||
|
||||
if (UIManager.Instance != null)
|
||||
{
|
||||
UIManager.Instance.OnBackToMenu();
|
||||
@@ -354,7 +372,34 @@ namespace Hallucinate.UI
|
||||
public void OnObjectExitAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { }
|
||||
public void OnObjectEnterAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { }
|
||||
public void OnCustomAuthenticationResponse(NetworkRunner runner, Dictionary<string, object> data) { }
|
||||
public void OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken) { }
|
||||
|
||||
public async void OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken)
|
||||
{
|
||||
Debug.Log("[BasicSpawner] OnHostMigration triggered!");
|
||||
|
||||
// 1. Shutdown existing runner properly
|
||||
await runner.Shutdown(false);
|
||||
|
||||
// 2. Create new runner
|
||||
await EnsureRunnerExists();
|
||||
|
||||
// 3. Restart as new Host/Server using the migration token
|
||||
var result = await _runner.StartGame(new StartGameArgs()
|
||||
{
|
||||
HostMigrationToken = hostMigrationToken,
|
||||
SceneManager = gameObject.GetComponent<NetworkSceneManagerDefault>() ?? gameObject.AddComponent<NetworkSceneManagerDefault>()
|
||||
});
|
||||
|
||||
if (result.Ok)
|
||||
{
|
||||
Debug.Log("[BasicSpawner] Host Migration SUCCESSFUL");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"[BasicSpawner] Host Migration FAILED: {result.ShutdownReason}");
|
||||
UIManager.Instance?.OnBackToMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnSceneLoadDone(NetworkRunner runner)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user