Fix chat to use GUID instead of host ID.

Fix randomly incorrect player names.
Fix script errors when connecting to an invalid IP address.
Adjust the server/client disconnection messages to be a bit more
accurate.

This was SVN commit r7946.
This commit is contained in:
Ykkrosh 2010-08-14 19:45:22 +00:00
parent 025b7960f8
commit 64daef95df
7 changed files with 43 additions and 36 deletions

View File

@ -125,20 +125,22 @@ function handleNetMessage(message)
addChatMessage({ "type": "connect", "username": message.hosts[host].name });
for (var host in g_PlayerAssignments)
if (! message.hosts[host])
addChatMessage({ "type": "disconnect", "username": g_PlayerAssignments[host].name });
addChatMessage({ "type": "disconnect", "guid": host });
// Update the player list
g_PlayerAssignments = message.hosts;
updatePlayerList();
break;
case "start":
Engine.SwitchGuiPage("page_loading.xml", { "attribs": g_GameAttributes,
"isNetworked" : g_IsNetworked,
"playerAssignments": g_PlayerAssignments} );
Engine.SwitchGuiPage("page_loading.xml", {
"attribs": g_GameAttributes,
"isNetworked" : g_IsNetworked,
"playerAssignments": g_PlayerAssignments
});
break;
case "chat":
addChatMessage({ "type": "message", "username": message.username, "text": message.text });
addChatMessage({ "type": "message", "guid": message.guid, "text": message.text });
break;
default:
@ -276,7 +278,11 @@ function launchGame()
playerID = i+1;
}
Engine.StartGame(g_GameAttributes, playerID);
Engine.PushGuiPage("page_loading.xml", { "attribs": g_GameAttributes });
Engine.SwitchGuiPage("page_loading.xml", {
"attribs": g_GameAttributes,
"isNetworked" : g_IsNetworked,
"playerAssignments": g_PlayerAssignments
});
}
}
@ -360,19 +366,21 @@ function addChatMessage(msg)
// TODO: we ought to escape all values before displaying them,
// to prevent people inserting colours and newlines etc
var username = (msg.username || g_PlayerAssignments[msg.guid].name);
var formatted;
switch (msg.type)
{
case "connect":
formatted = '[font="serif-bold-13"][color="255 0 0"]' + msg.username + '[/color][/font] [color="64 64 64"]has joined[/color]';
formatted = '[font="serif-bold-13"][color="255 0 0"]' + username + '[/color][/font] [color="64 64 64"]has joined[/color]';
break;
case "disconnect":
formatted = '[font="serif-bold-13"][color="255 0 0"]' + msg.username + '[/color][/font] [color="64 64 64"]has left[/color]';
formatted = '[font="serif-bold-13"][color="255 0 0"]' + username + '[/color][/font] [color="64 64 64"]has left[/color]';
break;
case "message":
formatted = '[font="serif-bold-13"]<[color="255 0 0"]' + msg.username + '[/color]>[/font] ' + msg.text;
formatted = '[font="serif-bold-13"]<[color="255 0 0"]' + username + '[/color]>[/font] ' + msg.text;
break;
default:

View File

@ -81,10 +81,13 @@ function startHost(playername, servername)
messageBox(400, 200,
"Cannot host game: " + e.message + ".",
"Error", 2);
return false;
}
startConnectionStatus("server");
// TODO: ought to do something(?) with servername
return true;
}
function startJoin(playername, ip)
@ -99,7 +102,9 @@ function startJoin(playername, ip)
messageBox(400, 200,
"Cannot join game: " + e.message + ".",
"Error", 2);
return false;
}
startConnectionStatus("client");
return true;
}

View File

@ -80,10 +80,12 @@
<object type="button" size="50%-125 200 50%-25 230" style="wheatButton">
Continue
<action on="Press"><![CDATA[
startHost(
if (startHost(
getGUIObjectByName("hostPlayerName").caption,
getGUIObjectByName("hostServerName").caption);
switchSetupPage("pageHost", "pageConnecting");
getGUIObjectByName("hostServerName").caption))
{
switchSetupPage("pageHost", "pageConnecting");
}
]]></action>
</object>
@ -123,10 +125,12 @@
<object type="button" size="50%-125 200 50%-25 230" style="wheatButton">
Continue
<action on="Press"><![CDATA[
startJoin(
if (startJoin(
getGUIObjectByName("joinPlayerName").caption,
getGUIObjectByName("joinIP").caption);
switchSetupPage("pageJoin", "pageConnecting");
getGUIObjectByName("joinIP").caption))
{
switchSetupPage("pageJoin", "pageConnecting");
}
]]></action>
</object>

View File

@ -6,15 +6,8 @@ function init(data)
if (data && data.attribs)
mapName = data.attribs.map;
if (data)
g_Data = data;
g_Data = data;
// Set to "hourglass" cursor.
setCursor("cursor-wait");

View File

@ -57,7 +57,7 @@ function handleNetMessage(message)
switch (message.status)
{
case "waiting_for_players":
obj.caption = "Waiting for other players to connect";
obj.caption = "Waiting for other players to connect...";
obj.hidden = false;
break;
case "active":
@ -65,7 +65,7 @@ function handleNetMessage(message)
obj.hidden = true;
break;
case "disconnected":
obj.caption = "Connection to the server has been lost";
obj.caption = "Connection to the server has been lost.\n\nThe game has ended.";
obj.hidden = false;
getGUIObjectByName("disconnectedExitButton").hidden = false;
break;
@ -81,7 +81,7 @@ function handleNetMessage(message)
if (! message.hosts[host])
{
var obj = getGUIObjectByName("netStatus");
obj.caption = g_PlayerAssignments[host].name + " has left\n\nConnection to the server has been lost";
obj.caption = g_PlayerAssignments[host].name + " has disconnected.\n\nThe game has ended.";
obj.hidden = false;
getGUIObjectByName("disconnectedExitButton").hidden = false;
}
@ -104,7 +104,7 @@ function submitChatInput()
if (g_IsNetworked)
Engine.SendNetworkChat(text);
else
addChatMessage({ "type": "message", "guid": 1, "text": text });
addChatMessage({ "type": "message", "guid": "local", "text": text });
input.caption = ""; // Clear chat input
input.blur(); // Remove focus
@ -118,8 +118,8 @@ function addChatMessage(msg)
// TODO: we ought to escape all values before displaying them,
// to prevent people inserting colours and newlines etc
var n = msg.guid;
var username = g_Players[n].name;
var n = g_PlayerAssignments[msg.guid].player;
var username = g_PlayerAssignments[msg.guid].name;
var playerColor = g_Players[n].color.r + " " + g_Players[n].color.g + " " + g_Players[n].color.b;
var formatted;

View File

@ -21,8 +21,6 @@ function getPlayerData(playerAssignments)
for (var i = 0; i < simState.players.length; i++)
{
var playerState = simState.players[i];
if (!playerState)
continue;
var name = playerState.name;
var civ = playerState.civ;
@ -36,13 +34,12 @@ function getPlayerData(playerAssignments)
players.push(player);
}
var i = 1;
if (playerAssignments)
{
for each (var playerAssignment in playerAssignments)
{
players[i].name = playerAssignment.name;
i++;
if (players[playerAssignment.player])
players[playerAssignment.player].name = playerAssignment.name;
}
}

View File

@ -484,7 +484,7 @@ bool CNetServer::OnChat(void* context, CFsmEvent* event)
CChatMessage* message = (CChatMessage*)event->GetParamRef();
message->m_GUID = session->GetHostID();
message->m_GUID = session->GetGUID();
server.Broadcast(message);