Changeset View
Changeset View
Standalone View
Standalone View
gui/lobby/lobby.js
Context not available. | |||||
const g_SenderFont = "sans-bold-13"; | const g_SenderFont = "sans-bold-13"; | ||||
/** | /** | ||||
* | |||||
*/ | |||||
const g_BuddyChatFilter = { | |||||
"list": [ "All", "Buddies/ping1", "Buddies/ping2", "Buddies/only" ], | |||||
"all": 0, "ping1": 1, "ping2": 2, "buddies": 3 | |||||
}; | |||||
/** | |||||
* | |||||
*/ | |||||
const g_BuddyPlayerFilter = { | |||||
"list": [ "All", "Buddies", "Moderators" ], | |||||
"all": 0, "buddies": 1, "moderators": 2, | |||||
}; | |||||
/** | |||||
* | |||||
*/ | |||||
const g_BuddyGameFilter = { | |||||
"list": [ "All", "Buddies" ], | |||||
"all": 0, "buddies": 1 | |||||
}; | |||||
/** | |||||
* All chat messages received since init (i.e. after lobby join and after returning from a game). | * All chat messages received since init (i.e. after lobby join and after returning from a game). | ||||
*/ | */ | ||||
var g_ChatMessages = []; | var g_ChatMessages = []; | ||||
/** | |||||
* All chat messages received since init (i.e. after lobby join and after returning from a game). | |||||
*/ | |||||
var g_ChatMessagesBuddies = []; | |||||
/** | /** | ||||
* Rating of the current user. | * Rating of the current user. | ||||
* Contains the number or an empty string in case the user has no rating. | * Contains the number or an empty string in case the user has no rating. | ||||
*/ | */ | ||||
var g_UserBuddies = Engine.ConfigDB_GetValue("user", "lobby.buddies").split("|"); | |||||
var g_UserTempBuddies = []; | |||||
/** | |||||
* Rating of the current user. | |||||
* Contains the number or an empty string in case the user has no rating. | |||||
*/ | |||||
var g_UserRating = ""; | var g_UserRating = ""; | ||||
/** | /** | ||||
Context not available. | |||||
initMusic(); | initMusic(); | ||||
global.music.setState(global.music.states.MENU); | global.music.setState(global.music.states.MENU); | ||||
initLobbyFilters(); | |||||
initGameFilters(); | initGameFilters(); | ||||
Engine.LobbySetPlayerPresence("available"); | Engine.LobbySetPlayerPresence("available"); | ||||
Context not available. | |||||
Engine.SwitchGuiPage("page_pregame.xml"); | Engine.SwitchGuiPage("page_pregame.xml"); | ||||
} | } | ||||
function initLobbyFilters() | |||||
{ | |||||
Engine.GetGUIObjectByName("buddyChatFilter").list = g_BuddyChatFilter.list; | |||||
Engine.GetGUIObjectByName("buddyChatFilter").selected = 0; | |||||
Engine.GetGUIObjectByName("buddyPlayerFilter").list = g_BuddyPlayerFilter.list; | |||||
Engine.GetGUIObjectByName("buddyPlayerFilter").selected = 0; | |||||
Engine.GetGUIObjectByName("buddyGameFilter").list = g_BuddyGameFilter.list; | |||||
Engine.GetGUIObjectByName("buddyGameFilter").selected = 0; | |||||
} | |||||
function initGameFilters() | function initGameFilters() | ||||
{ | { | ||||
let mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); | let mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); | ||||
Context not available. | |||||
Engine.GetGUIObjectByName("mapTypeFilter").selected = g_MapTypes.Default; | Engine.GetGUIObjectByName("mapTypeFilter").selected = g_MapTypes.Default; | ||||
Engine.GetGUIObjectByName("showFullFilter").checked = false; | Engine.GetGUIObjectByName("showFullFilter").checked = false; | ||||
applyFilters(); | applyGameFilters(); | ||||
} | } | ||||
function applyFilters() | function applyGameFilters() | ||||
{ | { | ||||
updateGameList(); | updateGameList(); | ||||
updateGameSelection(); | updateGameSelection(); | ||||
} | } | ||||
function ridOfRate(playerName) | |||||
scythetwirler: Function comment?
Also, probably should rename this function to something like stripRating. | |||||
{ | |||||
let result = /^(\S+)\ \(\d+\)$/g.exec(playerName); | |||||
return result ? result[1] : playerName; | |||||
} | |||||
/** | /** | ||||
* Filter a game based on the status of the filter dropdowns. | * Filter a game based on the status of the filter dropdowns. | ||||
* | * | ||||
Context not available. | |||||
if (!showFullFilter.checked && game.maxnbp <= game.nbp) | if (!showFullFilter.checked && game.maxnbp <= game.nbp) | ||||
return true; | return true; | ||||
if (Engine.GetGUIObjectByName("buddyGameFilter").selected == g_BuddyGameFilter["buddies"] && !stringifiedTeamListToPlayerData(game.players).some(player => g_UserBuddies.some(buddy => { if (!player.Name) return false; return buddy == ridOfRate(player.Name); }))) | |||||
return true; | |||||
return false; | return false; | ||||
} | } | ||||
Context not available. | |||||
if (playersBox.selected > -1) | if (playersBox.selected > -1) | ||||
g_SelectedPlayer = playersBox.list[playersBox.selected]; | g_SelectedPlayer = playersBox.list[playersBox.selected]; | ||||
let buddyStatusList = []; | |||||
let playerList = []; | let playerList = []; | ||||
let presenceList = []; | let presenceList = []; | ||||
let nickList = []; | let nickList = []; | ||||
let ratingList = []; | let ratingList = []; | ||||
let cleanPlayerList = Engine.GetPlayerList().sort((a, b) => { | |||||
var cleanPlayerList = Engine.GetPlayerList(); | |||||
if (Engine.GetGUIObjectByName("buddyPlayerFilter").selected != g_BuddyPlayerFilter["all"]) | |||||
switch (Engine.GetGUIObjectByName("buddyPlayerFilter").selected) | |||||
{ | |||||
case g_BuddyPlayerFilter["buddies"]: | |||||
cleanPlayerList = cleanPlayerList.filter(player => g_UserBuddies.concat(g_Username).some(buddy => buddy == player.name)); | |||||
break; | |||||
case g_BuddyPlayerFilter["moderators"]: | |||||
cleanPlayerList = cleanPlayerList.filter(player => player.role == "moderator" || player.name == g_Username); | |||||
break; | |||||
} | |||||
// sort by names before when buddy sort | |||||
if (sortBy == "buddy") | |||||
{ | |||||
sortOrder *= -1; | |||||
cleanPlayerList = cleanPlayerList.sort((a, b) => {let sortA, sortB; | |||||
sortA = a.name.toLowerCase(); | |||||
sortB = b.name.toLowerCase(); | |||||
if (sortA < sortB) return -1; | |||||
if (sortA > sortB) return +1; | |||||
return 0; | |||||
}); | |||||
} | |||||
// vanish username to put it first afterwards first | |||||
var userPlayer = cleanPlayerList.find((player) => { return player.name === g_Username; }); | |||||
if (userPlayer != null) | |||||
cleanPlayerList.splice(cleanPlayerList.indexOf(userPlayer), 1); | |||||
cleanPlayerList = cleanPlayerList.sort((a, b) => { | |||||
let sortA, sortB; | let sortA, sortB; | ||||
switch (sortBy) | switch (sortBy) | ||||
{ | { | ||||
case 'buddy': | |||||
sortA = g_UserBuddies.indexOf(a.name); | |||||
sortB = g_UserBuddies.indexOf(b.name); | |||||
break; | |||||
case 'rating': | case 'rating': | ||||
sortA = +a.rating; | sortA = +a.rating; | ||||
sortB = +b.rating; | sortB = +b.rating; | ||||
Context not available. | |||||
return 0; | return 0; | ||||
}); | }); | ||||
// put username first in list | |||||
if (userPlayer != null) | |||||
cleanPlayerList.unshift(userPlayer); | |||||
// Colorize list entries | // Colorize list entries | ||||
for (let player of cleanPlayerList) | for (let player of cleanPlayerList) | ||||
{ | { | ||||
Context not available. | |||||
let coloredPresence = '[color="' + statusColor + '"]' + g_PlayerStatuses[presence].status + "[/color]"; | let coloredPresence = '[color="' + statusColor + '"]' + g_PlayerStatuses[presence].status + "[/color]"; | ||||
let coloredRating = '[color="' + statusColor + '"]' + rating + "[/color]"; | let coloredRating = '[color="' + statusColor + '"]' + rating + "[/color]"; | ||||
if (player.name == g_Username) | |||||
buddyStatusList.push('[color="255 255 255"]´[/color]'); | |||||
else if (g_UserBuddies.indexOf(player.name) != -1) | |||||
buddyStatusList.push('[color="255 255 255"]*[/color]'); | |||||
else | |||||
buddyStatusList.push('[color="255 255 255"]-[/color]'); | |||||
playerList.push(coloredName); | playerList.push(coloredName); | ||||
presenceList.push(coloredPresence); | presenceList.push(coloredPresence); | ||||
ratingList.push(coloredRating); | ratingList.push(coloredRating); | ||||
nickList.push(player.name); | nickList.push(player.name); | ||||
} | } | ||||
playersBox.list_buddy = buddyStatusList; | |||||
playersBox.list_name = playerList; | playersBox.list_name = playerList; | ||||
playersBox.list_status = presenceList; | playersBox.list_status = presenceList; | ||||
playersBox.list_rating = ratingList; | playersBox.list_rating = ratingList; | ||||
Context not available. | |||||
} | } | ||||
/** | /** | ||||
* Toggle buddy state for a player in playerlist within the user config | |||||
*/ | |||||
function toggleBuddy() | |||||
{ | |||||
var buddies = Engine.ConfigDB_GetValue("user", "lobby.buddies"); | |||||
let playerList = Engine.GetGUIObjectByName("playersBox"); | |||||
let name = playerList.list[playerList.selected]; | |||||
let index = g_UserBuddies.indexOf(name); | |||||
if (index != -1) | |||||
g_UserBuddies.splice(index, 1); | |||||
else | |||||
g_UserBuddies.push(name); | |||||
Engine.ConfigDB_CreateValue("user", "lobby.buddies", g_UserBuddies.join("|")); | |||||
Engine.ConfigDB_WriteValueToFile("user", "lobby.buddies", g_UserBuddies.join("|"), "config/user.cfg"); | |||||
updatePlayerList(); | |||||
applyGameFilters(); | |||||
} | |||||
/** | |||||
* Display the profile of the selected player. | * Display the profile of the selected player. | ||||
* Displays N/A for all stats until updateProfile is called when the stats | * Displays N/A for all stats until updateProfile is called when the stats | ||||
* are actually received from the bot. | * are actually received from the bot. | ||||
Context not available. | |||||
return; | return; | ||||
g_ChatMessages.push(formatted); | g_ChatMessages.push(formatted); | ||||
Engine.GetGUIObjectByName("chatText").caption = g_ChatMessages.join("\n"); | if (msg.buddy || (msg.ping && (Engine.GetGUIObjectByName("buddyChatFilter").selected == g_BuddyChatFilter["ping1"] || | ||||
Engine.GetGUIObjectByName("buddyChatFilter").selected == g_BuddyChatFilter["ping2"] || msg.from.search("^@") != -1))) | |||||
g_ChatMessagesBuddies.push(formatted); | |||||
showChat(); | |||||
} | |||||
function showChat() | |||||
{ | |||||
if (Engine.GetGUIObjectByName("buddyChatFilter").selected == g_BuddyChatFilter["all"]) | |||||
Engine.GetGUIObjectByName("chatText").caption = g_ChatMessages.join("\n"); | |||||
else | |||||
Engine.GetGUIObjectByName("chatText").caption = g_ChatMessagesBuddies.join("\n"); | |||||
} | } | ||||
Context not available. | |||||
*/ | */ | ||||
function ircFormat(msg) | function ircFormat(msg) | ||||
{ | { | ||||
print(uneval(msg) + "\n"); | |||||
scythetwirlerUnsubmitted Not Done Inline Actionsdebugging print? scythetwirler: debugging print? | |||||
let formattedMessage = ""; | let formattedMessage = ""; | ||||
let coloredFrom = !msg.from ? "" : | let coloredFrom = !msg.from ? "" : | ||||
Context not available. | |||||
'[color="' + msg.color + '"]' + msg.from + "[/color]" : | '[color="' + msg.color + '"]' + msg.from + "[/color]" : | ||||
colorPlayerName(msg.from); | colorPlayerName(msg.from); | ||||
msg.buddy = false; | |||||
msg.ping = false; | |||||
if (msg.text.search(g_Username) != -1) | |||||
{ | |||||
if (Engine.GetGUIObjectByName("buddyChatFilter").selected == g_BuddyChatFilter["ping1"]) | |||||
Engine.GetGUIObjectByName("buddyChatFilter").selected = g_BuddyChatFilter["all"]; | |||||
msg.ping = true; | |||||
} | |||||
// Handle commands allowed past handleSpecialCommand. | // Handle commands allowed past handleSpecialCommand. | ||||
if (msg.text[0] == '/') | if (msg.text[0] == '/') | ||||
{ | { | ||||
let [command, message] = ircSplit(msg.text); | let [command, message] = ircSplit(msg.text); | ||||
if (g_UserBuddies.concat(g_Username).find(buddy => { return (message.search(new RegExp("^"+buddy)) != -1) ? buddy : null ; }) != null) | |||||
msg.buddy = true; | |||||
switch (command) | switch (command) | ||||
{ | { | ||||
case "me": | case "me": | ||||
Context not available. | |||||
else | else | ||||
{ | { | ||||
let senderString; | let senderString; | ||||
if (g_UserBuddies.concat(g_Username).some(buddy => buddy == msg.from.replace(g_ModeratorPrefix, ""))) | |||||
msg.buddy = true; | |||||
// Translation: IRC message prefix. | // Translation: IRC message prefix. | ||||
if (msg.private) | if (msg.private) | ||||
Context not available. |
Wildfire Games · Phabricator
Function comment?
Also, probably should rename this function to something like stripRating. ridOfRate sounds a bit weird.