- How To Make Lua Scripts For Roblox
- How To Make Lua C Scripts Online
- How To Make Lua C Scripts Download
- How To Make Lua Scripts
Lua has a very simple C API. You can run Lua code and access lua objects from C. Similarly, you can access C functions and libraries from Lua. In this post, we’ll primarily look at how to expose C functions to lua.
Install Lua
Let’s start off with the installation of lua. You can install lua using system package managers as
Mac:
Note for Lua 5.2: In 5.2 you can actually define a ipairs field in the metatable, which does make ipairs useful in some cases. However, Lua 5.2 also makes the len field work for tables, so you might still prefer the above code to ipairs as then the len metamethod is only called once, while for ipairs you would get an additional function. So, they kind of make it simpler to talk to the computer (or, in our case, TPT). I'd like to mention that writing 'LUA' in allcaps will annoy mniip, so it's better in general to avoid doing just that. Running a script. Before we get started on actually teaching you how to code, we'll make sure you know the process how to run Lua scripts in TPT.
Ubuntu:
You can also build lua from source. However, you have to build lua as a shared library and this can be a bit tricky.
Lua Stack
Communication between lua and C is held through stacks with each element in stack representing lua value (nil, number, string, etc.).
For example, a C wrapped function c_swap
is called in lua as:
In C, you will receive arguments in a stack as
You will then read the arguments from the stack as (indexing for this stack starts with 1 like in lua):
This is actually unsafe because these calls will fail if value in the stack at the specified index is not a number. Following code uses auxiliary library lauxlib.h
and is safer; it will raise errors instead of segfaulting.
Then, you will process the arguments and push the results to stack.
Stack will now look like
Since you need to communicate the number of return value to lua, you will return 2
. Lua will then know that top 2 values in the stack are the returned values.
The stack we’ve described is not global. Each function has its own stack.
Code
Let’s put all this together into main.c
. main()
function illustrates how to run lua code from C.
And build and execute as If you have installed lua with apt-get, build using gcc main.c -o swap -llua5.2 -I/usr/include/lua5.2/
which should print
Library
In the above code, you’ve not really used lua interpretor; you’ve run the lua code in C itself.You might rather want to create a module which you can load into a lua interpretor using
To do this, you’ll have to register your functions by creating a array of luaL_Reg
and a function luaopen_mylib
.
Let’s do this right away by editing main.c
. We will also add additional mysin
function.
This code works only for lua 5.2. For lua 5.1, please use luaL_register(L, 'mylib', mylib);
instead of luaL_newlib(L, mylib);
Create a loadable .so
file with
How To Make Lua Scripts For Roblox
If you have installed lua with apt-get, build using gcc main.c -shared -o mylib.so -fPIC -llua5.2 -I/usr/include/lua5.2/
How To Make Lua C Scripts Online
You can now load this module in lua.
Now, you should be able to wrap any C library by writing a lua wrapper.We still have some caveats:
How To Make Lua C Scripts Download
- We will have to write a wrapping function for each of the functions in your C library to ‘parse’ the arguments(
luaL_checknumber
etc.). This is repetitive and can be a potential source for bugs. - C doesn’t have classes. What if your library is in C++? You cannot easily wrap classes like above. You will have to mess with metatables and so on.
How To Make Lua Scripts
A solution to both of these is to use Swig. Swig allows you to wrap C/C++ classes/functions into many languages like python, lua, java quite easily. In a later post, we will see how to use swig and wrap a simple library.