9c52cbf4ac
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
85 lines
1.9 KiB
Text
85 lines
1.9 KiB
Text
# 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);
|
|
|
|
|