server-master/srcs/_plugins/Plugin.Act4/Act4PluginCore.cs
2026-02-10 18:21:30 +01:00

66 lines
No EOL
2.4 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using PhoenixLib.Configuration;
using PhoenixLib.Events;
using PhoenixLib.Logging;
using Plugin.Act4.RecurrentJob;
using Plugin.Act4.Scripting.Validator;
using WingsAPI.Communication.ServerApi.Protocol;
using WingsAPI.Plugins;
using WingsAPI.Scripting;
using WingsAPI.Scripting.LUA;
using WingsAPI.Scripting.ScriptManager;
using WingsEmu.Game.Act4;
using WingsEmu.Game.Act4.Configuration;
using WingsEmu.Game.Managers;
namespace Plugin.Act4;
public class Act4PluginCore : IGameServerPlugin
{
public string Name => nameof(Act4PluginCore);
public void AddDependencies(IServiceCollection services, GameServerLoader gameServer)
{
// TODO: Plz, when we have warmup we should move those "AddSingleton" down, so it only gets loaded when necessary
// Dungeon Script Cache
services.AddSingleton<SDungeonValidator>();
services.AddSingleton<IDungeonScriptManager, DungeonScriptManager>();
services.AddSingleton<IDungeonManager, DungeonManager>();
services.AddFileConfiguration<Act4DungeonsConfiguration>();
services.AddSingleton<IAct4FlagManager, Act4FlagManager>();
// TODO: Remove building twice the ServiceProvider when we have another method to obtain server's type
if (gameServer.Type != GameChannelType.ACT_4)
{
Log.Debug("Not loading Act4 plugin because this is not an Act4 channel.");
return;
}
services.AddEventHandlersInAssembly<Act4PluginCore>();
services.AddFileConfiguration<Act4Configuration>();
services.AddSingleton<IAct4Manager, Act4Manager>();
services.AddHostedService<Act4System>();
services.AddSingleton<IAct4DungeonManager, Act4DungeonManager>();
services.AddHostedService<Act4DungeonSystem>();
services.TryAddSingleton(x =>
{
IConfigurationPathProvider config = x.GetRequiredService<IConfigurationPathProvider>();
return new ScriptFactoryConfiguration
{
RootDirectory = config.GetConfigurationPath("scripts"),
LibDirectory = config.GetConfigurationPath("scripts/lib")
};
});
// script factory
services.TryAddSingleton<IScriptFactory, LuaScriptFactory>();
// factory
services.AddSingleton<IDungeonFactory, DungeonFactory>();
}
}