rglua cratesio Build Status License github/Vurv78

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.

Usage

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.5.0" ```

Building

After installing rust, just run cargo build --release.

If you are building to 32 bit for srcds or non x64 garrysmod, first do:
rustup target add i686-pc-windows-msvc in order to make rust download any 32 bit libraries needed to compile this.

And finally run:
cargo build --release --target=i686-pc-windows-msvc

Also do this if you have never compiled to 32 bit, to get rustup to install 32 bit versions of everything you need
rustup target add i686-pc-windows-msvc

Notes

Example Module

```rust use rglua::prelude::*;

[no_mangle]

pub extern fn gmod13open(state: LuaState) -> i32 { luagetglobal( state, cstr!("print") ); luapushstring( state, cstr!("Hello from rust!") ); luacall( state, 1, 0 ); 0 }

[no_mangle]

pub extern fn gmod13close(state: LuaState) -> i32 { 0 } ```

Acknowledgements

garrysmod_common

This is heavily based off of garrysmodcommon, in how we export the luashared functions and trying to replicate everything from the Lua C Api.