Aero LogoAero Docs

Drivers Registry

Interact with server systems safely using Aero's abstract Drivers Registry.

The Central Driver Registry

Aero abstracts core server-side services (like database connections, player listings, and vehicle entities) behind high-level interfaces called Drivers.

All drivers are managed by the DriverRegistry. You can retrieve any active driver at runtime using the singleton instance getter:

using Aero.Drivers.Registry;
using Aero.API.Interfaces;

// Retrieve the database driver
var database = DriverRegistry.Singleton.Get<IDataBaseDriver>();

// Retrieve the player manager driver
var players = DriverRegistry.Singleton.Get<IPlayerDriver>();

Supported Drivers & Interfaces

IDataBaseDriver

Interfaces directly with the popular server resource oxmysql to handle asynchronous queries and commands with connection checking.

Task<T> QueryAsync<T>(string query, object parameters = null);
Task<int> ExecuteAsync(string query, object parameters = null);
void Execute(string query, object parameters = null);

IPlayerDriver

Provides access to player structures, caching active user records, and persisting player data.

Player GetPlayer(int playerId);
IEnumerable<Player> GetAllPlayers();
void SavePlayerData(Player player);

IVehicleDriver

Handles asynchronous vehicle entity spawning, verification, deletion, and property updates.

Task<int> SpawnVehicleAsync(uint modelHash, Vector3 position, float heading);
void DeleteVehicle(int vehicleHandle);
void SetVehicleProperties(int vehicleHandle, dynamic properties);

IObjectDriver

Spawns and monitors static or dynamic network object entities.

int CreateNetworkObject(uint modelHash, Vector3 position, Vector3 rotation);
bool DeleteObject(int entityHandle);
bool DoesObjectExist(int entityHandle);

C# Integration Example

The following example shows how to query database records asynchronously using the database driver and spawn a vehicle for a player:

using System.Threading.Tasks;
using Aero.API.Interfaces;
using Aero.Drivers.Registry;
using CitizenFX.Core;

public class CarDealerService
{
    private readonly IDataBaseDriver _db;
    private readonly IVehicleDriver _vehicles;

    public CarDealerService()
    {
        _db = DriverRegistry.Singleton.Get<IDataBaseDriver>();
        _vehicles = DriverRegistry.Singleton.Get<IVehicleDriver>();
    }

    public async Task PurchaseAndSpawnCar(int playerId, uint carModelHash, Vector3 pos, float heading)
    {
        // 1. Check user bank balance asynchronously
        int balance = await _db.QueryAsync<int>("SELECT bank FROM users WHERE identifier = @Id", new { Id = playerId });

        if (balance >= 5000)
        {
            // 2. Deduct funds
            await _db.ExecuteAsync("UPDATE users SET bank = bank - 5000 WHERE identifier = @Id", new { Id = playerId });

            // 3. Spawn the vehicle entity
            int vehicleHandle = await _vehicles.SpawnVehicleAsync(carModelHash, pos, heading);
            
            // 4. Set custom plates
            _vehicles.SetVehicleProperties(vehicleHandle, new { Plate = "AERO1" });
            
            Log.Success($"Vehicle spawned successfully for player {playerId}!");
        }
    }
}