Use an actual playername instead of "You" in singleplayer, fixes #3979.
Differentiate between SP and MP name and allow editing it in the settings. Defaults to the OS username. Makes sharing singleplayer replays more effective. Also fixes a troublesome colorization of "You" in a translated sentence, refs #3501. This was SVN commit r18180.
This commit is contained in:
parent
6680fe82e2
commit
9eccf5cd07
@ -141,6 +141,16 @@ function sanitizePlayerName(name, stripUnicode, stripSpaces)
|
||||
return sanitizedName.substr(0,20);
|
||||
}
|
||||
|
||||
function singleplayerName()
|
||||
{
|
||||
return Engine.ConfigDB_GetValue("user", "playername.singleplayer") || Engine.GetSystemUsername();
|
||||
}
|
||||
|
||||
function multiplayerName()
|
||||
{
|
||||
return Engine.ConfigDB_GetValue("user", "playername.multiplayer") || Engine.GetSystemUsername();
|
||||
}
|
||||
|
||||
function tryAutoComplete(text, autoCompleteList)
|
||||
{
|
||||
if (!text.length)
|
||||
|
@ -226,6 +226,13 @@ function init(attribs)
|
||||
g_IsController = attribs.type != "client";
|
||||
g_ServerName = attribs.serverName || undefined;
|
||||
|
||||
// Replace empty playername when entering a singleplayermatch for the first time
|
||||
if (!g_IsNetworked)
|
||||
{
|
||||
Engine.ConfigDB_CreateValue("user", "playername.singleplayer", singleplayerName());
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername.singleplayer", singleplayerName(), "config/user.cfg");
|
||||
}
|
||||
|
||||
// Get default player data - remove gaia
|
||||
g_DefaultPlayerData = g_Settings.PlayerDefaults;
|
||||
g_DefaultPlayerData.shift();
|
||||
@ -1165,7 +1172,8 @@ function selectMap(name)
|
||||
|
||||
// Reset player assignments on map change
|
||||
if (!g_IsNetworked)
|
||||
g_PlayerAssignments = { "local": { "name": translate("You"), "player": 1, "civ": "", "team": -1, "ready": 0 } };
|
||||
g_PlayerAssignments = { "local": { "name": singleplayerName(), "player": 1, "civ": "", "team": -1, "ready": 0 } };
|
||||
|
||||
else
|
||||
{
|
||||
let numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_GameAttributes.settings.PlayerData.length;
|
||||
|
@ -194,8 +194,8 @@ function switchSetupPage(oldpage, newpage)
|
||||
function startHost(playername, servername)
|
||||
{
|
||||
// Save player name
|
||||
Engine.ConfigDB_CreateValue("user", "playername", playername);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername", playername, "config/user.cfg");
|
||||
Engine.ConfigDB_CreateValue("user", "playername.multiplayer", playername);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername.multiplayer", playername, "config/user.cfg");
|
||||
|
||||
// Disallow identically named games in the multiplayer lobby
|
||||
if (Engine.HasXmppClient())
|
||||
@ -263,8 +263,8 @@ function startJoin(playername, ip)
|
||||
else
|
||||
{
|
||||
// Only save the player name and host address if they're valid and we're not in the lobby
|
||||
Engine.ConfigDB_CreateValue("user", "playername", playername);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername", playername, "config/user.cfg");
|
||||
Engine.ConfigDB_CreateValue("user", "playername.multiplayer", playername);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername.multiplayer", playername, "config/user.cfg");
|
||||
Engine.ConfigDB_CreateValue("user", "multiplayerserver", ip);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "multiplayerserver", ip, "config/user.cfg");
|
||||
}
|
||||
@ -274,6 +274,6 @@ function startJoin(playername, ip)
|
||||
function getDefaultGameName()
|
||||
{
|
||||
return sprintf(translate("%(playername)s's game"), {
|
||||
"playername": Engine.ConfigDB_GetValue("user", "playername")
|
||||
"playername": multiplayerName()
|
||||
});
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
<script file="gui/common/network.js"/>
|
||||
<script file="gui/common/functions_global_object.js"/>
|
||||
<script file="gui/common/functions_utility.js"/>
|
||||
<script file="gui/gamesetup/gamesetup_mp.js"/>
|
||||
|
||||
<!-- Add a translucent black background to fade out the menu page -->
|
||||
@ -31,7 +32,7 @@
|
||||
|
||||
<object name="joinPlayerName" type="input" size="50%+10 40 100%-20 64" style="ModernInput">
|
||||
<action on="Load">
|
||||
this.caption = Engine.ConfigDB_GetValue("user", "playername");
|
||||
this.caption = multiplayerName();
|
||||
</action>
|
||||
</object>
|
||||
|
||||
@ -41,7 +42,7 @@
|
||||
|
||||
<object name="joinServer" type="input" size="50%+10 80 100%-20 104" style="ModernInput">
|
||||
<action on="Load">
|
||||
this.caption = Engine.ConfigDB_GetValue("user", "multiplayerserver")
|
||||
this.caption = Engine.ConfigDB_GetValue("user", "multiplayerserver");
|
||||
</action>
|
||||
</object>
|
||||
|
||||
@ -69,7 +70,7 @@
|
||||
|
||||
<object name="hostPlayerName" type="input" size="50%+10 40 100%-20 64" style="ModernInput">
|
||||
<action on="Load">
|
||||
this.caption = Engine.ConfigDB_GetValue("user", "playername");
|
||||
this.caption = multiplayerName();
|
||||
</action>
|
||||
</object>
|
||||
</object>
|
||||
|
@ -179,8 +179,8 @@ function onTick()
|
||||
{
|
||||
Engine.PopGuiPage();
|
||||
Engine.SwitchGuiPage("page_lobby.xml");
|
||||
Engine.ConfigDB_CreateValue("user", "playername", sanitizePlayerName(username, true, true));
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername", sanitizePlayerName(username, true, true), "config/user.cfg");
|
||||
Engine.ConfigDB_CreateValue("user", "playername.multiplayer", sanitizePlayerName(username, true, true));
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername.multiplayer", sanitizePlayerName(username, true, true), "config/user.cfg");
|
||||
Engine.ConfigDB_CreateValue("user", "lobby.login", username);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "lobby.login", username, "config/user.cfg");
|
||||
// We only store the encrypted password, so make sure to re-encrypt it if changed before saving.
|
||||
|
@ -1,6 +1,18 @@
|
||||
{
|
||||
"generalSetting":
|
||||
[
|
||||
{
|
||||
"type": "string",
|
||||
"label": "Playername (Single Player)",
|
||||
"tooltip": "How you want to be addressed in Single Player matches).",
|
||||
"parameters": { "config": "playername.singleplayer" }
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"label": "Playername (Multiplayer)",
|
||||
"tooltip": "How you want to be addressed in Multiplayer matches (except lobby).",
|
||||
"parameters": { "config": "playername.multiplayer" }
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"label": "Windowed Mode",
|
||||
|
@ -64,7 +64,7 @@ function reallyStartVisualReplay(replayDirectory)
|
||||
"isNetworked": false,
|
||||
"playerAssignments": {
|
||||
"local":{
|
||||
"name": translate("You"),
|
||||
"name": singleplayerName(),
|
||||
"player": -1
|
||||
}
|
||||
},
|
||||
|
@ -652,32 +652,12 @@ function colorizePlayernameHelper(username, playerID)
|
||||
|
||||
function formatDefeatMessage(msg)
|
||||
{
|
||||
let defeatMsg;
|
||||
let playername;
|
||||
|
||||
// In singleplayer, the local player is "You". "You has" is incorrect.
|
||||
if (!g_IsNetworked && msg.player == Engine.GetPlayerID())
|
||||
{
|
||||
// Translation: String used to colorize the word "You" of that sentence
|
||||
playername = colorizePlayernameHelper(translateWithContext("You have been defeated", "You"), msg.player);
|
||||
if (msg.resign)
|
||||
defeatMsg = translate("%(You)s have resigned.");
|
||||
else
|
||||
defeatMsg = translate("%(You)s have been defeated.");
|
||||
}
|
||||
else
|
||||
{
|
||||
playername = colorizePlayernameByID(msg.player);
|
||||
if (msg.resign)
|
||||
defeatMsg = translate("%(player)s has resigned.");
|
||||
else
|
||||
defeatMsg = translate("%(player)s has been defeated.");
|
||||
}
|
||||
|
||||
return sprintf(defeatMsg, {
|
||||
"player": playername,
|
||||
"You": playername
|
||||
});
|
||||
return sprintf(
|
||||
msg.resign ?
|
||||
translate("%(player)s has resigned.") :
|
||||
translate("%(player)s has been defeated."),
|
||||
{ "player": colorizePlayernameByID(msg.player) }
|
||||
);
|
||||
}
|
||||
|
||||
function formatDiplomacyMessage(msg)
|
||||
|
@ -74,7 +74,12 @@ var g_CivData = {};
|
||||
*/
|
||||
var g_ReplaySelectionData;
|
||||
|
||||
var g_PlayerAssignments = { "local": { "name": translate("You"), "player": 1 } };
|
||||
var g_PlayerAssignments = {
|
||||
"local": {
|
||||
"name": singleplayerName(),
|
||||
"player": 1
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Cache dev-mode settings that are frequently or widely used.
|
||||
|
@ -87,19 +87,19 @@ function getTradingTooltip(gain)
|
||||
gainString += translate("+") + gain.market2Gain;
|
||||
|
||||
var tooltip = sprintf(translate("%(gain)s (%(player)s)"), {
|
||||
gain: gainString,
|
||||
player: (!g_IsNetworked && gain.traderOwner == playerID) ? translate("You") : simState.players[gain.traderOwner].name
|
||||
"gain": gainString,
|
||||
"player": simState.players[gain.traderOwner].name
|
||||
});
|
||||
|
||||
if (gain.market1Gain && gain.market1Owner != gain.traderOwner)
|
||||
tooltip += translateWithContext("Separation mark in an enumeration", ", ") + sprintf(translate("%(gain)s (%(player)s)"), {
|
||||
gain: gain.market1Gain,
|
||||
player: (!g_IsNetworked && gain.market1Owner == playerID) ? translate("You") : simState.players[gain.market1Owner].name
|
||||
"gain": gain.market1Gain,
|
||||
"player": simState.players[gain.market1Owner].name
|
||||
});
|
||||
if (gain.market2Gain && gain.market2Owner != gain.traderOwner)
|
||||
tooltip += translateWithContext("Separation mark in an enumeration", ", ") + sprintf(translate("%(gain)s (%(player)s)"), {
|
||||
gain: gain.market2Gain,
|
||||
player: (!g_IsNetworked && gain.market2Owner == playerID) ? translate("You") : simState.players[gain.market2Owner].name
|
||||
"gain": gain.market2Gain,
|
||||
"player": simState.players[gain.market2Owner].name
|
||||
});
|
||||
|
||||
return tooltip;
|
||||
|
@ -140,7 +140,7 @@ function startReplay()
|
||||
"isNetworked": false,
|
||||
"playerAssignments": {
|
||||
"local": {
|
||||
"name": translate("You"),
|
||||
"name": singleplayerName(),
|
||||
"player": -1
|
||||
}
|
||||
},
|
||||
|
@ -748,6 +748,12 @@ void Script_EndGame(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
|
||||
EndGame();
|
||||
}
|
||||
|
||||
CStrW GetSystemUsername(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
|
||||
{
|
||||
return sys_get_user_name();
|
||||
}
|
||||
|
||||
|
||||
// Cause the game to exit gracefully.
|
||||
// params:
|
||||
// returns:
|
||||
@ -1117,4 +1123,5 @@ void GuiScriptingInit(ScriptInterface& scriptInterface)
|
||||
scriptInterface.RegisterFunction<void, unsigned int, &EnableTimeWarpRecording>("EnableTimeWarpRecording");
|
||||
scriptInterface.RegisterFunction<void, &RewindTimeWarp>("RewindTimeWarp");
|
||||
scriptInterface.RegisterFunction<void, bool, &SetBoundingBoxDebugOverlay>("SetBoundingBoxDebugOverlay");
|
||||
scriptInterface.RegisterFunction<CStrW, &GetSystemUsername>("GetSystemUsername");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user