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 @@ -194,6 +194,8 @@ } }; +var g_PlayerPresenceList = {}; + /** * Called after the XmppConnection succeeded and when returning from a game. * @@ -359,6 +361,7 @@ // Colorize list entries for (let player of cleanPlayerList) { + g_PlayerPresenceList[(player.role == "moderator" ? g_ModeratorPrefix : "") + player.name] = player.presence; if (player.rating && player.name == g_Username) g_UserRating = player.rating; let rating = player.rating ? (" " + player.rating).substr(-5) : " -"; @@ -377,6 +380,7 @@ ratingList.push(coloredRating); nickList.push(player.name); } + updateChatCaption(); playersBox.list_name = playerList; playersBox.list_status = presenceList; @@ -850,14 +854,19 @@ } } - let formatted = ircFormat(msg); - if (!formatted) - return; + g_ChatMessages.push(msg); - g_ChatMessages.push(formatted); - Engine.GetGUIObjectByName("chatText").caption = g_ChatMessages.join("\n"); + updateChatCaption(); } +function updateChatCaption() +{ + Engine.GetGUIObjectByName("chatText").caption = g_ChatMessages.map(msg => { + let formatted = ircFormat(msg); + if (!formatted) + return ""; + return formatted + "\n"; }).join(""); +} /** * Splits given input into command and argument. @@ -887,6 +896,10 @@ '[color="' + msg.color + '"]' + msg.from + "[/color]" : colorPlayerName(msg.from); + if (msg.from && g_PlayerPresenceList[msg.from] != "available") + coloredFrom += '[font="sans-bold-12"](' + (g_PlayerPresenceList[msg.from] == undefined ? '[color="255 255 255"]offline' : +g_PlayerPresenceList[msg.from] == "playing" ? '[color="255 0 0"]busy' : '[color="255 255 255"]' + g_PlayerPresenceList[msg.from]) + '[/color])[/font]'; + // Handle commands allowed past handleSpecialCommand. if (msg.text[0] == '/') {