#server-side #api #platform #module #llvm #events #client-side

altv

Rust server-side API for writing your gamemodes on alt:V

78 releases (9 stable)

16.2.2 Sep 18, 2024
16.1.0 Jun 2, 2024
16.0.0-dev.1 Dec 29, 2023
15.1.0 Oct 22, 2023
0.2.0 Jun 13, 2020

#127 in Development tools

Download history 23/week @ 2024-06-10 111/week @ 2024-07-29 21/week @ 2024-08-05 8/week @ 2024-08-12 134/week @ 2024-08-19 4/week @ 2024-08-26 142/week @ 2024-09-16 84/week @ 2024-09-23

227 downloads per month

MIT license

440KB
9K SLoC


Server-side alt:V API for Rust

crates.io

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

Client-side part

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

Docs

API documentation can be found here

How to use

Before all this, you need to install LLVM

[!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

Video format of this tutorial if you are more into video tutorials

  1. Create new cargo package with cargo new altv-resource --lib

  2. Configure cargo to compile your crate as cdylib in your Cargo.toml

[lib]
crate-type = ['cdylib']
  1. After that you can install altv crate with: cargo add altv

  2. Next step will be to add main function to your resource (src/lib.rs)

use altv::prelude::*; // Entity, WorldObject traits

#[altv::main] // This is required
fn main() -> impl altv::IntoVoidResult {
    altv::log!("~gl~hello world");
}
  1. Now you can build your resource with cargo build

  2. In target/debug/ you should see the .dll or .so you just compiled (if you don't see it, make sure you set lib.crate-type to ["cdylib"], see step 2)

  3. Create new alt:V resource, in resources directory of your server

  4. Copy compiled .dll or .so to resource directory

  5. Create resource.toml with this content:

type = 'rs'
main = 'example.dll' # your compiled .dll or .so
  1. Don't forget to add resource to server.toml

  2. Now you can download rust-module .dll or .so from latest release or with cargo-altvup

  3. Copy it to modules directory of your server (if you do not use cargo-altvup)

  4. Add rust-module to server.toml like that:

modules = ['rust-module']
  1. Now if you have done everything correctly, you should see green "hello world" message in server console

Dependencies

~3–14MB
~179K SLoC