Skip to main content

Module omp

Module omp 

Source
Expand description

Native bindings for the Open Multiplayer SDK.

Independent pure-Rust implementation of the binary ABI of the Open Multiplayer server: vtables, layout of IComponent/ICore/ITimer, calling conventions, and subobject offsets. No dependency on the original C++ libs (robin_hood, glm, nonstd) — only the types sufficient to implement a component’s lifecycle.

Offsets and slots were confirmed via disasm of Console.dll / Console.so and omp-server.exe, not by guessing from the C++ headers.

Supports the two i686 ABIs used by the server:

  • Itanium (Linux GCC) — calling convention extern "C"
  • MSVC (Windows) — calling convention extern "thiscall" for virtual methods, extern "C" (cdecl) for variadic

Modules§

component
IComponent interface from the Open Multiplayer SDK in pure Rust.
component_api
High-level API for Open Multiplayer server components.
core
Bindings for the ILogger interface of ICore (Open Multiplayer).
events
Pawn script events via IEventDispatcher<PawnEventHandler>.
extensions
Reading the extension map an IExtensible carries.
players
Player events straight from the Open Multiplayer server.
server
Vtables for objects managed by the Open Multiplayer server.
timers
Bindings for the Open Multiplayer ITimersComponent interface.
types
Primitive types for the Open Multiplayer ABI: UID, SemanticVersion, StringView, Colour, Vector{2,3,4}, ComponentType.
vehicles
The Open Multiplayer vehicle component.
vtable
Helpers for accessing vtables (primary and secondary) of server-owned C++ objects.
world
World entities: objects and pickups.

Structs§

Colour
RGBA color.
GangZonePos
The rectangle a gang zone covers, as GangZonePos declares it.
IActor
Opaque handle for IActor*.
IActorsComponent
Opaque handle for IActorsComponent*.
IClass
Opaque handle for IClass*.
IClassesComponent
Opaque handle for IClassesComponent*.
IComponentList
IComponentList* — list of loaded components. Received in on_init; use to query other components.
IComponentVTable
Primary IComponent vtable for the MSVC ABI (Windows).
ICore
ICore* — opaque pointer to the Open Multiplayer server core. Received in on_load; use only for caching or future queries.
IEarlyConfig
IEarlyConfig* — configuration during initialization.
IEventDispatcherPawn
Opaque handle for the server’s IEventDispatcher<PawnEventHandler>*.
IGangZone
Opaque handle for IGangZone*.
IGangZonesComponent
Opaque handle for IGangZonesComponent*.
ILogger
ILogger* — server logging interface.
IMenu
Opaque handle for IMenu*.
IMenusComponent
Opaque handle for IMenusComponent*.
IObject
Opaque handles for the objects a shot can hit, beyond the vehicle the vehicles module already defines.
IObjectsComponent
Opaque handle for IObjectsComponent*.
IPawnScript
Opaque handle for the server’s IPawnScript*.
IPickup
Opaque handle for IPickup*.
IPickupsComponent
Opaque handle for IPickupsComponent*.
IPlayer
Opaque handle for the server’s IPlayer*, as received by a handler.
IPlayerChangeDispatcher
Opaque handle for IEventDispatcher<PlayerChangeEventHandler>*.
IPlayerCheckDispatcher
Opaque handle for IEventDispatcher<PlayerCheckEventHandler>*.
IPlayerClickDispatcher
Opaque handle for IEventDispatcher<PlayerClickEventHandler>*.
IPlayerConnectDispatcher
Opaque handle for IEventDispatcher<PlayerConnectEventHandler>*.
IPlayerDamageDispatcher
Opaque handle for IEventDispatcher<PlayerDamageEventHandler>*.
IPlayerObject
See IObject.
IPlayerPool
Opaque handle for the server’s IPlayerPool*.
IPlayerShotDispatcher
Opaque handle for IEventDispatcher<PlayerShotEventHandler>*.
IPlayerSpawnDispatcher
Opaque handle for IEventDispatcher<PlayerSpawnEventHandler>*.
IPlayerStreamDispatcher
Opaque handle for IEventDispatcher<PlayerStreamEventHandler>*.
IPlayerTextDispatcher
Opaque handle for IEventDispatcher<PlayerTextEventHandler>*.
IPlayerUpdateDispatcher
Opaque handle for IEventDispatcher<PlayerUpdateEventHandler>*.
ITextDraw
Opaque handle for ITextDraw*.
ITextDrawsComponent
Opaque handle for ITextDrawsComponent*.
ITextLabel
Opaque handle for ITextLabel*.
ITextLabelsComponent
Opaque handle for ITextLabelsComponent*.
ITimer
Opaque pointer to the server’s ITimer — returned by create_timer.
ITimersComponent
Opaque pointer to the server’s ITimersComponent.
IUIDProviderVTable
Secondary IUIDProvider vtable for the MSVC ABI (Windows).
IVehicle
Opaque handle for the server’s IVehicle*.
IVehicleDispatcher
Opaque handle for IEventDispatcher<VehicleEventHandler>*.
IVehiclesComponent
Opaque handle for the server’s IVehiclesComponent*.
OmpComponent
PawnComponent
Typed wrapper for the Open Multiplayer server’s IPawnComponent.
PawnEventHandler
Rust object compatible with Open Multiplayer’s PawnEventHandler*.
PawnEventHandlerVTable
PawnEventHandler vtable for the MSVC ABI (Windows).
PlayerBulletData
PlayerBulletData, passed by const reference — opaque here, since reading it means pinning another layout.
PlayerChangeHandler
Object the server calls through PlayerChangeHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerChangeHandlerVTable
PlayerChangeEventHandler. PlayerState and the key masks arrive as plain integers.
PlayerCheckHandler
Object the server calls through PlayerCheckHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerCheckHandlerVTable
PlayerCheckEventHandler — the reply to a client check request.
PlayerClickHandler
Object the server calls through PlayerClickHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerClickHandlerVTable
PlayerClickEventHandler. Vector3 is passed by value, as the header declares it.
PlayerConnectHandler
Object the server calls on player connection events.
PlayerConnectHandlerVTable
PlayerConnectEventHandler vtable — MSVC ABI (this in ECX).
PlayerDamageHandler
Object the server calls through PlayerDamageHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerDamageHandlerVTable
PlayerDamageEventHandler. killer is null when nobody killed the player, and part is a BodyPart value.
PlayerShotHandler
Object the server calls through PlayerShotHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerShotHandlerVTable
PlayerShotEventHandler — returning false rejects the shot. bullet_data points at a PlayerBulletData the server owns.
PlayerSpawnHandler
Object the server calls through PlayerSpawnHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerSpawnHandlerVTable
PlayerSpawnEventHandler — onPlayerRequestSpawn returning false denies the spawn.
PlayerStreamHandler
Object the server calls through PlayerStreamHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerStreamHandlerVTable
PlayerStreamEventHandler — a player entering or leaving another’s stream radius.
PlayerTextHandler
Object the server calls through PlayerTextHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerTextHandlerVTable
PlayerTextEventHandler — onPlayerText returning false blocks the message; onPlayerCommandText returning true marks the command as handled.
PlayerUpdateHandler
Object the server calls through PlayerUpdateHandlerVTable. Layout: vtable pointer at offset 0, like any C++ object with virtuals. The server keeps the pointer, so it must outlive the registration.
PlayerUpdateHandlerVTable
PlayerUpdateEventHandler — fires for every player on every server tick, so keep the body short. Returning false drops the update.
PoolBounds
The range of ids a pool can hand out, as IReadOnlyPool<T>::bounds() reports it: inclusive on both ends.
SemanticVersion
Semantic version major.minor.patch with pre-release support.
ServerComponentList
Opaque handle for the server’s IComponentList*.
ServerPawnComponent
Opaque handle for the server’s IPawnComponent*.
StringView
Non-owning string — (pointer, length) pair, no \0 terminator.
TimerHandlerVTable
TimerTimeOutHandler vtable — MSVC ABI (this in ECX).
TimerTimeOutHandler
Object the server will invoke on each timer timeout.
TimersComponent
Typed wrapper for the Open Multiplayer server’s ITimersComponent.
Vector2
2D vector.
Vector3
3D vector — used for world positions in SA-MP/Open Multiplayer.
Vector4
4D vector.
VehicleHandler
Object the server calls on vehicle events. The *mut u8 arguments are IPlayer*; casting them to super::players::IPlayer is the caller’s call, and keeps this module from depending on the player one.
VehicleHandlerVTable
VehicleEventHandler vtable — MSVC ABI (this in ECX).
WeaponSlot
One weapon slot of a spawn class (WeaponSlotData).

Enums§

ComponentType
Component type.
DisconnectReason
Why the server dropped a player (PeerDisconnectReason in network.hpp).
LogLevel
Open Multiplayer log level (corresponds to LogLevel in core.hpp).

Constants§

ACTORS_COMPONENT_UID
UID of the Open Multiplayer Actors component.
CLASSES_COMPONENT_UID
UID of the Open Multiplayer Classes component.
GANGZONES_COMPONENT_UID
UID of the Open Multiplayer GangZones component.
MAX_WEAPON_SLOTS
How many weapon slots a spawn class carries (MAX_WEAPON_SLOTS).
MENUS_COMPONENT_UID
UID of the Open Multiplayer Menus component.
OBJECTS_COMPONENT_UID
UID of the Open Multiplayer Objects component.
PAWN_COMPONENT_UID
UID of the Open Multiplayer Pawn component (PawnComponent_UID in the SDK).
PICKUPS_COMPONENT_UID
UID of the Open Multiplayer Pickups component.
TEXTDRAWS_COMPONENT_UID
UID of the Open Multiplayer TextDraws component.
TEXTLABELS_COMPONENT_UID
UID of the Open Multiplayer TextLabels component.
TIMERS_COMPONENT_UID
UID of the Open Multiplayer Timers component.
VEHICLES_COMPONENT_UID
UID of the Open Multiplayer Vehicles component.

Traits§

OmpComponentHandle
Trait implemented by typed wrappers for Open Multiplayer components.

Functions§

add_pawn_event_handler⚠
Registers a Pawn event handler in the dispatcher.
add_player_change_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_check_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_click_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_connect_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_damage_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_shot_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_spawn_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_stream_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_text_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_player_update_handler⚠
Registers handler on the dispatcher (addEventHandler, slot [0]).
add_vehicle_handler⚠
Registers handler on the vehicle dispatcher (addEventHandler, slot [0]).
all_players⚠
Every player currently in the pool.
as_actors_component⚠
Casts a component handle obtained by UID into the actors component.
as_classes_component⚠
Casts a component handle obtained by UID into the classes component.
as_gangzones_component⚠
Casts a component handle obtained by UID into the gang zones component.
as_menus_component⚠
Casts a component handle obtained by UID into the menus component.
as_objects_component⚠
Casts a component handle obtained by UID into the objects component.
as_pickups_component⚠
Casts a component handle obtained by UID into the pickups component.
as_textdraws_component⚠
Casts a component handle obtained by UID into the text draws component.
as_textlabels_component⚠
Casts a component handle obtained by UID into the text labels component.
as_vehicles_component⚠
Casts a component handle obtained by UID into the vehicles component.
component_name
Reads the component name by calling componentName() ([SLOT_COMPONENT_NAME] of the IComponent vtable).
component_version
Reads the component version by calling componentVersion() ([SLOT_COMPONENT_VERSION] of the IComponent vtable).
core_log_ln⚠
ICore::logLn(level, message) — writes a line with a log level.
core_log_ln_u8⚠
ICore::logLnU8(level, message) — UTF-8 variant of logLn.
core_print_ln⚠
ICore::printLn(message) — writes a line to the server log.
core_print_ln_u8⚠
ICore::printLnU8(message) — UTF-8 variant of printLn.
create_actor⚠
IActorsComponent::create(skin, pos, angle) — a static NPC-looking actor.
create_class⚠
IClassesComponent::create(skin, team, spawn, angle, weapons) — a spawn class, what AddPlayerClass creates on the script side.
create_gangzone⚠
IGangZonesComponent::create(pos).
create_menu⚠
IMenusComponent::create(title, position, columns, col1Width, col2Width).
create_object⚠
IObjectsComponent::create(modelID, position, rotation, drawDistance).
create_pickup⚠
IPickupsComponent::create(modelId, type, pos, virtualWorld, isStatic).
create_repeating_timer⚠
Creates a repeating timer on the Open Multiplayer server.
create_textdraw⚠
ITextDrawsComponent::create(position, text) — a global text draw.
create_textlabel⚠
ITextLabelsComponent::create(text, colour, pos, drawDist, vw, los) — a label everyone sees.
create_vehicle⚠
IVehiclesComponent::create(...) — spawns a vehicle.
entity_id⚠
IEntity::getID() for any entity that carries the subobject — an object, a pickup, a vehicle or a player.
extension⚠
The IExtension* registered under uid, or null.
get_amx_from_script⚠
Extracts the AMX* pointer from an IPawnScript*.
get_amx_functions⚠
Gets the pointer to the AMX function table from the IPawnComponent.
get_pawn_event_dispatcher⚠
Gets the Pawn event dispatcher from the IPawnComponent.
kill_timer⚠
Kills an active timer, stopping future fires.
player_armour⚠
IPlayer::getArmour().
player_by_id⚠
IReadOnlyPool<IPlayer>::get(int) — the player with that id, or null.
player_change_dispatcher⚠
The pool’s dispatcher for this event group.
player_check_dispatcher⚠
The pool’s dispatcher for this event group.
player_click_dispatcher⚠
The pool’s dispatcher for this event group.
player_connect_dispatcher⚠
IPlayerPool::getPlayerConnectDispatcher().
player_damage_dispatcher⚠
The pool’s dispatcher for this event group.
player_extension⚠
IExtensible::getExtension(UID) on a player.
player_give_money⚠
IPlayer::giveMoney(int) — adds to what the player already has.
player_health⚠
IPlayer::getHealth().
player_id⚠
IEntity::getID() — the id Pawn scripts know this player by.
player_interior⚠
IPlayer::getInterior().
player_is_bot⚠
IPlayer::isBot() — whether this “player” is an NPC.
player_kick⚠
Calls IPlayer::kick() — drops the player from the server.
player_money⚠
IPlayer::getMoney().
player_name⚠
IPlayer::getName() — the player’s name, copied into a String.
player_pool⚠
ICore::getPlayers() — the server’s player pool.
player_position⚠
IEntity::getPosition() — where the player is.
player_score⚠
IPlayer::getScore().
player_send_message⚠
IPlayer::sendClientMessage(const Colour&, StringView) — a chat line for this player only.
player_set_armour⚠
IPlayer::setArmour(float).
player_set_controllable⚠
IPlayer::setControllable(bool) — false freezes the player.
player_set_drunk_level⚠
IPlayer::setDrunkLevel(int).
player_set_health⚠
IPlayer::setHealth(float).
player_set_interior⚠
IPlayer::setInterior(unsigned).
player_set_money⚠
IPlayer::setMoney(int).
player_set_position⚠
IEntity::setPosition(Vector3) — teleports the player.
player_set_score⚠
IPlayer::setScore(int).
player_set_skin⚠
IPlayer::setSkin(int, bool) — send asks the server to tell the other players about the change, which is what a script normally wants.
player_set_team⚠
IPlayer::setTeam(int).
player_set_virtual_world⚠
IEntity::setVirtualWorld(int).
player_set_wanted_level⚠
IPlayer::setWantedLevel(unsigned) — zero to six, as the game shows.
player_set_weather⚠
IPlayer::setWeather(int) — for this player alone.
player_shot_dispatcher⚠
The pool’s dispatcher for this event group.
player_skin⚠
IPlayer::getSkin().
player_spawn_dispatcher⚠
The pool’s dispatcher for this event group.
player_stream_dispatcher⚠
The pool’s dispatcher for this event group.
player_team⚠
IPlayer::getTeam().
player_text_dispatcher⚠
The pool’s dispatcher for this event group.
player_update_dispatcher⚠
The pool’s dispatcher for this event group.
player_virtual_world⚠
IEntity::getVirtualWorld().
player_wanted_level⚠
IPlayer::getWantedLevel().
pool_bounds⚠
IReadOnlyPool<T>::bounds() for any pool, given the offset of its subobject.
query_component⚠
Queries a component by UID in the list provided by the server.
query_timers_component⚠
Queries ITimersComponent in the server’s component list.
remove_pawn_event_handler⚠
Removes a Pawn event handler from the dispatcher.
vehicle_by_id⚠
IReadOnlyPool<IVehicle>::get(int) — the vehicle with that id, or null.
vehicle_event_dispatcher⚠
IVehiclesComponent::getEventDispatcher().
vehicle_health⚠
IVehicle::getHealth().
vehicle_id⚠
IEntity::getID() for a vehicle — the id Pawn scripts use.
vehicle_model⚠
IVehicle::getModel().
vehicle_position⚠
IEntity::getPosition() for a vehicle.
vehicle_set_colour⚠
IVehicle::setColour(int, int).
vehicle_set_health⚠
IVehicle::setHealth(float).

Type Aliases§

AmxFunctionTable
Table of 52 AMX function pointers (StaticArray<void*, NUM_AMX_FUNCS>).
PickupType
What a pickup does when a player walks into it (PickupType in pickups.hpp). The values the scripts use are passed straight through, so this is an i32 rather than an enum that would have to track the server’s.
UID
64-bit unique identifier of an Open Multiplayer component.