--- /dev/null
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth.Net.Objects;
+
+namespace Impostor.Api.Events.Net
+{
+ public class PlayerDestroyedEvent : IGameEvent
+ {
+ public PlayerDestroyedEvent(IGame game, InnerPlayerControl playerControl)
+ {
+ Game = game;
+ PlayerControl = playerControl;
+ }
+
+ public IGame Game { get; }
+
+ public InnerPlayerControl PlayerControl { get; }
+ }
+}
\ No newline at end of file
--- /dev/null
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth.Net.Objects;
+
+namespace Impostor.Api.Events.Net
+{
+ public class PlayerSpawnedEvent : IGameEvent
+ {
+ public PlayerSpawnedEvent(IGame game, InnerPlayerControl playerControl)
+ {
+ Game = game;
+ PlayerControl = playerControl;
+ }
+
+ public IGame Game { get; }
+
+ public InnerPlayerControl PlayerControl { get; }
+ }
+}
\ No newline at end of file
using System.Threading.Tasks;
+using Impostor.Api.Events.Managers;
using Impostor.Api.Plugins;
+using Impostor.Plugins.Example.Handlers;
using Microsoft.Extensions.Logging;
namespace Impostor.Plugins.Example
{
private readonly ILogger<ExamplePlugin> _logger;
- public ExamplePlugin(ILogger<ExamplePlugin> logger)
+ public ExamplePlugin(ILogger<ExamplePlugin> logger, IEventManager eventManager)
{
_logger = logger;
+
+ eventManager.RegisterListener(new GameEventListener());
+ eventManager.RegisterListener(new PlayerEventListener());
}
public override ValueTask EnableAsync()
{
- _logger.LogInformation("Hooray.");
+ _logger.LogInformation("Example is being enabled.");
return default;
}
public override ValueTask DisableAsync()
{
- _logger.LogInformation("Boooh.");
+ _logger.LogInformation("Example is being disabled.");
return default;
}
}
--- /dev/null
+using System;
+using Impostor.Api.Events;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class GameEventListener : IEventListener
+ {
+ [EventListener]
+ public void OnGameCreated(GameCreatedEvent e)
+ {
+ Console.WriteLine("Game was created.");
+ }
+
+ [EventListener]
+ public void OnGameDestroyed(GameDestroyedEvent e)
+ {
+ Console.WriteLine("Game was destroyed.");
+ }
+
+ [EventListener]
+ public void OnPlayerJoined(PlayerJoinedGameEvent e)
+ {
+ Console.WriteLine("Player joined a game.");
+ }
+
+ [EventListener]
+ public void OnPlayerLeftGame(PlayerLeftGameEvent e)
+ {
+ Console.WriteLine("Player left a game.");
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Impostor.Api.Events;
+using Impostor.Api.Events.Net;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class PlayerEventListener : IEventListener
+ {
+ [EventListener]
+ public void OnPlayerSpawned(PlayerSpawnedEvent e)
+ {
+ Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " spawned");
+ }
+
+ [EventListener]
+ public void OnPlayerDestroyed(PlayerDestroyedEvent e)
+ {
+ Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " destroyed");
+ }
+ }
+}
\ No newline at end of file
using System.Threading;
using System.Threading.Tasks;
using Impostor.Api;
+using Impostor.Api.Events.Net;
using Impostor.Api.Innersloth.Data;
using Impostor.Api.Innersloth.Net;
using Impostor.Api.Innersloth.Net.Objects;
private int _gamedataInitialized;
private bool _gamedataFakeReceived;
- private void OnSpawn(InnerNetObject netObj)
+ private async ValueTask OnSpawnAsync(InnerNetObject netObj)
{
switch (netObj)
{
control.PlayerInfo!.Controller = control;
}
+ await _eventManager.CallAsync(new PlayerSpawnedEvent(this, control));
+
break;
}
}
}
- private void OnDestroy(InnerNetObject netObj)
+ private async ValueTask OnDestroyAsync(InnerNetObject netObj)
{
switch (netObj)
{
player.Character = null;
}
+ await _eventManager.CallAsync(new PlayerDestroyedEvent(this, control));
+
break;
}
}
obj.Deserialize(sender, target, readerSub, true);
}
- OnSpawn(obj);
+ await OnSpawnAsync(obj);
}
continue;
}
RemoveNetObject(obj);
- OnDestroy(obj);
+ await OnDestroyAsync(obj);
_logger.LogDebug("Destroyed InnerNetObject {0} ({1}), OwnerId {2}", obj.GetType().Name, netId, obj.OwnerId);
}
else