Modified Files:
preferences.xml gui/menubar.xml gui/dialogs/rendering.xml Added Files: Nasal/multiplayer.nas gui/dialogs/chat.xml gui/dialogs/chat_full.xml: the data part of Stuarts multiplayer/chat patch
This commit is contained in:
parent
73878fc6b2
commit
9c52cbf4ac
6 changed files with 277 additions and 0 deletions
85
Nasal/multiplayer.nas
Normal file
85
Nasal/multiplayer.nas
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
# Multiplayer Chat
|
||||||
|
# ================
|
||||||
|
#
|
||||||
|
# 1) Display chat messages from other aircraft to
|
||||||
|
# the screen using screen.nas
|
||||||
|
#
|
||||||
|
# 2) Display a complete history of chat via dialog.
|
||||||
|
#
|
||||||
|
# 3) Allow chat messages to be written by the user.
|
||||||
|
|
||||||
|
var messages = {};
|
||||||
|
|
||||||
|
check_messages = func
|
||||||
|
{
|
||||||
|
|
||||||
|
var mp = props.globals.getNode("/ai/models").getChildren("multiplayer");
|
||||||
|
|
||||||
|
foreach (i; mp)
|
||||||
|
{
|
||||||
|
var lmsg = getprop(i.getPath() ~ "/sim/multiplay/chat");
|
||||||
|
var lcallsign = getprop(i.getPath() ~ "/callsign");
|
||||||
|
|
||||||
|
if ((lmsg != nil) and (lmsg != "") and (lcallsign != nil) and (lcallsign != ""))
|
||||||
|
{
|
||||||
|
#print("Call Sign: " ~ lcallsign);
|
||||||
|
#print("lmsg: " ~ lmsg);
|
||||||
|
#print("Freq: " ~ ltransmitfreq);
|
||||||
|
|
||||||
|
if ((! contains(messages, lcallsign)) or (lmsg != messages[lcallsign]))
|
||||||
|
{
|
||||||
|
# Indicate we've seen this message.
|
||||||
|
messages[lcallsign] = lmsg;
|
||||||
|
echo_message(lmsg, lcallsign);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for new messages every couple of seconds.
|
||||||
|
settimer(check_messages, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_message = func(msg, callsign)
|
||||||
|
{
|
||||||
|
if (callsign != nil)
|
||||||
|
{
|
||||||
|
msg = callsign ~ ": " ~ msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
var ldisplay = getprop("/sim/multiplay/chat_display");
|
||||||
|
|
||||||
|
if ((ldisplay != nil) and (ldisplay == "1"))
|
||||||
|
{
|
||||||
|
# Only display the message to screen if configured.
|
||||||
|
setprop("/sim/messages/ai-plane", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add the chat to the chat history.
|
||||||
|
var lchat = getprop("/sim/multiplay/chat_history");
|
||||||
|
|
||||||
|
if (lchat == nil)
|
||||||
|
{
|
||||||
|
setprop("/sim/multiplay/chat_history", msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (substr(lchat, size(lchat) -1, 1) != "\n")
|
||||||
|
{
|
||||||
|
lchat = lchat ~ "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
setprop("/sim/multiplay/chat_history", lchat ~ msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
settimer(func {
|
||||||
|
# Call-back to ensure we see our own messages.
|
||||||
|
setlistener("/sim/multiplay/chat", func{ echo_message(cmdarg().getValue(), getprop("/sim/multiplay/callsign")); });
|
||||||
|
|
||||||
|
# check for new messages
|
||||||
|
check_messages();
|
||||||
|
|
||||||
|
}, 1);
|
||||||
|
|
||||||
|
|
71
gui/dialogs/chat.xml
Normal file
71
gui/dialogs/chat.xml
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<PropertyList>
|
||||||
|
<name>chat</name>
|
||||||
|
<modal>false</modal>
|
||||||
|
<layout>vbox</layout>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
|
||||||
|
<input>
|
||||||
|
<name>compose</name>
|
||||||
|
<pref-width>500</pref-width>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
<halign>fill</halign>
|
||||||
|
<length>50</length>
|
||||||
|
<property>/sim/multiplay/chat_compose</property>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Send</legend>
|
||||||
|
<default>true</default>
|
||||||
|
<key>Enter</key>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>
|
||||||
|
var lchat = getprop("/sim/multiplay/chat_compose");
|
||||||
|
if (lchat != "")
|
||||||
|
{
|
||||||
|
setprop("/sim/multiplay/chat", lchat);
|
||||||
|
setprop("/sim/multiplay/chat_compose", "");
|
||||||
|
fgcommand("dialog-update", props.Node.new({"object-name": "compose",
|
||||||
|
"dialog-name": "chat"}));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty><stretch>true</stretch></empty>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Close</legend>
|
||||||
|
<default>true</default>
|
||||||
|
<key>Esc</key>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>More v</legend>
|
||||||
|
<default>false</default>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-show</command>
|
||||||
|
<dialog-name>chat_full</dialog-name>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<empty><stretch>true</stretch></empty>
|
||||||
|
</group>
|
||||||
|
</PropertyList>
|
98
gui/dialogs/chat_full.xml
Normal file
98
gui/dialogs/chat_full.xml
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<PropertyList>
|
||||||
|
<name>chat_full</name>
|
||||||
|
<modal>false</modal>
|
||||||
|
<layout>vbox</layout>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>Multiplayer Chat</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<hrule><dummy/></hrule>
|
||||||
|
|
||||||
|
<textbox>
|
||||||
|
<halign>fill</halign>
|
||||||
|
<pref-width>550</pref-width>
|
||||||
|
<pref-height>120</pref-height>
|
||||||
|
<slider>20</slider>
|
||||||
|
<live>true</live>
|
||||||
|
<wrap>true</wrap>
|
||||||
|
<editable>false</editable>
|
||||||
|
<property>/sim/multiplay/chat_history</property>
|
||||||
|
</textbox>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label></label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
|
||||||
|
<input>
|
||||||
|
<name>compose</name>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
<halign>fill</halign>
|
||||||
|
<length>50</length>
|
||||||
|
<pref-width>500</pref-width>
|
||||||
|
<property>/sim/multiplay/chat_compose</property>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Send</legend>
|
||||||
|
<default>true</default>
|
||||||
|
<key>Enter</key>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>
|
||||||
|
var lchat = getprop("/sim/multiplay/chat_compose");
|
||||||
|
if (lchat != "")
|
||||||
|
{
|
||||||
|
setprop("/sim/multiplay/chat", lchat);
|
||||||
|
setprop("/sim/multiplay/chat_compose", "");
|
||||||
|
fgcommand("dialog-update", props.Node.new({"object-name": "compose",
|
||||||
|
"dialog-name": "chat_full"}));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label></label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty><stretch>true</stretch></empty>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Close</legend>
|
||||||
|
<default>true</default>
|
||||||
|
<key>Esc</key>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Less ^</legend>
|
||||||
|
<default>false</default>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-show</command>
|
||||||
|
<dialog-name>chat</dialog-name>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<empty><stretch>true</stretch></empty>
|
||||||
|
</group>
|
||||||
|
</PropertyList>
|
|
@ -24,6 +24,15 @@
|
||||||
</binding>
|
</binding>
|
||||||
</checkbox>
|
</checkbox>
|
||||||
|
|
||||||
|
<checkbox>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>Show chat messages</label>
|
||||||
|
<property>/sim/multiplay/chat_display</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
</binding>
|
||||||
|
</checkbox>
|
||||||
|
|
||||||
<checkbox>
|
<checkbox>
|
||||||
<halign>left</halign>
|
<halign>left</halign>
|
||||||
<label>Sun/Moon horizon effect</label>
|
<label>Sun/Moon horizon effect</label>
|
||||||
|
|
|
@ -152,6 +152,15 @@
|
||||||
</binding>
|
</binding>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<label>Chat</label>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-show</command>
|
||||||
|
<dialog-name>chat</dialog-name>
|
||||||
|
</binding>
|
||||||
|
</item>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu>
|
<menu>
|
||||||
|
|
|
@ -12,6 +12,11 @@ Started September 2000 by David Megginson, david@megginson.com
|
||||||
|
|
||||||
<!-- General simulation preferences -->
|
<!-- General simulation preferences -->
|
||||||
<sim>
|
<sim>
|
||||||
|
<!-- Multiplayer chat requires that these properties be defined -->
|
||||||
|
<multiplay>
|
||||||
|
<chat type="string">Hello</chat>
|
||||||
|
<transmission-freq-hz type="string">118500000</transmission-freq-hz>
|
||||||
|
</multiplay>
|
||||||
<!-- hide some development tools, such as parts of the HUD adjustment dialog -->
|
<!-- hide some development tools, such as parts of the HUD adjustment dialog -->
|
||||||
<devel type="bool">false</devel>
|
<devel type="bool">false</devel>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue