summaryrefslogtreecommitdiff
path: root/Impostor-dev/src/Impostor.Plugins.Example
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-12-30 20:59:04 +0800
committerchai <chaifix@163.com>2020-12-30 20:59:04 +0800
commite9ea621b93fbb58d9edfca8375918791637bbd52 (patch)
tree19ce3b1c1f2d51eda6878c9d0f2c9edc27f13650 /Impostor-dev/src/Impostor.Plugins.Example
+init
Diffstat (limited to 'Impostor-dev/src/Impostor.Plugins.Example')
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/ExamplePlugin.cs33
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/ExamplePluginStartup.cs22
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs64
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs21
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs100
-rw-r--r--Impostor-dev/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj11
6 files changed, 251 insertions, 0 deletions
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/ExamplePlugin.cs b/Impostor-dev/src/Impostor.Plugins.Example/ExamplePlugin.cs
new file mode 100644
index 0000000..dafba7c
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/ExamplePlugin.cs
@@ -0,0 +1,33 @@
+using System.Threading.Tasks;
+using Impostor.Api.Plugins;
+using Microsoft.Extensions.Logging;
+
+namespace Impostor.Plugins.Example
+{
+ [ImpostorPlugin(
+ package: "gg.impostor.example",
+ name: "Example",
+ author: "AeonLucid",
+ version: "1.0.0")]
+ public class ExamplePlugin : PluginBase
+ {
+ private readonly ILogger<ExamplePlugin> _logger;
+
+ public ExamplePlugin(ILogger<ExamplePlugin> logger)
+ {
+ _logger = logger;
+ }
+
+ public override ValueTask EnableAsync()
+ {
+ _logger.LogInformation("Example is being enabled.");
+ return default;
+ }
+
+ public override ValueTask DisableAsync()
+ {
+ _logger.LogInformation("Example is being disabled.");
+ return default;
+ }
+ }
+}
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/ExamplePluginStartup.cs b/Impostor-dev/src/Impostor.Plugins.Example/ExamplePluginStartup.cs
new file mode 100644
index 0000000..936f15e
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/ExamplePluginStartup.cs
@@ -0,0 +1,22 @@
+using Impostor.Api.Events;
+using Impostor.Api.Plugins;
+using Impostor.Plugins.Example.Handlers;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace Impostor.Plugins.Example
+{
+ public class ExamplePluginStartup : IPluginStartup
+ {
+ public void ConfigureHost(IHostBuilder host)
+ {
+ }
+
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddSingleton<IEventListener, GameEventListener>();
+ services.AddSingleton<IEventListener, PlayerEventListener>();
+ services.AddSingleton<IEventListener, MeetingEventListener>();
+ }
+ }
+}
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs
new file mode 100644
index 0000000..be2d0f3
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs
@@ -0,0 +1,64 @@
+using System;
+using Impostor.Api.Events;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class GameEventListener : IEventListener
+ {
+ [EventListener(EventPriority.Monitor)]
+ public void OnGame(IGameEvent e)
+ {
+ Console.WriteLine(e.GetType().Name + " triggered");
+ }
+
+ [EventListener]
+ public void OnGameCreated(IGameCreatedEvent e)
+ {
+ Console.WriteLine("Game > created");
+ }
+
+ [EventListener]
+ public void OnGameStarting(IGameStartingEvent e)
+ {
+ Console.WriteLine("Game > starting");
+ }
+
+ [EventListener]
+ public void OnGameStarted(IGameStartedEvent e)
+ {
+ Console.WriteLine("Game > started");
+
+ foreach (var player in e.Game.Players)
+ {
+ var info = player.Character.PlayerInfo;
+
+ Console.WriteLine($"- {info.PlayerName} {info.IsImpostor}");
+ }
+ }
+
+ [EventListener]
+ public void OnGameEnded(IGameEndedEvent e)
+ {
+ Console.WriteLine("Game > ended");
+ Console.WriteLine("- Reason: " + e.GameOverReason);
+ }
+
+ [EventListener]
+ public void OnGameDestroyed(IGameDestroyedEvent e)
+ {
+ Console.WriteLine("Game > destroyed");
+ }
+
+ [EventListener]
+ public void OnPlayerJoined(IGamePlayerJoinedEvent e)
+ {
+ Console.WriteLine("Player joined a game.");
+ }
+
+ [EventListener]
+ public void OnPlayerLeftGame(IGamePlayerLeftEvent e)
+ {
+ Console.WriteLine("Player left a game.");
+ }
+ }
+}
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs
new file mode 100644
index 0000000..847532c
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs
@@ -0,0 +1,21 @@
+using System;
+using Impostor.Api.Events;
+using Impostor.Api.Events.Meeting;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class MeetingEventListener : IEventListener
+ {
+ [EventListener]
+ public void OnMeetingStarted(IMeetingStartedEvent e)
+ {
+ Console.WriteLine("Meeting > started");
+ }
+
+ [EventListener]
+ public void OnMeetingEnded(IMeetingEndedEvent e)
+ {
+ Console.WriteLine("Meeting > ended");
+ }
+ }
+}
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs
new file mode 100644
index 0000000..0190d3b
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Numerics;
+using System.Threading.Tasks;
+using Impostor.Api.Events;
+using Impostor.Api.Events.Player;
+using Impostor.Api.Innersloth.Customization;
+using Microsoft.Extensions.Logging;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class PlayerEventListener : IEventListener
+ {
+ private static readonly Random Random = new Random();
+
+ private readonly ILogger<PlayerEventListener> _logger;
+
+ public PlayerEventListener(ILogger<PlayerEventListener> logger)
+ {
+ _logger = logger;
+ }
+
+ [EventListener]
+ public void OnPlayerSpawned(IPlayerSpawnedEvent e)
+ {
+ _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " spawned");
+
+ // Need to make a local copy because it might be possible that
+ // the event gets changed after being handled.
+ var clientPlayer = e.ClientPlayer;
+ var playerControl = e.PlayerControl;
+
+ /*
+ Task.Run(async () =>
+ {
+ Console.WriteLine("Starting player task.");
+
+ // Give the player time to load.
+ await Task.Delay(TimeSpan.FromSeconds(3));
+
+ while (clientPlayer.Client.Connection != null &&
+ clientPlayer.Client.Connection.IsConnected)
+ {
+ // Modify player properties.
+ await playerControl.SetColorAsync((byte) Random.Next(1, 9));
+ await playerControl.SetHatAsync((uint) Random.Next(1, 9));
+ await playerControl.SetSkinAsync((uint) Random.Next(1, 9));
+ await playerControl.SetPetAsync((uint) Random.Next(1, 9));
+
+ await Task.Delay(TimeSpan.FromMilliseconds(5000));
+ }
+
+ _logger.LogDebug("Stopping player task.");
+ });
+ */
+ }
+
+ [EventListener]
+ public void OnPlayerDestroyed(IPlayerDestroyedEvent e)
+ {
+ _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " destroyed");
+ }
+
+ [EventListener]
+ public async ValueTask OnPlayerChat(IPlayerChatEvent e)
+ {
+ _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " said " + e.Message);
+
+ if (e.Message == "test")
+ {
+ e.Game.Options.KillCooldown = 0;
+ e.Game.Options.NumImpostors = 2;
+ e.Game.Options.PlayerSpeedMod = 5;
+
+ await e.Game.SyncSettingsAsync();
+ }
+
+ if (e.Message == "look")
+ {
+ await e.PlayerControl.SetColorAsync(ColorType.Pink);
+ await e.PlayerControl.SetHatAsync(HatType.Cheese);
+ await e.PlayerControl.SetSkinAsync(SkinType.Police);
+ await e.PlayerControl.SetPetAsync(PetType.Ufo);
+ }
+
+ if (e.Message == "snap")
+ {
+ await e.PlayerControl.NetworkTransform.SnapToAsync(new Vector2(1, 1));
+ }
+
+ await e.PlayerControl.SetNameAsync(e.Message);
+ await e.PlayerControl.SendChatAsync(e.Message);
+ }
+
+ [EventListener]
+ public void OnPlayerStartMeetingEvent(IPlayerStartMeetingEvent e)
+ {
+ _logger.LogDebug($"Player {e.PlayerControl.PlayerInfo.PlayerName} start meeting, reason: " + (e.Body==null ? "Emergency call button" : "Found the body of the player "+e.Body.PlayerInfo.PlayerName));
+ }
+ }
+}
diff --git a/Impostor-dev/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj b/Impostor-dev/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj
new file mode 100644
index 0000000..dd4724d
--- /dev/null
+++ b/Impostor-dev/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj
@@ -0,0 +1,11 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>netstandard2.1</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\Impostor.Api\Impostor.Api.csproj" />
+ </ItemGroup>
+
+</Project>