What's New in Director 8.5 > Multiuser Server-Side Scripting > Adding server-side scripts |
![]() ![]() ![]() |
Adding server-side scripts
Adding server-side scripting functionality to a movie requires that you create a script file for your movie and edit the Scriptmap.ls file.
To add a script to the server for your movie:
1 |
Make a text file of the script, name the file and give it an "ls" extension. This script should contain handlers for each server event you want the script to react to, plus any custom events you define. |
2 |
Place the file in the server's scripts folder. |
3 |
Open the Scriptmap.ls file in a text editor and add a line to it with the following syntax: |
theMap.append( [movieID: " |
|
This line should be added immediately after the last line that contains the same syntax. The string |
|
For example, to add the file TestScript.ls to the Scriptmap.ls file and associate it with the movie ID TestMovie, you might start with a Scriptmap.ls file like this: |
|
on scriptMap theMap = [] theMap.append( [ #movieID: "BlackJack*", #scriptFileName: \ "BlackJack.ls" ] ) theMap.append( [ #movieID: "SimpleChat", #scriptFileName: \ "SimpleChat.ls" ] ) return theMap end |
|
Then you would add a line to it like the one in the following: |
|
on scriptMap theMap = [] theMap.append( [ #movieID: "BlackJack*", #scriptFileName: \ "BlackJack.ls" ] ) theMap.append( [ #movieID: "SimpleChat", #scriptFileName: \ "SimpleChat.ls" ] ) -- This is the new line theMap.append( [ #movieID: "TestMovie", #scriptFileName: \ "TestScript.ls" ] ) return theMap end |
|
Note that the |
|
[ [ movieID: "BlackJack*", scriptFileName: "BlackJack.ls" ], [movieID: "SimpleChat", scriptFileName: "SimpleChat.ls" ], [movieID: "TestMovie", scriptFileName: "TestScript.ls" ] ] |
|
If you want to associate a server-script with a specific group within a movie, add a |
|
theMap.append( [#movieID: "TestMovie", #groupID: "@chatUsers",\ #scriptFileName: "TestScript.ls"] ) |
|
4 |
Restart the server. |
You can also make the server reload the Scriptmap.ls file without restarting by having a movie send a message to the server with a subject of |
|
The following excerpt of the Dispatcher script's |
|
-- These commands may be useful during development; be sure to -- disable them for a production server -- -- case subject of -- "System.Script.Admin.Reload": -- put "LingoVM: reloading all scripts." -- tlist = thread().list -- repeat with t in tlist -- t.forget() -- end repeat -- the timeoutList = [] -- me.loadScriptMap() -- exit -- "System.Script.Admin.Ping": -- sender.sendMessage(subject, msg) -- exit -- "System.Script.Admin.ShowState": -- showServerState() -- exit -- end case |
|
![]() |
Note that the entire case
statement is commented so that it will not be active by default. Reloading the Scriptmap.ls file will abort any script threads in progress. See Multithreading.
When adding server-side scripts, you can choose to associate several movie IDs with a single script file or several script files with a single movie ID, depending on the requirements of your multiuser application. The asterisk (*) after the #movieID
BlackJack indicates that any movie ID beginning with the string BlackJack will be associated with the BlackJack.ls file. The Dispatcher script's on wildCompare
handler resolves movie IDs beginning with the given string and associates them with the correct script file.
![]() ![]() ![]() |