Index: binaries/data/mods/public/gui/lobby/lobby.js =================================================================== --- binaries/data/mods/public/gui/lobby/lobby.js +++ binaries/data/mods/public/gui/lobby/lobby.js @@ -119,6 +119,7 @@ "registered": msg => { }, "connected": msg => { + connectedGuiState(true); }, "disconnected": msg => { @@ -126,18 +127,24 @@ updateLeaderboard(); updatePlayerList(); - Engine.GetGUIObjectByName("chatInput").hidden = true; - - for (let button of ["host", "leaderboard", "userprofile", "toggleBuddy"]) - Engine.GetGUIObjectByName(button + "Button").enabled = false; - Engine.GetGUIObjectByName("chatInput").hidden = true; + connectedGuiState(false); if (!g_Kicked) + { addChatMessage({ "from": "system", "time": msg.time, "text": translate("Disconnected.") + " " + msg.text }); + + messageBox( + 400, 200, + translate("Lobby is disconnect, you want to reconnect?"), + translate("Confirmation"), + [translate("back to Mainmenu"), translate("Reconnect")], + [returnToMainMenu, reconnectLobby] + ); + } }, "error": msg => { addChatMessage({ @@ -356,6 +363,35 @@ Engine.GetGUIObjectByName("chatInput").tooltip = colorizeAutocompleteHotkey(); } +function reconnectLobby() +{ + if (Engine.HasXmppClient()) + Engine.StopXmppClient(); + + addChatMessage({ + "from": "system", + "text": translate("Reconnect.") + }); + + // We just use username as nick for simplicity. + Engine.StartXmppClient( + g_Username, + Engine.ConfigDB_GetValue("user", "lobby.password"), + Engine.ConfigDB_GetValue("user", "lobby.room"), + g_Username, + +Engine.ConfigDB_GetValue("user", "lobby.history") + ); + + Engine.ConnectXmppClient(); +} + +function connectedGuiState(connected) +{ + for (let button of ["host", "leaderboard", "userprofile", "toggleBuddy"]) + Engine.GetGUIObjectByName(button + "Button").enabled = connected; + Engine.GetGUIObjectByName("chatInput").hidden = !connected; +} + function updateLobbyColumns() { let gameRating = Engine.ConfigDB_GetValue("user", "lobby.columns.gamerating") == "true";