This is a crate that contains bindings for using the lua c api in garrysmod through bindings using the rust libloading library. Can be used for either binary modules or just manual injections into gmod, like with Autorun-rs
This works by finding a lua_shared.dll
file relative to the currently running program, so you need to make sure your file is either in GarrysMod/bin/
or GarrysMod/garrysmod/bin
for srcds servers. The library will panic if the file is not found.
More information on binary modules can be found on the garrysmod wiki: Creating Binary Modules and an example can be found at the bottom of this file.
Add this to your Cargo.toml
file
```toml
[lib]
crate-type = ["cdylib"] # This tells rust we want to create a .dll file that links to C code.
[dependencies] rglua = "0.7.0" ```
After installing rust, just run cargo build --release
.
If you are targeting 32 bit make sure to install the toolchain and build to it:
bash
rustup target add i686-pc-windows-msvc
cargo build --release --target=i686-pc-windows-msvc
Find another larger example at examples/is_even ```rust use rglua::prelude::*;
pub extern fn gmod13open(state: LuaState) -> i32 { luagetglobal(state, cstr!("print")); luapushstring(state, cstr!("Hello from rust!")); // Print to the in-game console luacall(state, 1, 0);
// or
printgm!(state, "Hello world!");
0
}
pub extern fn gmod13close(state: LuaState) -> i32 { 0 } ```
This is heavily based off of garrysmodcommon, in how we export the luashared functions and trying to replicate everything from the Lua C Api.