wiki.sine.space | sinespace

Difference between revisions of "Scripting/Server/SRegionScript"

From wiki.sine.space
Jump to: navigation, search
Line 5: Line 5:
  
 
--server script
 
--server script
 
 
function OnScriptServerMessage(key, table)  
 
function OnScriptServerMessage(key, table)  
 
 
 
   if key == "testKey" then
 
   if key == "testKey" then
  Space.Log("Message:" .. table[1])
+
    Space.Log("Message:" .. table[1])
 
   end
 
   end
 
 
end
 
end
 
 
  
  
 
--client script
 
--client script
 
 
thisObject = Space.Host.ExecutingObject
 
thisObject = Space.Host.ExecutingObject
  
 
OnClickFunction = function()
 
OnClickFunction = function()
 
+
  Space.Network.SendNetworkMessage("testKey",{"Test Message"})   
Space.Network.SendNetworkMessage("testKey",{"Test Message"})   
+
 
+
 
end
 
end
  
Line 174: Line 166:
 
thisObject.Clickable.OnClick(OnClickFunction)</pre>}}
 
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></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|SScene|Scene|{ get; }|Access to the SScene class methods and properties.|5=<pre>Space.Scene</pre>|6=<pre></pre>}}
Line 190: Line 205:
 
{{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|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></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
  
{{ScriptFunction|string|DateTimeUTC|{ get; }|Returns a string of the current Date/Time in UTC|5=<pre>DateAndTime = Space.DateTimeUTC</pre>|6=<pre></pre>}}
+
--server script
 +
function OnScriptServerMessage(key, table)
 +
  if key == "testKey" and table[1] == "TimeSinceAwake" then
 +
    Space.Log(Space.TimeSinceAwake)
 +
  end
 +
end
  
{{ScriptFunction|int|LocalTimeUnix|{ get; }|Returns the current Unix time (in seconds) (same as ServerTimeUnix)|5=<pre>unixtime = Space.LocalTimeUnix</pre>|6=<pre></pre>}}
 
  
{{ScriptFunction|int|ServerTimeUnix|{ get; }|Returns the current Unix time (in seconds) (same as LocalTimeUnix)|5=<pre>unixtime = Space.ServerTimeUnix</pre>|6=<pre></pre>}}
+
--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>}}
  
  
Line 222: Line 309:
 
theSNetworkMessageTable = table
 
theSNetworkMessageTable = table
  
end</pre>|6=<pre></pre>}}
+
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}}
 
{{Scripting Navbox}}

Revision as of 19:40, 23 February 2022

Public Member Functions

Log

void Log (string message);

Log a message to console. (only works on preview grid)

Space.Log("Log")


--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)


SubscribeToNetwork

void SubscribeToNetwork (string key);

Subscribe to network messages on "key".

Space.SubscribeToNetwork("thekey")



UnsubscribeFromNetwork

void UnsubscribeFromNetwork (string key);

Unsubscribe from network messages on "key".

Space.UnsubscribeFromNetwork("thekey")



SendMessageToAllClientScripts

void SendMessageToAllClientScripts (string messageName, Table message);

Sends a network message to all client scripts.

Space.SendMessageToAllClientScripts("thekey",{"themessage"})


--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)


SendMessageToClientScripts

void SendMessageToClientScripts (int playerID, string messageName, Table message);

Sends a network message to a client script belonging to a specific player

Space.SendMessageToAllClientScripts(APlayerID,"thekey",{"themessage"})


--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)

StartCoroutine

void StartCoroutine (string name, DynValue parameter=default(DynValue));

Runs the given function as a coroutine. A parameter is optional.

Space.StartCoroutine("AFunctionName")


--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)


Public Attributes

ScriptID

string ScriptID { get; }

Returns a unique identifier of this script runtime. (can be found in "/list_scripts" window on preview.)

scriptID = Space.ScriptID


--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)

InstanceID

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.

instance = Space.InstanceID


--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)

RegionID

int RegionID { get; }

Returns a unique identifier for the region. (Same ID seen in curator)

region = Space.RegionID


--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)

Scene

SScene Scene { get; }

Access to the SScene class methods and properties.

Space.Scene


Database

SDatabase Database { get; }

Access to the SDatabase class methods and properties.

Space.Database


Math

SMath Math { get; }

Access to the SMath class methods and properties.

Space.Math


Shared

SShared Shared { get; }

Access to the SShared class methods and properties.

Space.Shared


WebServices

SWebservice WebServices { get; }

Access to the SWebservice class methods and properties.

Space.WebServices


RuntimeType

string RuntimeType { get;}

Returns "Server" if this script is a Server script

type = Space.RuntimeType


InEditor

bool InEditor { get; }

Returns true if in Editor. (this will return false on server scripts)

IsInEditor = Space.InEditor


TimeSinceAwake

float TimeSinceAwake { get;}

Time, in seconds, since this script runtime has been awake.

SecondsAwake = Space.TimeSinceAwake


--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)

DateTimeUTC

string DateTimeUTC { get; }

Returns a string of the current Date/Time in UTC

DateAndTime = Space.DateTimeUTC


--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)

LocalTimeUnix

int LocalTimeUnix { get; }

Returns the current Unix time (in seconds) (same as ServerTimeUnix)

unixtime = Space.LocalTimeUnix


--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)

ServerTimeUnix

int ServerTimeUnix { get; }

Returns the current Unix time (in seconds) (same as LocalTimeUnix)

unixtime = Space.ServerTimeUnix


--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)


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.

OnAvatarJoin

[[Scripting/Action<int>|Action<int>]] OnAvatarJoin '

An event function which will be called whenever an Avatar joins and will also contain the Avatar's ID as a parameter.

function OnAvatarJoin(playerID)

player = playerID


end


OnAvatarLeave

[[Scripting/Action<int>|Action<int>]] OnAvatarLeave '

An event function which will be called whenever an Avatar leaves and will also contain the Avatar's ID as a parameter.

function OnAvatarLeave(playerID)

player = playerID


end


OnScriptServerMessage

[[Scripting/Action<string, Table>|Action<string, Table>]] 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.

function OnScriptServerMessage(key, table) 

theKeyString = key
theSNetworkMessageTable = table

end


--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)