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}!");
}
}
}