<?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> <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>3</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>3</row> <col>0</col> <halign>right</halign> <label>Compatibility</label> </text> <text> <row>4</row> <col>0</col> <halign>right</halign> <label> Callsign:</label> </text> <input> <row>4</row> <col>1</col> <halign>left</halign> <property>/sim/multiplay/callsign</property> <enable> <not> <property>/sim/multiplay/online</property> </not> </enable> </input> <text> <row>6</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>4</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>