1
0
forked from 0ad/0ad

Allow changing the late-observer flag in a running game, fixes #3669.

Remove it from the game-attributes, since it is not used in the
simulation, nor are they supposed to change in running games.

This was SVN commit r17861.
This commit is contained in:
elexis 2016-03-10 11:35:43 +00:00
parent 2305218d9f
commit e0a9dfd5a2
5 changed files with 14 additions and 28 deletions

View File

@ -353,6 +353,7 @@ enabledmods = "mod public"
[network]
duplicateplayernames = false ; Rename joining player to "User (2)" if "User" is already connected, otherwise prohibit join.
lateobserverjoins = false ; Allow observers to join the game after it started
[overlay]
fps = "false" ; Show frames per second in top right corner

View File

@ -299,7 +299,7 @@ function initMapFilters()
*/
function resizeMoreOptionsWindow()
{
// For singleplayer reduce the size of more options dialog by three options (cheats, rated game, observer late join = 90px)
// For singleplayer reduce the size of more options dialog by three options (cheats, rated game = 60px)
if (!g_IsNetworked)
{
Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+160";
@ -308,9 +308,8 @@ function resizeMoreOptionsWindow()
// For non-lobby multiplayergames reduce the size of the dialog by one option (rated game, 30px)
else if (!Engine.HasXmppClient())
{
Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+220";
Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 370 50%+70 396";
Engine.GetGUIObjectByName("optionObserverLateJoin").size = "14 338 94% 366";
Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+190";
Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 340 50%+70 366";
}
}
@ -425,8 +424,7 @@ function initRadioButtons()
"ExploreMap": "exploreMap",
"DisableTreasures": "disableTreasures",
"LockTeams": "lockTeams",
"CheatsEnabled": "enableCheats",
"ObserverLateJoin": "observerLateJoin"
"CheatsEnabled": "enableCheats"
};
Object.keys(options).forEach(attribute => {
@ -502,7 +500,6 @@ function initMultiplayerSettings()
Engine.GetGUIObjectByName("chatPanel").hidden = !g_IsNetworked;
Engine.GetGUIObjectByName("optionCheats").hidden = !g_IsNetworked;
Engine.GetGUIObjectByName("optionRating").hidden = !Engine.HasXmppClient();
Engine.GetGUIObjectByName("optionObserverLateJoin").hidden = !g_IsNetworked;
Engine.GetGUIObjectByName("enableCheats").enabled = !Engine.IsRankedGame();
Engine.GetGUIObjectByName("lockTeams").enabled = !Engine.IsRankedGame();
@ -512,7 +509,6 @@ function initMultiplayerSettings()
hideControl("enableCheats", "enableCheatsText");
hideControl("enableRating", "enableRatingText");
hideControl("observerLateJoin", "observerLateJoinText");
}
/**
@ -1282,7 +1278,6 @@ function updateGUIObjects()
setGUIBoolean("exploreMap", "exploreMapText", !!mapSettings.ExploreMap);
setGUIBoolean("revealMap", "revealMapText", !!mapSettings.RevealMap);
setGUIBoolean("lockTeams", "lockTeamsText", !!mapSettings.LockTeams);
setGUIBoolean("observerLateJoin", "observerLateJoinText", !!mapSettings.ObserverLateJoin);
setGUIBoolean("enableRating", "enableRatingText", !!mapSettings.RatingEnabled);
Engine.GetGUIObjectByName("cheatWarningText").hidden = !g_IsNetworked || !mapSettings.CheatsEnabled;

View File

@ -271,7 +271,7 @@
<!-- More Options -->
<object hidden="true" name="moreOptionsFade" type="image" z="60" sprite="ModernFade"/>
<object name="moreOptions" type="image" sprite="ModernDialog" size="50%-200 50%-195 50%+200 50%+250" z="70" hidden="true">
<object name="moreOptions" type="image" sprite="ModernDialog" size="50%-200 50%-195 50%+200 50%+220" z="70" hidden="true">
<object style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14">
<translatableAttribute id="caption">More Options</translatableAttribute>
</object>
@ -386,22 +386,12 @@
</object>
</object>
<object name="optionObserverLateJoin" size="14 368 94% 396" hidden="true">
<object size="0 0 40% 28" type="text" hidden="false" style="ModernRightLabelText">
<translatableAttribute id="caption">Late Observer Joins:</translatableAttribute>
</object>
<object name="observerLateJoinText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/>
<object name="observerLateJoin" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip">
<translatableAttribute id="tooltip">Allow observers to join after the game started.</translatableAttribute>
</object>
</object>
<!-- Hide More Options Button -->
<object
name="hideMoreOptions"
type="button"
style="StoneButton"
size="50%-70 400 50%+70 426"
size="50%-70 370 50%+70 396"
tooltip_style="onscreenToolTip"
hotkey="cancel"
>

View File

@ -60,6 +60,12 @@
"label": "Persist Match Settings",
"tooltip": "Save and restore match settings for quick reuse when hosting another game",
"parameters": { "config": "persistmatchsettings" }
},
{
"type": "boolean",
"label": "Late Observer Joins",
"tooltip": "Allow observers to join the game after it started",
"parameters": { "config": "network.lateobserverjoins" }
}
],
"graphicsSetting":

View File

@ -927,13 +927,7 @@ bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event)
// Optionally allow observers to join after the game has started
bool observerLateJoin = false;
ScriptInterface& scriptInterface = server.GetScriptInterface();
JSContext* cx = scriptInterface.GetContext();
JSAutoRequest rq(cx);
JS::RootedValue settings(cx);
scriptInterface.GetProperty(server.m_GameAttributes.get(), "settings", &settings);
if (scriptInterface.HasProperty(settings, "ObserverLateJoin"))
scriptInterface.GetProperty(settings, "ObserverLateJoin", observerLateJoin);
CFG_GET_VAL("network.lateobserverjoins", observerLateJoin);
// If the game has already started, only allow rejoins
bool isRejoining = false;