public void Subscribe(string eventName, AsyncEventHandler <PlayerRemoteEventEventArgs> callback) { if (_subscriptions.TryGetValue(eventName, out var eventSubscriptions) == false) { eventSubscriptions = new HashSet <AsyncEventHandler <PlayerRemoteEventEventArgs> >(); if (_subscriptions.TryAdd(eventName, eventSubscriptions) == false) { _plugin.Logger.Error($"Unable to create subscription list for event {eventName}"); return; } NativePlayerRemoteEventDelegate data = (playerPointer, arguments) => OnPlayerRemoteEvent(playerPointer, eventName, arguments); GCHandle.Alloc(data); using (var converter = new StringConverter()) { Rage.Multiplayer.Multiplayer_AddRemoteEventHandler(_plugin.NativeMultiplayer, converter.StringToPointer(eventName), data); } } eventSubscriptions.Add(callback); }
public EventScripting(IEventManager eventManager, ILogger <EventScripting> logger) { _eventManager = eventManager; _logger = logger; _tick = Tick; _entityCreated = EntityCreated; _entityDestroyed = EntityDestroyed; _entityModelChange = EntityModelChange; _playerJoin = PlayerJoin; _playerQuit = PlayerQuit; _playerChat = PlayerChat; _playerDeath = PlayerDeath; _playerReady = PlayerReady; _playerSpawn = PlayerSpawn; _playerDamage = PlayerDamage; _playerCommand = PlayerCommand; _playerWeaponChange = PlayerWeaponChange; _playerRemote = PlayerRemote; _playerStartEnterVehicle = PlayerStartEnterVehicle; _playerEnterVehicle = PlayerEnterVehicle; _playerStartExitVehicle = PlayerStartExitVehicle; _playerExitVehicle = PlayerExitVehicle; _playerEnterColshape = PlayerEnterColshape; _playerExitColshape = PlayerExitColshape; _playerEnterCheckpoint = PlayerEnterCheckpoint; _playerExitCheckpoint = PlayerExitCheckpoint; _playerCreateWaypoint = PlayerCreateWaypoint; _playerReachWaypoint = PlayerReachWaypoint; _playerStreamIn = PlayerStreamIn; _playerStreamOut = PlayerStreamOut; _vehicleDamage = VehicleDamage; _vehicleDeath = VehicleDeath; _vehicleHornToggle = VehicleHornToggle; _vehicleTrailerAttached = VehicleTrailerAttached; _vehicleSirenToggle = VehicleSirenToggle; }
internal static extern void Multiplayer_AddRemoteEventHandler(IntPtr multiplayer, IntPtr eventName, NativePlayerRemoteEventDelegate callback);