private static void ResynchronizePlayerState(ResyncState ResyncInfo, uint PCObject, ACR_ServerCommunicator Script, int Tries = 0)
{
if (Script.GetIsObjectValid(PCObject) == ACR_ServerCommunicator.FALSE)
{
//
// The player logged out while a resync request was pending.
// Throw away the state as it is no longer needed on a full log
// out and log in sequence.
//
return;
}
if ((Script.GetArea(PCObject) == ACR_ServerCommunicator.OBJECT_INVALID) ||
(Script.GetScriptHidden(PCObject) != ACR_ServerCommunicator.FALSE))
{
//
// The player may still be in transition or is not yet loaded.
// Queue the request.
//
if (Tries < MAX_RESYNC_RETRIES)
{
Script.DelayCommand(RESYNC_RETRY_INTERVAL, delegate()
{
ResynchronizePlayerState(ResyncInfo, PCObject, Script, Tries + 1);
});
}
return;
}
PlayerState State = Script.TryGetPlayerState(PCObject);
if (State == null)
return;
//
// Area transition has finished. Apply the GUI state now.
//
State.ChatSelectGUIExpanded = ((ResyncInfo.ResyncFlags & RESYNC_FLAG_CHAT_SELECT_EXPANDED) != 0);
State.UpdateChatSelectGUIHeaders();
Script.SendMessageToPC(PCObject, "Server to server portal completed.");
Script.WriteTimestampedLogEntry(String.Format(
"ACR_ServerCommunicator.GUIResynchronizer.ResynchronizePlayerState: Resynchronized player GUI state for player {0} after server-to-server portal.",
Script.GetName(PCObject)));
}