diff options
author | chai <chaifix@163.com> | 2020-12-30 20:59:04 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-12-30 20:59:04 +0800 |
commit | e9ea621b93fbb58d9edfca8375918791637bbd52 (patch) | |
tree | 19ce3b1c1f2d51eda6878c9d0f2c9edc27f13650 /Impostor-dev/src/Impostor.Plugins.Example |
+init
Diffstat (limited to 'Impostor-dev/src/Impostor.Plugins.Example')
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> |