1941900058
Also mark the setting (/sim/replay/multiplayer) as userarchive so it is preserved across fg sessions.
380 lines
13 KiB
XML
380 lines
13 KiB
XML
<?xml version="1.0"?>
|
|
|
|
|
|
<PropertyList>
|
|
<name>multiplayer</name>
|
|
<layout>vbox</layout>
|
|
<resizable>false</resizable>
|
|
|
|
<nasal>
|
|
<open>
|
|
<![CDATA[
|
|
if ((getprop("/sim/multiplay/selected-server") == nil) or
|
|
(getprop("/sim/multiplay/selected-server") == "" ) ){
|
|
var tx = getprop("/sim/multiplay/txhost");
|
|
var dlg = cmdarg();
|
|
var servers = cmdarg().getChildren("group")[1].getChildren("combo")[0].getChildren("value");
|
|
foreach (var s; servers) {
|
|
var server = s.getValue();
|
|
var host = split(" ", server)[0];
|
|
if (host == tx) {
|
|
setprop("/sim/multiplay/selected-server", server);
|
|
}
|
|
}
|
|
}
|
|
if (getprop("/sim/multiplay/rxport") == nil or getprop("/sim/multiplay/rxport") == 0)
|
|
setprop("/sim/multiplay/rxport",5000);
|
|
|
|
if (getprop("/sim/multiplay/txport") == nil or getprop("/sim/multiplay/txport") == 0)
|
|
setprop("/sim/multiplay/txport",5000);
|
|
|
|
if (getprop("/sim/multiplay/protocol-version") == 2)
|
|
setprop("/sim/gui/dialogs/multiplay/protocol-version", "Visible to only 2017+");
|
|
else
|
|
setprop("/sim/gui/dialogs/multiplay/protocol-version", "Visible to all");
|
|
|
|
var servers = props.globals.getNode("/sim/gui/dialogs/multiplay/servers", 1);
|
|
var updateServers = func(n) {
|
|
if( !n.getValue() ) return;
|
|
servers.removeChildren("value");
|
|
# get the results list from the server
|
|
var serverlist = props.globals.getNode("/sim/multiplay/server-list", 1);
|
|
|
|
var i=0;
|
|
foreach (var s; serverlist.getChildren("server")) {
|
|
|
|
# prepare some default values
|
|
s.initNode("online", 1, "BOOL" );
|
|
s.initNode("location", "unknown", "STRING" );
|
|
s.initNode("name", s.getNode("hostname").getValue(), "STRING" );
|
|
if (!s.getNode("online").getBoolValue()) {
|
|
continue; # skip offline servers
|
|
}
|
|
|
|
# label is name and location, for the moment
|
|
# should we include the number of users? or wait until we
|
|
# have a better UI toolkit?
|
|
var nm = s.getNode("hostname").getValue() ~ " - " ~ s.getNode("location").getValue();
|
|
servers.getNode("value[" ~ i ~ "]", 1).setValue(nm);
|
|
i += 1;
|
|
}
|
|
|
|
gui.dialog_update("multiplayer", "host");
|
|
}
|
|
|
|
var static_serverList = [
|
|
['mpserver01.flightgear.org', 'Frankfurt, Germany'],
|
|
['mpserver02.flightgear.org', 'Kansas, USA'],
|
|
['mpserver03.flightgear.org', 'Germany'],
|
|
['mpserver04.flightgear.org', 'United Kingdom'],
|
|
['mpserver05.flightgear.org', 'Chicago, USA'],
|
|
['mpserver07.flightgear.org', 'Wisconsin, USA'],
|
|
['mpserver08.flightgear.org', 'Frankfurt am Main, Germany'],
|
|
['mpserver09.flightgear.org', 'Koln, Germany'],
|
|
['mpserver10.flightgear.org', 'Montpellier, France'],
|
|
['mpserver11.flightgear.org', 'Vilnius, Lithuania'],
|
|
['mpserver12.flightgear.org', 'Amsterdam, Netherlands'],
|
|
['mpserver13.flightgear.org', 'Grenoble, France']
|
|
];
|
|
|
|
var updateServersFailed = func(n) {
|
|
if( !n.getValue() ) return;
|
|
debug.dump("Failed to retrieve server list!");
|
|
|
|
servers.removeChildren("value");
|
|
var i=0;
|
|
foreach (var s; static_serverList) {
|
|
# create the node the PUI combo
|
|
var nm = s[0] ~ " - " ~ s[1];
|
|
servers.getNode("value[" ~ i ~ "]", 1).setValue(nm);
|
|
i += 1;
|
|
}
|
|
|
|
gui.dialog_update("multiplayer", "host");
|
|
}
|
|
|
|
# listen for results arriving
|
|
setlistener("/sim/multiplay/got-servers", updateServers);
|
|
setlistener("/sim/multiplay/get-servers-failure", updateServersFailed);
|
|
fgcommand("multiplayer-refreshserverlist");
|
|
]]>
|
|
</open>
|
|
|
|
<close>
|
|
</close>
|
|
</nasal>
|
|
|
|
<!-- titlebar -->
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<empty><stretch>1</stretch></empty>
|
|
|
|
<text>
|
|
<label>Multiplayer Settings</label>
|
|
</text>
|
|
|
|
<empty><stretch>1</stretch></empty>
|
|
|
|
<button>
|
|
<pref-width>16</pref-width>
|
|
<pref-height>16</pref-height>
|
|
<legend></legend>
|
|
<keynum>27</keynum>
|
|
<border>2</border>
|
|
<binding>
|
|
<command>dialog-close</command>
|
|
</binding>
|
|
</button>
|
|
</group>
|
|
<hrule/>
|
|
|
|
<!-- main dialog area -->
|
|
<group>
|
|
<layout>table</layout>
|
|
<halign>center</halign>
|
|
|
|
<text>
|
|
<row>0</row>
|
|
<col>0</col>
|
|
<label> Options:</label>
|
|
<halign>right</halign>
|
|
</text>
|
|
<checkbox>
|
|
<row>0</row>
|
|
<col>1</col>
|
|
<colspan>2</colspan>
|
|
<halign>left</halign>
|
|
<name>hide-replay</name>
|
|
<label>Hide replay sessions over MP (less annoying to other players)</label>
|
|
<property>/sim/multiplay/freeze-on-replay</property>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
<object-name>hide-replay</object-name>
|
|
</binding>
|
|
</checkbox>
|
|
|
|
<checkbox>
|
|
<row>1</row>
|
|
<col>1</col>
|
|
<colspan>2</colspan>
|
|
<halign>left</halign>
|
|
<name>ai-traffic</name>
|
|
<label>Show AI Traffic (mixing MP and AI traffic may be confusing)</label>
|
|
<property>/sim/traffic-manager/enabled</property>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
<object-name>ai-traffic</object-name>
|
|
</binding>
|
|
</checkbox>
|
|
|
|
<checkbox>
|
|
<row>2</row>
|
|
<col>1</col>
|
|
<colspan>2</colspan>
|
|
<halign>left</halign>
|
|
<name>multiplayer-record</name>
|
|
<label>Include multiplayer aircraft in recordings</label>
|
|
<property>/sim/replay/multiplayer</property>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
<object-name>multiplayer-record</object-name>
|
|
</binding>
|
|
</checkbox>
|
|
|
|
<checkbox>
|
|
<row>3</row>
|
|
<col>1</col>
|
|
<colspan>2</colspan>
|
|
<halign>left</halign>
|
|
<visible>
|
|
<property>sim/multiplay/transmit-filter-property-base-available</property>
|
|
</visible>
|
|
<property>sim/multiplay/transmit-filter-property-base</property>
|
|
<live>true</live>
|
|
<label>Emesary only multiplayer mode</label>
|
|
<binding>
|
|
<command>property-toggle</command>
|
|
<property>sim/multiplay/transmit-filter-property-base</property>
|
|
</binding>
|
|
</checkbox>
|
|
|
|
<combo>
|
|
<row>4</row>
|
|
<col>1</col>
|
|
<halign>left</halign>
|
|
<name>protocol-version</name>
|
|
<pref-width>300</pref-width>
|
|
<property>/sim/gui/dialogs/multiplay/protocol-version</property>
|
|
<value>Visible to all</value>
|
|
<value>Visible to only 2017+</value>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
<object-name>protocol-version</object-name>
|
|
</binding>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
var val = getprop("/sim/gui/dialogs/multiplay/protocol-version");
|
|
print("MP Version :",val,":");
|
|
if (val == "Visible to all") {
|
|
setprop("/sim/multiplay/protocol-version", 1);
|
|
}
|
|
|
|
if (val == "Visible to only 2017+") {
|
|
setprop("/sim/multiplay/protocol-version", 2);
|
|
}
|
|
</script>
|
|
</binding>
|
|
</combo>
|
|
<text>
|
|
<row>4</row>
|
|
<col>0</col>
|
|
<halign>right</halign>
|
|
<label>Compatibility</label>
|
|
</text>
|
|
|
|
<text>
|
|
<row>5</row>
|
|
<col>0</col>
|
|
<halign>right</halign>
|
|
<label> Callsign:</label>
|
|
</text>
|
|
<input>
|
|
<row>5</row>
|
|
<col>1</col>
|
|
<halign>left</halign>
|
|
<property>/sim/multiplay/callsign</property>
|
|
<enable>
|
|
<not>
|
|
<property>/sim/multiplay/online</property>
|
|
</not>
|
|
</enable>
|
|
</input>
|
|
<text>
|
|
<row>7</row><col>0</col>
|
|
<halign>right</halign>
|
|
<label>Server:</label>
|
|
</text>
|
|
<combo>
|
|
<name>host</name>
|
|
<halign>left</halign>
|
|
<row>6</row><col>1</col>
|
|
<colspan>2</colspan>
|
|
<pref-width>350</pref-width>
|
|
<property>/sim/multiplay/selected-server</property>
|
|
<editable>true</editable>
|
|
|
|
<properties>/sim/gui/dialogs/multiplay/servers</properties>
|
|
</combo>
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<row>5</row>
|
|
<col>1</col>
|
|
<text>
|
|
<width>2</width>
|
|
<halign>right</halign>
|
|
<label>rxPort</label>
|
|
</text>
|
|
<input>
|
|
<pref-width>50</pref-width>
|
|
<halign>left</halign>
|
|
<property>/sim/multiplay/rxport</property>
|
|
<enable>
|
|
<not>
|
|
<property>/sim/multiplay/online</property>
|
|
</not>
|
|
</enable>
|
|
</input>
|
|
</group>
|
|
<!-- status area -->
|
|
<text>
|
|
<visible>
|
|
<not><property>/sim/multiplay/online</property></not>
|
|
</visible>
|
|
<row>7</row>
|
|
<col>1</col>
|
|
<halign>left</halign>
|
|
<label>Not connected</label>
|
|
</text>
|
|
|
|
<text>
|
|
<visible>
|
|
<property>/sim/multiplay/online</property>
|
|
</visible>
|
|
<row>7</row>
|
|
<col>1</col>
|
|
<halign>left</halign>
|
|
<label>MMMMMMMMMMMMMMMMM</label>
|
|
<format>Connected to %s</format>
|
|
<property>/sim/multiplay/txhost</property>
|
|
<live>true</live>
|
|
</text>
|
|
</group>
|
|
|
|
<!-- button area -->
|
|
<hrule/>
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<default-padding>10</default-padding>
|
|
<empty><stretch>true</stretch></empty>
|
|
|
|
<button>
|
|
<legend>Connect</legend>
|
|
<equal>true</equal>
|
|
<enable>
|
|
<not>
|
|
<property>/sim/multiplay/online</property>
|
|
</not>
|
|
</enable>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
</binding>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
fgcommand("multiplayer-connect", props.Node.new({
|
|
"servername": getprop("/sim/multiplay/selected-server"),
|
|
"rxport": getprop("/sim/multiplay/rxport"),
|
|
"txport": getprop("/sim/multiplay/txport")
|
|
}));
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button>
|
|
<legend>Disconnect</legend>
|
|
<equal>true</equal>
|
|
<enable>
|
|
<property>/sim/multiplay/online</property>
|
|
</enable>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
</binding>
|
|
<binding>
|
|
<command>multiplayer-disconnect</command>
|
|
<subsystem>mp</subsystem>
|
|
</binding>
|
|
</button>
|
|
|
|
<button>
|
|
<row>1</row><col>2</col>
|
|
<legend>Server Status</legend>
|
|
<binding>
|
|
<command>open-browser</command>
|
|
<path>http://mpmap01.flightgear.org/mpstatus/</path>
|
|
</binding>
|
|
</button>
|
|
|
|
<button>
|
|
<legend>Close</legend>
|
|
<default>true</default>
|
|
<equal>true</equal>
|
|
<binding>
|
|
<command>dialog-close</command>
|
|
</binding>
|
|
</button>
|
|
|
|
<empty><stretch>true</stretch></empty>
|
|
</group>
|
|
|
|
</PropertyList>
|