altv::events::on_player_connect(|event| {
let name = event.player.name()?;
altv::log!("player with name: {name} connected!");
Ok(())
});
New server-side Rust module for alt:V platform
Big thanks to the creator of the first Rust module, as their work helped me understand how to start my own module
At first it was native implementation using wasmtime without JavaScript. It worked, but because alt:V does not allow you to use custom client-side modules (.dll) in production without approval, integration into the client core, constant maintenance and more than 0 people using this module, I switched to a more realistic approach, JavaScript WASM
API documentation can be found here
First you need to install LLVM because it's required by autocxx crate
Warning
Currently on Windows latest version of LLVM doesn't work with Rust module, you need to install 17.0.1, for example with winget you can do it using this command winget install LLVM.LLVM --version 17.0.1
(add --force
if it fails)
Important
On Windows set LIBCLANG_PATH as an environment variable pointing to the bin directory of your LLVM install. For example, if you installed LLVM to D:\programs\LLVM, then you'd set the value to be D:\programs\LLVM\bin. You also need to have installed Visual Studio with MSVC compiler (usually installed with Rust using Rustup)
Note
If you have similar error: src/alt_bridge.h:5:10: fatal error: 'memory' file not found
when installing or building altv_internal_sdk, try this
-
Use
altvup
to installrust-module
binary and alt:V server files -
Create new cargo package with
cargo new altv-resource --lib
-
Configure cargo to compile your crate as dynamic library in your
Cargo.toml
[lib]
crate-type = ['cdylib']
-
After that you can install
altv
crate with:cargo add altv
-
Next step will be to add main function to your resource (
src/lib.rs
)
use altv::prelude::*;
#[altv::main] // This is required
fn main() -> impl altv::IntoVoidResult {
altv::log!("~gl~hello world");
}
-
Now you can build your resource with
cargo build
-
In
target/debug/
you should see the dynamic library (.dll
or.so
) you just compiled (if you don't see it, make sure you setlib.crate-type
to['cdylib']
, see step 3) -
Create new alt:V resource, in
resources
directory of your server -
Copy compiled dynamic library (
.dll
or.so
) to resource directory -
Create
resource.toml
with this content:
type = 'rs'
# your compiled crate as .dll or .so
main = 'example.so'
# note: if you are developing on windows and your production server is running
# on linux you can use .module extension for your file (so here it will be example.module)
# and then there will be no need to change resource.toml between linux and windows
- Don't forget to add resource to
server.toml
# ...
resources = ['your-rust-resource']
# ...
- Now you can start
altv-server
Note
If you are on Linux don't forget to run chmod +x
for altv-server
and altv-crash-handler
:
chmod +x altv-server
chmod +x altv-crash-handler
- If you have done everything correctly, you should see green "hello world" message in the console