remove README.Protocol and add a README that refers to the "real"
[fg:toms-fgdata.git] / Nasal / multiplayer.nas
1 # Multiplayer Chat
2 # ================
3 #
4 # 1) Display chat messages from other aircraft to
5 #    the screen using screen.nas
6 #
7 # 2) Display a complete history of chat via dialog.
8 #
9 # 3) Allow chat messages to be written by the user.
10
11 var messages = {};
12
13 check_messages = func
14 {  
15
16   var mp = props.globals.getNode("/ai/models").getChildren("multiplayer");
17   
18   foreach (i; mp)
19   {
20     var lmsg           = getprop(i.getPath() ~ "/sim/multiplay/chat");
21     var lcallsign      = getprop(i.getPath() ~ "/callsign");
22     
23     if ((lmsg != nil) and (lmsg != "") and (lcallsign != nil) and (lcallsign != ""))
24     {
25       #print("Call Sign: " ~ lcallsign);
26       #print("lmsg: " ~ lmsg);
27       #print("Freq: " ~ ltransmitfreq);
28
29       if ((! contains(messages, lcallsign)) or (lmsg != messages[lcallsign]))
30       {
31         # Indicate we've seen this message.
32         messages[lcallsign] = lmsg;
33         echo_message(lmsg, lcallsign);        
34       }
35     }
36   }
37   
38   # Check for new messages every couple of seconds.
39   settimer(check_messages, 3);  
40 }
41
42 echo_message = func(msg, callsign)
43 {
44    if (callsign != nil)
45    {
46      msg = callsign ~ ": " ~ msg;
47    }
48    
49    var ldisplay = getprop("/sim/multiplay/chat_display");
50
51    if ((ldisplay != nil) and (ldisplay == "1"))
52    {
53      # Only display the message to screen if configured.
54      setprop("/sim/messages/ai-plane", msg);
55    }
56
57    # Add the chat to the chat history.
58    var lchat = getprop("/sim/multiplay/chat_history");
59
60    if (lchat == nil)
61    {
62      setprop("/sim/multiplay/chat_history", msg);
63    } 
64    else
65    {
66      if (substr(lchat, size(lchat) -1, 1) != "\n")
67      {
68        lchat = lchat ~ "\n";
69      }
70      
71      setprop("/sim/multiplay/chat_history", lchat ~ msg);
72    }
73 }
74
75
76 settimer(func {
77   # Call-back to ensure we see our own messages.
78   setlistener("/sim/multiplay/chat", func{ echo_message(cmdarg().getValue(), getprop("/sim/multiplay/callsign")); });
79
80   # check for new messages
81   check_messages();
82   
83 }, 1);
84
85