Implemented two chat commands, /restrictteam and /me. Refs #1583.
This was SVN commit r12371.
This commit is contained in:
parent
b1657b63b3
commit
2eed26df09
@ -229,6 +229,7 @@ hotkey.session.showstatusbars = Tab ; Toggle display of status bars
|
||||
|
||||
; > HOTKEYS ONLY
|
||||
hotkey.chat = Return ; Toggle chat window
|
||||
hotkey.teamchat = "T" ; Toggle chat window in team chat mode
|
||||
|
||||
; > GUI TEXTBOX HOTKEYS
|
||||
hotkey.text.delete.left = "Ctrl+Backspace" ; Delete word to the left of cursor
|
||||
|
@ -182,7 +182,7 @@ function closeChat()
|
||||
getGUIObjectByName("chatDialogPanel").hidden = true;
|
||||
}
|
||||
|
||||
function toggleChatWindow()
|
||||
function toggleChatWindow(teamChat)
|
||||
{
|
||||
closeSettings();
|
||||
|
||||
@ -194,6 +194,7 @@ function toggleChatWindow()
|
||||
else
|
||||
chatInput.caption = ""; // Clear chat input
|
||||
|
||||
getGUIObjectByName("toggleTeamChat").checked = teamChat;
|
||||
chatWindow.hidden = !chatWindow.hidden;
|
||||
}
|
||||
|
||||
|
@ -205,6 +205,9 @@ function submitChatInput()
|
||||
|
||||
if (!isCheat)
|
||||
{
|
||||
if (getGUIObjectByName("toggleTeamChat").checked)
|
||||
text = "/restrictteam " + text;
|
||||
|
||||
if (g_IsNetworked)
|
||||
Engine.SendNetworkChat(text);
|
||||
else
|
||||
@ -226,32 +229,19 @@ function addChatMessage(msg, playerAssignments)
|
||||
playerAssignments = g_PlayerAssignments;
|
||||
|
||||
var playerColor, username;
|
||||
|
||||
// Used for team chat in multiplayer
|
||||
var teamed = false; // Is the player on a team of size > 1
|
||||
var onMyTeam = false; // If the message being sent by a player on my team
|
||||
|
||||
|
||||
// No prefix by default. May be set by parseChatCommands().
|
||||
msg.prefix = "";
|
||||
|
||||
if (playerAssignments[msg.guid])
|
||||
{
|
||||
var n = playerAssignments[msg.guid].player;
|
||||
playerColor = g_Players[n].color.r + " " + g_Players[n].color.g + " " + g_Players[n].color.b;
|
||||
username = escapeText(playerAssignments[msg.guid].name);
|
||||
|
||||
// Set the booleans for team chat.
|
||||
var playerData = getPlayerData();
|
||||
if (playerData[n] && playerData[n].team != -1) {
|
||||
if (playerData[Engine.GetPlayerID()].team == playerData[n].team)
|
||||
onMyTeam = true;
|
||||
|
||||
var teamSize = 0;
|
||||
for (var i = 0; i < playerData.length; i++)
|
||||
{
|
||||
if (playerData[i].team == playerData[n].team)
|
||||
teamSize++;
|
||||
}
|
||||
if (teamSize > 1)
|
||||
teamed = true;
|
||||
}
|
||||
|
||||
// Parse in-line commands in regular messages.
|
||||
if (msg.type == "message")
|
||||
parseChatCommands(msg, n);
|
||||
}
|
||||
else if (msg.type == "defeat" && msg.player)
|
||||
{
|
||||
@ -283,15 +273,19 @@ function addChatMessage(msg, playerAssignments)
|
||||
formatted = "[color=\"" + playerColor + "\"]" + username + "[/color] " + verb + " been defeated.";
|
||||
break;
|
||||
case "message":
|
||||
// Send messages to your own team only by default
|
||||
if (!teamed || onMyTeam || message.indexOf("g ") == 0)
|
||||
// May have been hidden by the 'restrictteam' command.
|
||||
if (msg.hide)
|
||||
return;
|
||||
|
||||
if (msg.action)
|
||||
{
|
||||
console.write("* " + username + " " + message);
|
||||
formatted = msg.prefix + "* [color=\"" + playerColor + "\"]" + username + "[/color] " + message;
|
||||
}
|
||||
else
|
||||
{
|
||||
console.write("<" + username + "> " + message);
|
||||
formatted = "<[color=\"" + playerColor + "\"]" + username + "[/color]> " + message;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
formatted = msg.prefix + "<[color=\"" + playerColor + "\"]" + username + "[/color]> " + message;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -315,3 +309,50 @@ function removeOldChatMessages()
|
||||
chatMessages.shift();
|
||||
getGUIObjectByName("chatText").caption = chatMessages.join("\n");
|
||||
}
|
||||
|
||||
// Parses chat messages for commands.
|
||||
function parseChatCommands(msg, sender)
|
||||
{
|
||||
// Only interested in messages that start with '/'.
|
||||
if (!msg.text || msg.text[0] != '/')
|
||||
return;
|
||||
|
||||
var recurse = false;
|
||||
var split = msg.text.split(/\s/);
|
||||
|
||||
// Parse commands embedded in the message.
|
||||
switch (split[0])
|
||||
{
|
||||
case "/restrictteam":
|
||||
var playerData = getPlayerData();
|
||||
if (playerData[sender] && playerData[sender].team != -1)
|
||||
{
|
||||
// Only respect the command if the sender has teammates.
|
||||
for (var i = 0; i < playerData.length; i++)
|
||||
{
|
||||
if (playerData[i].team == playerData[sender].team)
|
||||
{
|
||||
if (playerData[Engine.GetPlayerID()].team != playerData[sender].team)
|
||||
msg.hide = true;
|
||||
else
|
||||
msg.prefix = "(Team) ";
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
recurse = true;
|
||||
break;
|
||||
case "/me":
|
||||
msg.action = true;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
msg.text = msg.text.substr(split[0].length + 1);
|
||||
|
||||
// Attempt to parse more commands if the current command allows it.
|
||||
if (recurse)
|
||||
parseChatCommands(msg, sender);
|
||||
}
|
||||
|
@ -51,6 +51,11 @@
|
||||
<action on="Press">toggleChatWindow();</action>
|
||||
</object>
|
||||
|
||||
<!-- Team Chat: Does the same as the above, but sets the window up to only send messages to teammates. -->
|
||||
<object hotkey="teamchat">
|
||||
<action on="Press">toggleChatWindow(true);</action>
|
||||
</object>
|
||||
|
||||
<!-- Menu -->
|
||||
<object hotkey="menu.toggle">
|
||||
<action on="Press">openMenu();</action>
|
||||
@ -209,20 +214,24 @@
|
||||
</object>
|
||||
|
||||
<!-- Chat window -->
|
||||
<object name="chatDialogPanel" size="50%-180 50%-58 50%+180 50%+46" type="image" hidden="true" sprite="genericPanel">
|
||||
<object name="chatDialogPanel" size="50%-180 50%-48 50%+180 50%+36" type="image" hidden="true" sprite="genericPanel">
|
||||
<object name="chatInput" size="16 12 100%-16 36" type="input" style="StoneInput" max_length="80">
|
||||
<action on="Press">submitChatInput();</action>
|
||||
</object>
|
||||
|
||||
<object size="50%-144 100%-50 50%-16 100%-22" type="button" style="StoneButton">
|
||||
<object size="16 100%-40 30%+16 100%-12" type="button" style="StoneButton">
|
||||
Send
|
||||
<action on="Press">submitChatInput();</action>
|
||||
</object>
|
||||
|
||||
<object size="50%+16 100%-50 50%+144 100%-22" type="button" style="StoneButton">
|
||||
<object size="30%+24 100%-40 60%+24 100%-12" type="button" style="StoneButton">
|
||||
Cancel
|
||||
<action on="Press">closeChat();</action>
|
||||
</object>
|
||||
<object name="toggleTeamChat" size="60%+32 100%-34 60%+48 100%-6" type="checkbox" style="StoneCrossBox"/>
|
||||
<object size="60%+48 100%-40 100% 100%-12" type="text" style="LeftLabelText">
|
||||
Team Only
|
||||
</object>
|
||||
</object>
|
||||
|
||||
<!-- ================================ ================================ -->
|
||||
|
Loading…
Reference in New Issue
Block a user