enum EConnectErrorServer { UNKNOWN = -1, // -1 must always be UNKNOWN OK = 0, // 0 must always be OK WRONG_PASSWORD, // User entered wrong password WRONG_VERSION, // Server and client do not have the same build while "forceSameBuild" is true CONNECT_ERROR, // Unknown error SESSION_FULL, // Server is full FILE_PATCHING, // Bad file patching ALREADY_CONNECTED, // Client is already connected HOST_ADDRESS, // Was unable to resolve host address NET_CHANNEL, // Client failed to create NetChannel CONNECT, // Connecting itself has failed REQUEST_PLAYER, // Failed to request player CREATE_PLAYER, // Failed to create player TIMEOUT, // Packages timed out UID, // Failed to find uid NET_CHANNEL_SERVER, // Server failed to create NetChannel ACTIVATE, // Failed to activate session SERVER_LOCKED, // Server is locked by admin SERVER_SHUTDOWN, // Server is shutting down soon BUILD_SMALLER, // Client has a build smaller than the Server BUILD_GREATER, // Client has a build greater than the Server VERSION_SMALLER, // Client has a version smaller than the Server VERSION_GREATER, // Client has a version greater than the Server EQUAL_MOD, // Server and Client do not have equal mods while "equalModRequired" is true CLIENT_DIAG, // Client is using Diag exe while Server is not SERVER_DIAG, // Server is using Diag exe while Client is not NO_DEVICE_ID, // Client has not acquired device id }; class ConnectErrorServerModule : ErrorHandlerModuleScript { void ConnectErrorServerModule() { SetCategory(ErrorCategory.ConnectErrorServer); } override void InitOptionalVariables() { super.InitOptionalVariables(); m_Header = "#server_browser_connecting_failed"; } override void FillErrorDataMap() { super.FillErrorDataMap(); InsertDialogueErrorProperties(EConnectErrorServer.WRONG_PASSWORD, "#server_browser_wrong_password"); InsertDialogueErrorProperties(EConnectErrorServer.WRONG_VERSION, "#server_browser_wrong_version"); InsertDialogueErrorProperties(EConnectErrorServer.CONNECT_ERROR, "#server_browser_wrong_connect_error"); InsertDialogueErrorProperties(EConnectErrorServer.SESSION_FULL, "#server_browser_session_full"); InsertDialogueErrorProperties(EConnectErrorServer.FILE_PATCHING, "#server_browser_bad_file_patching"); InsertDialogueErrorProperties(EConnectErrorServer.ALREADY_CONNECTED, "#STR_already_connected"); InsertDialogueErrorProperties(EConnectErrorServer.HOST_ADDRESS, "#STR_host_address"); InsertDialogueErrorProperties(EConnectErrorServer.NET_CHANNEL, "#STR_net_channel"); InsertDialogueErrorProperties(EConnectErrorServer.CONNECT, "#STR_connect"); InsertDialogueErrorProperties(EConnectErrorServer.REQUEST_PLAYER, "#STR_request_player"); InsertDialogueErrorProperties(EConnectErrorServer.CREATE_PLAYER, "#STR_create_player"); InsertDialogueErrorProperties(EConnectErrorServer.TIMEOUT, "#STR_timeout"); InsertDialogueErrorProperties(EConnectErrorServer.UID, "#STR_UID"); InsertDialogueErrorProperties(EConnectErrorServer.NET_CHANNEL_SERVER, "#STR_net_channel_server"); InsertDialogueErrorProperties(EConnectErrorServer.ACTIVATE, "#STR_activate"); InsertDialogueErrorProperties(EConnectErrorServer.SERVER_LOCKED, "#STR_MP_SESSION_LOCKED"); InsertDialogueErrorProperties(EConnectErrorServer.SERVER_SHUTDOWN, "#STR_shutdown_server"); InsertDialogueErrorProperties(EConnectErrorServer.BUILD_SMALLER, "#STR_build_smaller"+"\n"+"#STR_PLEASE_UPDATE"); InsertDialogueErrorProperties(EConnectErrorServer.BUILD_GREATER, "#STR_build_greater"+"\n"+"#STR_PLEASE_WAIT"); InsertDialogueErrorProperties(EConnectErrorServer.VERSION_SMALLER, "#STR_version_smaller"+"\n"+"#STR_PLEASE_UPDATE"); InsertDialogueErrorProperties(EConnectErrorServer.VERSION_GREATER, "#STR_version_greater"+"\n"+"#STR_PLEASE_WAIT"); InsertDialogueErrorProperties(EConnectErrorServer.EQUAL_MOD, "#STR_equal_mod"); InsertDialogueErrorProperties(EConnectErrorServer.CLIENT_DIAG, "#STR_client_diag"); InsertDialogueErrorProperties(EConnectErrorServer.SERVER_DIAG, "#STR_server_diag"); InsertDialogueErrorProperties(EConnectErrorServer.NO_DEVICE_ID, "#STR_no_device_id"); } override void OnEvent(EventType eventTypeId, Param params) { switch (eventTypeId) { case MPSessionPlayerReadyEventTypeID: #ifndef NO_GUI g_Game.GetUIManager().CloseSpecificDialog(m_LastErrorThrown); #endif break; default: break; } } } /*class ConnectErrorServerModuleUI : UIScriptedMenu { override bool OnModalResult(Widget w, int x, int y, int code, int result) { super.OnModalResult(w, x, y, code, result); int error = ErrorModuleHandler.GetCodeFromError(code); switch ( error ) { default: break; } return true; } }*/