User Tools

Site Tools


lgscript:second_script

Second Script

------ Trace.lua ------
local uisrv = lgs.DarkUISrv
 
local function Report(message, id)
  uisrv.TextMessage("Message "..message.." received from "..id.." by "..script.objid)
end
 
function TurnOn(msg)
  Report(msg.message, msg.from)
  return true
end
function TurnOff(msg)
  Report(msg.message, msg.from)
  return true
end

This shows using a local function, and also a local variable to hold the script service. Using local variables is faster than globals, and the name is shorter so you can type less.

This script reads some fields from the message table that is passed to your message handler. Message tables can have different fields depending on the message being handled. See Script Messages for complete information about messages.

The example also uses the global script object. The script object has two fields:

script.ObjId The ID of the object this script is running on.
script.ClassName The name of this script.
script:SendMessage(to,message,) Send a message to an object. The method will return after the object has received the message. You can add up to three extra parameters.
script:PostMessage(to,message,) Sends a message, but doesn’t wait for it to be received. This is the preferred way to send messages because it doesn’t delay the game as much.
script:SetTimedMessage(name,time,type (opt),data (opt)) Set a timer on this object. Time is in milliseconds. When the timer expires, a Timer message is sent back to your script. A timer can be "OneShot" or "Periodic", which you pass as the optional third parameter.
script:KillTimedMessage(timer) Stop a previously set timer. Pass the value that was returned from SetTimedMessage.
script:IsScriptDataSet(name) Check if a script variable is set.
script:GetScriptData(name) Return the value of a script variable.
script:SetScriptData(name,value) Set a script variable.
script:ClearScriptData(name) Erase a script variable.

The use of script variables will be described later.

The TurnOn and TurnOff functions in the example do the same thing. It would be more efficient to use one function for both messages. This is not difficult in Lua. Instead of two functions you can type this:

function TurnOn(msg)
  Report(msg.message, msg.from)
  return true
end
TurnOff = TurnOn

As long as the name is global and a function, it will be considered a message handler.

lgscript/second_script.txt · Last modified: 2009/10/16 15:36 by qolelis