mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-07-04 05:55:47 -07:00
Lobby cleanup.
Designate constants as such. Comply with naming convention for globals. Quote object keys. Add few JSDoc comments. Refs #3383. This was SVN commit r17316.
This commit is contained in:
parent
d39810df7d
commit
d8ecc2f87f
1 changed files with 51 additions and 35 deletions
|
|
@ -1,21 +1,36 @@
|
|||
const g_MapTypes = prepareForDropdown(g_Settings ? g_Settings.MapTypes : undefined);
|
||||
const g_SpecialKey = Math.random();
|
||||
|
||||
/**
|
||||
* Whether or not to display timestamps in the chat window.
|
||||
*/
|
||||
const g_ShowTimestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
|
||||
|
||||
/**
|
||||
* Mute spammers for this time.
|
||||
*/
|
||||
const g_SpamBlockDuration = 30;
|
||||
|
||||
/**
|
||||
* A symbol which is prepended to the username of moderators.
|
||||
*/
|
||||
const g_ModeratorPrefix = "@";
|
||||
|
||||
/**
|
||||
* Current username.
|
||||
*/
|
||||
const g_Name = Engine.LobbyGetNick();
|
||||
|
||||
var g_ChatMessages = [];
|
||||
var g_Name = "unknown";
|
||||
var g_GameList = {};
|
||||
var g_GameListSortBy = "name";
|
||||
var g_PlayerListSortBy = "name";
|
||||
var g_GameListOrder = 1; // 1 for ascending sort, and -1 for descending
|
||||
var g_PlayerListOrder = 1;
|
||||
var g_specialKey = Math.random();
|
||||
// This object looks like {"name":[numMessagesSinceReset, lastReset, timeBlocked]} when in use.
|
||||
var g_spamMonitor = {};
|
||||
var g_timestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
|
||||
var g_mapSizes = {};
|
||||
var g_userRating = ""; // Rating of user, defaults to Unrated
|
||||
var g_modPrefix = "@";
|
||||
// Block spammers for 30 seconds.
|
||||
var SPAM_BLOCK_LENGTH = 30;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
@ -31,8 +46,6 @@ function init(attribs)
|
|||
initMusic();
|
||||
global.music.setState(global.music.states.MENU);
|
||||
|
||||
g_Name = Engine.LobbyGetNick();
|
||||
|
||||
g_mapSizes = initMapSizes();
|
||||
g_mapSizes.shortNames.splice(0, 0, translateWithContext("map size", "Any"));
|
||||
g_mapSizes.tiles.splice(0, 0, "");
|
||||
|
|
@ -543,7 +556,7 @@ function formatPlayerListEntry(nickname, presence, rating)
|
|||
status = translate("Offline");
|
||||
break;
|
||||
default:
|
||||
warn(sprintf("Unknown presence '%(presence)s'", { presence: presence }));
|
||||
warn(sprintf("Unknown presence '%(presence)s'", { "presence": presence }));
|
||||
color = "178 178 178";
|
||||
status = translateWithContext("lobby presence", "Unknown");
|
||||
break;
|
||||
|
|
@ -555,7 +568,7 @@ function formatPlayerListEntry(nickname, presence, rating)
|
|||
var formattedRating = '[color="' + color + '"]' + rating + "[/color]";
|
||||
var role = Engine.LobbyGetPlayerRole(nickname);
|
||||
if (role == "moderator")
|
||||
nickname = g_modPrefix + nickname;
|
||||
nickname = g_ModeratorPrefix + nickname;
|
||||
var formattedName = colorPlayerName(nickname);
|
||||
|
||||
// Push this player's name and status onto the list
|
||||
|
|
@ -621,12 +634,12 @@ function joinSelectedGame()
|
|||
// Check if it looks like an ip address
|
||||
if (sip.split('.').length != 4)
|
||||
{
|
||||
addChatMessage({ "from": "system", "text": sprintf(translate("This game's address '%(ip)s' does not appear to be valid."), { ip: sip }) });
|
||||
addChatMessage({ "from": "system", "text": sprintf(translate("This game's address '%(ip)s' does not appear to be valid."), { "ip": sip }) });
|
||||
return;
|
||||
}
|
||||
|
||||
// Open Multiplayer connection window with join option.
|
||||
Engine.PushGuiPage("page_gamesetup_mp.xml", { multiplayerGameType: "join", name: sname, ip: sip, rating: g_userRating });
|
||||
Engine.PushGuiPage("page_gamesetup_mp.xml", { "multiplayerGameType": "join", "name": sname, "ip": sip, "rating": g_userRating });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -636,7 +649,7 @@ function joinSelectedGame()
|
|||
function hostGame()
|
||||
{
|
||||
// Open Multiplayer connection window with host option.
|
||||
Engine.PushGuiPage("page_gamesetup_mp.xml", { multiplayerGameType: "host", name: g_Name, rating: g_userRating });
|
||||
Engine.PushGuiPage("page_gamesetup_mp.xml", { "multiplayerGameType": "host", "name": g_Name, "rating": g_userRating });
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -680,14 +693,14 @@ function onTick()
|
|||
switch(message.level)
|
||||
{
|
||||
case "join":
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has joined."), { nick: nick }), "key": g_specialKey });
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has joined."), { "nick": nick }), "key": g_SpecialKey });
|
||||
Engine.SendGetRatingList();
|
||||
break;
|
||||
case "leave":
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has left."), { nick: nick }), "key": g_specialKey });
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has left."), { "nick": nick }), "key": g_SpecialKey });
|
||||
break;
|
||||
case "nick":
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(oldnick)s is now known as %(newnick)s."), { oldnick: nick, newnick: message.data }), "key": g_specialKey });
|
||||
addChatMessage({ "text": "/special " + sprintf(translate("%(oldnick)s is now known as %(newnick)s."), { "oldnick": nick, "newnick": message.data }), "key": g_SpecialKey });
|
||||
break;
|
||||
case "presence":
|
||||
break;
|
||||
|
|
@ -695,7 +708,7 @@ function onTick()
|
|||
updateSubject(message.text);
|
||||
break;
|
||||
default:
|
||||
warn(sprintf("Unknown message.level '%(msglvl)s'", { msglvl: message.level }));
|
||||
warn(sprintf("Unknown message.level '%(msglvl)s'", { "msglvl": message.level }));
|
||||
break;
|
||||
}
|
||||
// We might receive many join/leaves when returning to the lobby from a long game.
|
||||
|
|
@ -745,7 +758,7 @@ function onTick()
|
|||
}
|
||||
break;
|
||||
default:
|
||||
error(sprintf("Unrecognised message type %(msgtype)s", { msgtype: message.type }));
|
||||
error(sprintf("Unrecognised message type %(msgtype)s", { "msgtype": message.type }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -804,7 +817,10 @@ function handleSpecialCommand(text)
|
|||
case "me":
|
||||
return false;
|
||||
default:
|
||||
addChatMessage({ "from":"system", "text": sprintf(translate("We're sorry, the '%(cmd)s' command is not supported."), { cmd: cmd})});
|
||||
addChatMessage({
|
||||
"from": "system",
|
||||
"text": sprintf(translate("We're sorry, the '%(cmd)s' command is not supported."), { "cmd": cmd })
|
||||
});
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -822,7 +838,7 @@ function addChatMessage(msg)
|
|||
// Display the moderator symbol in the chatbox.
|
||||
var playerRole = Engine.LobbyGetPlayerRole(msg.from);
|
||||
if (playerRole == "moderator")
|
||||
msg.from = g_modPrefix + msg.from;
|
||||
msg.from = g_ModeratorPrefix + msg.from;
|
||||
}
|
||||
else
|
||||
msg.from = null;
|
||||
|
|
@ -888,26 +904,26 @@ function ircFormat(text, from, color, key, datetime)
|
|||
{
|
||||
case "me":
|
||||
// Translation: IRC message prefix when the sender uses the /me command.
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("* %(sender)s"), { sender: coloredFrom }) + '[/font]';
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("* %(sender)s"), { "sender": coloredFrom }) + '[/font]';
|
||||
// Translation: IRC message issued using the ‘/me’ command.
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(action)s"), { sender: senderString, action: message });
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(action)s"), { "sender": senderString, "action": message });
|
||||
break;
|
||||
case "say":
|
||||
// Translation: IRC message prefix.
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
|
||||
// Translation: IRC message.
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: message });
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": message });
|
||||
break;
|
||||
case "special":
|
||||
if (key === g_specialKey)
|
||||
if (key === g_SpecialKey)
|
||||
// Translation: IRC system message.
|
||||
var formattedMessage = '[font="sans-bold-13"]' + sprintf(translate("== %(message)s"), { message: message }) + '[/font]';
|
||||
var formattedMessage = '[font="sans-bold-13"]' + sprintf(translate("== %(message)s"), { "message": message }) + '[/font]';
|
||||
else
|
||||
{
|
||||
// Translation: IRC message prefix.
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
|
||||
// Translation: IRC message.
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: message });
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": message });
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
@ -918,13 +934,13 @@ function ircFormat(text, from, color, key, datetime)
|
|||
else
|
||||
{
|
||||
// Translation: IRC message prefix.
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
|
||||
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
|
||||
// Translation: IRC message.
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: text });
|
||||
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": text });
|
||||
}
|
||||
|
||||
// Build time header if enabled
|
||||
if (g_timestamp)
|
||||
if (g_ShowTimestamp)
|
||||
{
|
||||
|
||||
var time;
|
||||
|
|
@ -945,10 +961,10 @@ function ircFormat(text, from, color, key, datetime)
|
|||
var timeString = Engine.FormatMillisecondsIntoDateString(time.getTime(), translate("HH:mm"));
|
||||
|
||||
// Translation: Time prefix as shown in the multiplayer lobby (when you enable it in the options page).
|
||||
var timePrefixString = '[font="sans-bold-13"]' + sprintf(translate("\\[%(time)s]"), { time: timeString }) + '[/font]';
|
||||
var timePrefixString = '[font="sans-bold-13"]' + sprintf(translate("\\[%(time)s]"), { "time": timeString }) + '[/font]';
|
||||
|
||||
// Translation: IRC message format when there is a time prefix.
|
||||
return sprintf(translate("%(time)s %(message)s"), { time: timePrefixString, message: formattedMessage });
|
||||
return sprintf(translate("%(time)s %(message)s"), { "time": timePrefixString, "message": formattedMessage });
|
||||
}
|
||||
else
|
||||
return formattedMessage;
|
||||
|
|
@ -991,7 +1007,7 @@ function isSpam(text, from)
|
|||
if (text == " ")
|
||||
return true;
|
||||
// Block users who are still within their spam block period.
|
||||
else if (g_spamMonitor[from][2] + SPAM_BLOCK_LENGTH >= time)
|
||||
else if (g_spamMonitor[from][2] + g_SpamBlockDuration >= time)
|
||||
return true;
|
||||
// Block users who exceed the rate of 1 message per second for five seconds and are not already blocked. TODO: Make this smarter and block profanity.
|
||||
else if (g_spamMonitor[from][0] == 6)
|
||||
|
|
@ -1060,7 +1076,7 @@ function colorPlayerName(playername)
|
|||
return ('[color="' + playername.split("").map(function (c, i) color.slice(i * 3, i * 3 + 3).join(" ") + '"]' + c + '[/color][color="')
|
||||
.join("") + '"]').slice(0, -10);
|
||||
}
|
||||
return '[color="' + getPlayerColor(playername.replace(g_modPrefix, "")) + '"]' + playername + '[/color]';
|
||||
return '[color="' + getPlayerColor(playername.replace(g_ModeratorPrefix, "")) + '"]' + playername + '[/color]';
|
||||
}
|
||||
|
||||
// Ensure `value` is between 0 and 1.
|
||||
|
|
|
|||
Loading…
Reference in a new issue