wiki.sine.space | sinespace

Difference between revisions of "Scripting/Server/SRegionScript"

From wiki.sine.space
Jump to: navigation, search
(Replaced content with "This page has moved to: https://docs.sine.space/v/scripting/server-scripting/scene/sregionscript")
 
Line 1: Line 1:
 
+
This page has moved to: https://docs.sine.space/v/scripting/server-scripting/scene/sregionscript
=Public Member Functions=
+
 
+
{{ScriptFunction|void|Log|(string message);|Log a message to console. (only works on preview grid)|5=<pre>Space.Log("Log")</pre>|6=<pre>--Clicking the object will make the server script log "Test Message" on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" then
+
    Space.Log("Message:" .. table[1])
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"Test Message"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
 
+
{{ScriptFunction|void|SubscribeToNetwork|(string key);|Subscribe to network messages on "key".|5=<pre>Space.SubscribeToNetwork("thekey")</pre>|6=<pre></pre>}}
+
 
+
 
+
{{ScriptFunction|void|UnsubscribeFromNetwork|(string key);|Unsubscribe from network messages on "key".|5=<pre>Space.UnsubscribeFromNetwork("thekey")</pre>|6=<pre></pre>}}
+
 
+
 
+
{{ScriptFunction|void|SendMessageToAllClientScripts|(string messageName, Table message);|Sends a network message to all client scripts.|5=<pre>Space.SendMessageToAllClientScripts("thekey",{"themessage"})</pre>|6=<pre>--Clicking the object by a single client will send a message to the server which triggers a message response to all clients
+
 
+
--server script--
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" then
+
  Space.SendMessageToAllClientScripts("ServerResponse",{"message response to all client scripts in region that are subscribed to this key"})
+
  end
+
 
+
end
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"Test Message"}) 
+
end
+
 
+
OnRecieveFunction = function(SNetworkMessage)
+
  Space.Log(SNetworkMessage.Key)
+
  Space.Log(SNetworkMessage.Message[1])
+
end
+
 
+
Space.Network.SubscribeToNetwork("ServerResponse", OnRecieveFunction)
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
 
+
{{ScriptFunction|void|SendMessageToClientScripts|(int playerID, string messageName, Table message);|Sends a network message to a client script belonging to a specific player|5=<pre>Space.SendMessageToAllClientScripts(APlayerID,"thekey",{"themessage"})</pre>|6=<pre>--Clicking the object by a single client will send a message to the server which triggers...
+
--a message response only to that specific client
+
 
+
 
+
--server script--
+
 
+
 
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" then
+
    local sender = table[2]
+
    Space.SendMessageToClientScripts(sender,"ServerResponse",{"a message response to the clicker's client script in region that is subscribed to this key"})
+
  end
+
end
+
 
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  id = Space.Scene.PlayerAvatar.ID
+
  Space.Network.SendNetworkMessage("testKey",{"Test Message", id}) 
+
end
+
 
+
OnRecieveFunction = function(SNetworkMessage)
+
  Space.Log(SNetworkMessage.Key)
+
  Space.Log(SNetworkMessage.Message[1])
+
end
+
 
+
Space.Network.SubscribeToNetwork("ServerResponse", OnRecieveFunction)
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|void|StartCoroutine|(<nowiki>string name, DynValue parameter=default(DynValue))</nowiki>;|Runs the given function as a coroutine. A parameter is optional.|5=<pre>Space.StartCoroutine("AFunctionName")</pre>|6=<pre>--Clicking the object on client will trigger a 3 second countdown on server script using coroutine
+
 
+
 
+
--server script--
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "Timer" then
+
    Space.StartCoroutine(TimerCoroutine)
+
  end
+
end
+
 
+
function TimerCoroutine()
+
  local time = 0
+
 
+
  while time < 3 do
+
    Space.Log(3-time)
+
    time = time + 1
+
    coroutine.yield(1)
+
  end
+
 
+
end
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
function OnClickFunction()
+
  Space.Network.SendNetworkMessage("testKey",{"Timer"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
 
+
=Public Attributes=
+
 
+
{{ScriptFunction|string|ScriptID|{ get; }|Returns a unique identifier of this script runtime. (can be found in "/list_scripts" window on preview.)|5=<pre>scriptID = Space.ScriptID</pre>|6=<pre>--Clicking the object on client will make the server script log it's ScriptID
+
 
+
--server script--
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "ScriptID" then
+
    Space.Log(Space.ScriptID)
+
  end
+
end
+
 
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
function OnClickFunction()
+
  Space.Network.SendNetworkMessage("testKey",{"ScriptID"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|int|InstanceID|{ get; }|Returns a unique identifier for the instance of the region. Useful in the case of multiple shards/instances being used. InstanceID does not necessarily equal to the RegionID, even if there's only one instance running. |5=<pre>instance = Space.InstanceID</pre>|6=<pre>--Clicking the object on client will make the server script log only...
+
--if it's instanceID matches with client's instanceID
+
 
+
--server script--
+
function OnScriptServerMessage(key, table)
+
  local instanceID = Space.InstanceID
+
  if key == "testKey" and table[1] == "ScriptID"  and table[2] == instanceID then
+
    Space.Log(instanceID)
+
  end
+
end
+
 
+
 
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
function OnClickFunction()
+
  local instanceID = Space.Scene.InstanceID
+
  Space.Network.SendNetworkMessage("testKey",{"ScriptID", instanceID}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|int|RegionID|{ get; }|Returns a unique identifier for the region. (Same ID seen in curator)|5=<pre>region = Space.RegionID</pre>|6=<pre>--Clicking the object on client will make the server script log only...
+
--if it's RegionID matches with client's RegionID
+
 
+
--server script--
+
function OnScriptServerMessage(key, table)
+
  local RegionID = Space.RegionID
+
  if key == "testKey" and table[1] == "ScriptID"  and table[2] == RegionID then
+
    Space.Log(RegionID)
+
  end
+
end
+
 
+
 
+
 
+
--client script--
+
thisObject = Space.Host.ExecutingObject
+
 
+
function OnClickFunction()
+
  local RegionID = Space.Scene.RegionID
+
  Space.Network.SendNetworkMessage("testKey",{"ScriptID", RegionID}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)
+
</pre>}}
+
 
+
{{ScriptFunction|SScene|Scene|{ get; }|Access to the SScene class methods and properties.|5=<pre>Space.Scene</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|SDatabase|Database|{ get; }|Access to the SDatabase class methods and properties.|5=<pre>Space.Database</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|SMath|Math|{ get; }|Access to the SMath class methods and properties.|5=<pre>Space.Math</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|SShared|Shared|{ get; }|Access to the SShared class methods and properties.|5=<pre>Space.Shared</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|SWebservice|WebServices|{ get; }|Access to the SWebservice class methods and properties.|5=<pre>Space.WebServices</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|string|RuntimeType|{ get;}|Returns "Server" if this script is a Server script|5=<pre>type = Space.RuntimeType</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|bool|InEditor|{ get; }|Returns true if in Editor. (this will return false on server scripts)|5=<pre>IsInEditor = Space.InEditor</pre>|6=<pre></pre>}}
+
 
+
{{ScriptFunction|float|TimeSinceAwake|{ get;}|Time, in seconds, since this script runtime has been awake.|5=<pre>SecondsAwake = Space.TimeSinceAwake</pre>|6=<pre>--Clicking the object will make the server script log it's TimeSinceAwake on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "TimeSinceAwake" then
+
    Space.Log(Space.TimeSinceAwake)
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"TimeSinceAwake"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|string|DateTimeUTC|{ get; }|Returns a string of the current Date/Time in UTC|5=<pre>DateAndTime = Space.DateTimeUTC</pre>|6=<pre>--Clicking the object will make the server script log it's DateTimeUTC on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "DateTimeUTC" then
+
    Space.Log(Space.DateTimeUTC)
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"DateTimeUTC"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|int|LocalTimeUnix|{ get; }|Returns the current Unix time (in seconds) (same as ServerTimeUnix)|5=<pre>unixtime = Space.LocalTimeUnix</pre>|6=<pre>--Clicking the object will make the server script log it's LocalTimeUnix on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "LocalTimeUnix" then
+
    Space.Log(Space.LocalTimeUnix)
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"LocalTimeUnix"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
{{ScriptFunction|int|ServerTimeUnix|{ get; }|Returns the current Unix time (in seconds) (same as LocalTimeUnix)|5=<pre>unixtime = Space.ServerTimeUnix</pre>|6=<pre>--Clicking the object will make the server script log it's ServerTimeUnix on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" and table[1] == "ServerTimeUnix" then
+
    Space.Log(Space.ServerTimeUnix)
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"ServerTimeUnix"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
 
+
=Events=
+
 
+
Server script events are "Magic methods" which, unlike client scripts, you don't have to bind or subscribe to. They will be called as long as you have their methods implemented in your server script.
+
 
+
{{ScriptFunction|<nowiki>Action<int></nowiki>|OnAvatarJoin||An event function which will be called whenever an Avatar joins and will also contain the Avatar's ID as a parameter.|5=<pre>function OnAvatarJoin(playerID)
+
end</pre>|6=<pre>function OnAvatarJoin(id)
+
  local numOfAvatars = Space.Scene.ConnectedAvatars
+
  Space.Log("Avatar with ID " .. id .. "has joined")
+
  Space.Log("Number of avatars connected: " .. numOfAvatars)
+
end</pre>}}
+
 
+
{{ScriptFunction|<nowiki>Action<int></nowiki>|OnAvatarLeave||An event function which will be called whenever an Avatar leaves and will also contain the Avatar's ID as a parameter.|5=<pre>function OnAvatarLeave(playerID)
+
end</pre>|6=<pre>function OnAvatarLeave(id)
+
  local numOfAvatars = Space.Scene.ConnectedAvatars
+
  Space.Log("Avatar with ID " .. id .. "has left")
+
  Space.Log("Number of avatars connected: " .. numOfAvatars)
+
end</pre>}}
+
 
+
{{ScriptFunction|<nowiki>Action<string, Table></nowiki>|OnScriptServerMessage||An event function which will be called whenever the server script receives a Network Message, and will contain the network message key String and message Table as a parameter. |5=<pre>function OnScriptServerMessage(key, table)
+
 
+
theKeyString = key
+
theSNetworkMessageTable = table
+
 
+
end</pre>|6=<pre>--Clicking the object will make the server script log "Test Message" on all clients
+
 
+
--server script
+
function OnScriptServerMessage(key, table)
+
  if key == "testKey" then
+
    Space.Log("Message:" .. table[1])
+
  end
+
end
+
 
+
 
+
--client script
+
thisObject = Space.Host.ExecutingObject
+
 
+
OnClickFunction = function()
+
  Space.Network.SendNetworkMessage("testKey",{"Test Message"}) 
+
end
+
 
+
thisObject.AddClickable()
+
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
+
 
+
 
+
 
+
{{Scripting Navbox}}
+

Latest revision as of 08:13, 19 September 2022

This page has moved to: https://docs.sine.space/v/scripting/server-scripting/scene/sregionscript