User Tools

Site Tools


lua:sharedtable

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
lua:sharedtable [2015/09/28 05:01] vodurlua:sharedtable [2015/09/28 16:36] (current) vodur
Line 21: Line 21:
 ===== Shared functions ===== ===== Shared functions =====
  
-Just like any other lua table, 'shared' table can also contain functions. Thus 'shared' table is an ideal place to store helper functions that would be in different scripts throughout an area.+Just like any other lua table, 'shared' table can also contain functions. Thus 'shared' table is an ideal place to store helper functions that would be used in different scripts throughout an area.
  
 <code lua> <code lua>
Line 58: Line 58:
  
 <code lua> <code lua>
- 
-<code> 
 shared.somevalues = { shared.somevalues = {
     bluecount=3,     bluecount=3,
Line 74: Line 72:
     return false     return false
 end end
 +</code>
 +
 +===== Loading shared code =====
 +
 +When using shared table to store shared code such as helper functions, a typical way to do this is to put all the functions in a single prog and call this prog from any prog that uses the helper functions. Additionally, it is good practice to insure the code is only loaded once.
 +
 +Example using a loaded flag:
 +
 +<code lua>
 +-- mprog 1234
 +if shared.helpers_loaded then return
 +
 +function shared.helper1()
 +    echo("helper 1 test test test")
 +end
 +
 +function shared.helper2()
 +    echo("helper 2 test test test")
 +end
 +
 +shared.helpers_loaded=true
 +</code>
 +
 +<code lua>
 +-- mprog 1235
 +loadprog(1234)
 +shared.helper1()
 +</code>
 +
 +<code lua>
 +-- mprog 1236
 +loadprog(1234)
 +shared.helper2()
 +</code>
 +
 +Similar example using a module style:
 +
 +<code lua>
 +-- mprog 1234
 +if shared.module1 then return
 +
 +local module1={}
 +
 +module1.helper1 = function()
 +    echo("helper 1 test test test")
 +end
 +
 +module1.helper2 =  function()
 +    echo("helper 2 test test test")
 +end
 +
 +shared.module1 = module1
 +</code>
 +
 +==== Sharing with different prog types ====
 +
 +All prog types have access to 'shared' table (mprog/oprog/aprog/rprog). However, if all your shared code is in mprog 1234 (as above example), only mprogs can easily load this code using [[:lua:ch:loadprog|loadprog]]. Loadprog called from oprog can only load oprogs, and similarly with aprog and rprog.
 +
 +One strategy to overcome this limitation is to keep all the shared code in an aprog and load it from the different prog types accordingly:
 +
 +<code lua>
 +-- aprog 1234, shared helper functions for all prog types
 +if shared.helpers_loaded then return
 +
 +function shared.helper1()
 +    echo("helper 1 test test test")
 +end
 +
 +function shared.helper2()
 +    echo("helper 2 test test test")
 +end
 +
 +shared.helpers_loaded=true
 +</code>
 +
 +<code lua>
 +-- aprog 1235
 +loadprog(1234)
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- mprog 1234
 +mob.proto.area:loadprog(1234)
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- oprog 1234
 +obj.proto.area:loadprog(1234)
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- rprog 1234
 +room.area:loadprog(1234)
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +Using '**[[:lua:loadscriptfunction|loadscript]]**' is also an option:
 +
 +<code lua>
 +-- helpers_example.lua, shared helper functions for all prog types
 +if shared.helpers_loaded then return
 +
 +function shared.helper1()
 +    echo("helper 1 test test test")
 +end
 +
 +function shared.helper2()
 +    echo("helper 2 test test test")
 +end
 +
 +shared.helpers_loaded=true
 +</code>
 +
 +<code lua>
 +-- aprog 1235
 +loadscript('vodur','helpers_example')
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- mprog 1234
 +loadscript('vodur','helpers_example')
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- oprog 1234
 +loadscript('vodur','helpers_example')
 +shared.helper1()
 +shared.helper2()
 +</code>
 +
 +<code lua>
 +-- rprog 1234
 +loadscript('vodur','helpers_example')
 +shared.helper1()
 +shared.helper2()
 </code> </code>
  
lua/sharedtable.1443416510.txt.gz · Last modified: 2015/09/28 05:01 by vodur