/// <summary> /// This method is called to resynchronize the GUI state of a player /// that executed a server to server portal, if the player is in an /// area. /// </summary> /// <param name="ResyncInfo">Supplies the resync block for the /// player. This contains the deserialized resynchronization command /// data.</param> /// <param name="PCObject">Supplies the player object id.</param> /// <param name="Script">Supplies the script object.</param> /// <param name="Tries">Supplies the count of retries.</param> 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))); }
/// <summary> /// Dispatch the event (in a script context). /// </summary> /// <param name="Script">Supplies the script object.</param> /// <param name="Database">Supplies the database connection.</param> public void DispatchEvent(ACR_ServerCommunicator Script, ALFA.Database Database) { foreach (uint PlayerObject in Script.GetPlayers(true)) { string FormattedMessage = String.Format( "</c><c=#FFFF00>Server shutting down: {0}</c>", Message); NWScript.Vector3 v; v.x = v.y = v.z = 0.0f; Script.SendChatMessage( CLRScriptBase.OBJECT_INVALID, PlayerObject, CLRScriptBase.CHAT_MODE_SERVER, FormattedMessage, CLRScriptBase.FALSE); Script.FloatingTextStringOnCreature(FormattedMessage, PlayerObject, CLRScriptBase.FALSE, 5.0f, CLRScriptBase.COLOR_WHITE, CLRScriptBase.COLOR_WHITE, 0.0f, v); } Script.WriteTimestampedLogEntry("Received shutdown request: " + Message); Database.ACR_IncrementStatistic("SERVER_SHUTDOWN"); Script.SendInfrastructureIrcMessage(String.Format( "Server '{0}' shutting down or restarting: {1}", Script.GetName(Script.GetModule()), Message)); Script.DelayCommand(5.0f, delegate() { Database.ACR_FlushAllQueryQueues(); SystemInfo.ShutdownGameServer(Script); }); }
/// <summary> /// Dispatch the event (in a script context). /// </summary> /// <param name="Script">Supplies the script object.</param> /// <param name="Database">Supplies the database connection.</param> public void DispatchEvent(ACR_ServerCommunicator Script, ALFA.Database Database) { foreach (uint PlayerObject in Script.GetPlayers(true)) { string FormattedMessage = String.Format( "</c><c=#FFFF00>Server shutting down: {0}</c>", Message); NWScript.Vector3 v; v.x = v.y = v.z = 0.0f; Script.SendChatMessage( CLRScriptBase.OBJECT_INVALID, PlayerObject, CLRScriptBase.CHAT_MODE_SERVER, FormattedMessage, CLRScriptBase.FALSE); Script.FloatingTextStringOnCreature(FormattedMessage, PlayerObject, CLRScriptBase.FALSE, 5.0f, CLRScriptBase.COLOR_WHITE, CLRScriptBase.COLOR_WHITE, 0.0f, v); } Script.WriteTimestampedLogEntry("Received shutdown request: " + Message); Database.ACR_IncrementStatistic("SERVER_SHUTDOWN"); Script.SendInfrastructureIrcMessage(String.Format( "Server '{0}' shutting down or restarting: {1}", Script.GetName(Script.GetModule()), Message)); Script.DelayCommand(5.0f, delegate() { Database.ACR_FlushAllQueryQueues(); SystemInfo.ShutdownGameServer(Script); }); }
/// <summary> /// This method is called to resynchronize the GUI state of a player /// that executed a server to server portal, if the player is in an /// area. /// </summary> /// <param name="ResyncInfo">Supplies the resync block for the /// player. This contains the deserialized resynchronization command /// data.</param> /// <param name="PCObject">Supplies the player object id.</param> /// <param name="Script">Supplies the script object.</param> /// <param name="Tries">Supplies the count of retries.</param> 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))); }