check for invalid animations I hate animations ignore broken bones from god knows what fix more idiotic mod things fully ignore garbage skeletons that fail to process properly fix my own mistakes fix more bullshit check for filename length and continue idk some cleanup fix spoopy skellingtons change loglevel of tris
171 lines
10 KiB
C#
171 lines
10 KiB
C#
using MareSynchronos.FileCache;
|
|
using MareSynchronos.MareConfiguration;
|
|
using MareSynchronos.MareConfiguration.Models;
|
|
using MareSynchronos.PlayerData.Pairs;
|
|
using MareSynchronos.PlayerData.Services;
|
|
using MareSynchronos.Services;
|
|
using MareSynchronos.Services.Mediator;
|
|
using MareSynchronos.Services.ServerConfiguration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Reflection;
|
|
|
|
namespace MareSynchronos;
|
|
|
|
#pragma warning disable S125 // Sections of code should not be commented out
|
|
/*
|
|
(..,,...,,,,,+/, ,,.....,,+
|
|
..,,+++/((###%%%&&%%#(+,,.,,,+++,,,,//,,#&@@@@%+.
|
|
...+//////////(/,,,,++,.,(###((//////////,.. .,#@@%/./
|
|
,..+/////////+///,.,. ,&@@@@,,/////////////+,.. ,(##+,.
|
|
,,.+//////////++++++.. ./#%#,+/////////////+,....,/((,..,
|
|
+..////////////+++++++... .../##(,,////////////////++,,,+/(((+,
|
|
+,.+//////////////+++++++,.,,,/(((+.,////////////////////////((((#/,,
|
|
/+.+//////////++++/++++++++++,,...,++///////////////////////////((((##,
|
|
/,.////////+++++++++++++++++++++////////+++//////++/+++++//////////((((#(+,
|
|
/+.+////////+++++++++++++++++++++++++++++++++++++++++++++++++++++/////((((##+
|
|
+,.///////////////+++++++++++++++++++++++++++++++++++++++++++++++++++///((((%/
|
|
/.,/////////////////+++++++++++++++++++++++++++++++++++++++++++++++++++///+/(#+
|
|
+,./////////////////+++++++++++++++++++++++++++++++++++++++++++++++,,+++++///((,
|
|
...////////++/++++++++++++++++++++++++,,++++++++++++++++++++++++++++++++++++//(,,
|
|
..//+,+///++++++++++++++++++,,,,+++,,,,,,,,,,,,++++++++,,+++++++++++++++++++//,,+
|
|
..,++,.++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,++++++++,,,,,,,,,,++++++++++...
|
|
..+++,.+++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++,..,.
|
|
..,++++,,+++++++++++,+,,,,,,,,,,..,+++++++++,,,,,,.....................,//+,+
|
|
....,+++++,.,+++++++++++,,,,,,,,.+///(((((((((((((///////////////////////(((+,,,
|
|
.....,++++++++++..,+++++++++++,,.,,,.////////(((((((((((((((////////////////////+,,/
|
|
.....,++++++++++++,..,,+++++++++,,.,../////////////////((((((((((//////////////////,,+
|
|
...,,+++++++++++++,.,,.,,,+++++++++,.,/////////////////(((//++++++++++++++//+++++++++/,,
|
|
....,++++++++++++++,.,++.,++++++++++++.,+////////////////////+++++++++++++++++++++++++///,,..
|
|
...,++++++++++++++++..+++..+++++++++++++.,//////////////////////////++++++++++++///////++++......
|
|
...++++++++++++++++++..++++.,++,++++++++++.+///////////////////////////////////////////++++++..,,,..
|
|
...+++++++++++++++++++..+++++..,+,,+++++++++.+//////////////////////////////////////////+++++++...,,,,..
|
|
..++++++++++++++++++++..++++++..,+,,+++++++++.+//////////////////////////////////////++++++++++,....,,,,..
|
|
...+++//(//////+++++++++..++++++,.,+++++++++++++,..,....,,,+++///////////////////////++++++++++++..,,,,,,,,...
|
|
..,++/(((((//////+++++++,.,++++++,,.,,,+++++++++++++++++++++++,.++////////////////////+++++++++++.....,,,,,,,...
|
|
..,//#(((((///////+++++++..++++++++++,...,++,++++++++++++++++,...+++/////////////////////+,,,+++... ....,,,,,,...
|
|
...+//(((((//////////++++++..+++++++++++++++,......,,,,++++++,,,..+++////////////////////////+,.... ...,,,,,,,...
|
|
..,//((((////////////++++++..++++++/+++++++++++++,,...,,........,+/+//////////////////////((((/+,.. ....,.,,,,..
|
|
...+/////////////////////+++..++++++/+///+++++++++++++++++++++///+/+////////////////////////(((((/+... .......,,...
|
|
..++////+++//////////////++++.+++++++++///////++++++++////////////////////////////////////+++/(((((/+.. .....,,...
|
|
.,++++++++///////////////++++..++++//////////////////////////////////////////////////////++++++/((((++.. ........
|
|
.+++++++++////////////////++++,.+++/////////////////////////////////////////////////////+++++++++/((/++..
|
|
.,++++++++//////////////////++++,.+++//////////////////////////////////////////////////+++++++++++++//+++..
|
|
.++++++++//////////////////////+/,.,+++////((((////////////////////////////////////////++++++++++++++++++...
|
|
.++++++++///////////////////////+++..++++//((((((((///////////////////////////////////++++++++++++++++++++ .
|
|
.++++++///////////////////////////++,.,+++++/(((((((((/////////////////////////////+++++++++++++++++++++++,..
|
|
.++++++////////////////////////////+++,.,+++++++/((((((((//////////////////////////++++++++++++++++++++++++..
|
|
.+++++++///////////////////++////////++++,.,+++++++++///////////+////////////////+++++++++++++++++++++++++,..
|
|
..++++++++++//////////////////////+++++++..+...,+++++++++++++++/++++++++++++++++++++++++++++++++++++++++++,...
|
|
..++++++++++++///////////////+++++++,...,,,,,.,....,,,,+++++++++++++++++++++++++++++++++++++++++++++++,,,,...
|
|
...++++++++++++++++++++++++++,,,,...,,,,,,,,,..,,++,,,.,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++,,,,,,,,..
|
|
...+++++++++++++++,,,,,,,,....,,,,,,,,,,,,,,,..,,++++++,,,,,,,,,,,,,,,,+++++++++++++++++++++++++,,,,,,,,,..
|
|
...++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...,++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,...
|
|
,....,++++++++++++++,,,+++++++,,,,,,,,,,,,,,,,,.,++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,..
|
|
|
|
*/
|
|
#pragma warning restore S125 // Sections of code should not be commented out
|
|
|
|
public class MarePlugin : MediatorSubscriberBase, IHostedService
|
|
{
|
|
private readonly DalamudUtilService _dalamudUtil;
|
|
private readonly MareConfigService _mareConfigService;
|
|
private readonly ServerConfigurationManager _serverConfigurationManager;
|
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
|
private IServiceScope? _runtimeServiceScope;
|
|
private Task? _launchTask = null;
|
|
|
|
public MarePlugin(ILogger<MarePlugin> logger, MareConfigService mareConfigService,
|
|
ServerConfigurationManager serverConfigurationManager,
|
|
DalamudUtilService dalamudUtil,
|
|
IServiceScopeFactory serviceScopeFactory, MareMediator mediator) : base(logger, mediator)
|
|
{
|
|
_mareConfigService = mareConfigService;
|
|
_serverConfigurationManager = serverConfigurationManager;
|
|
_dalamudUtil = dalamudUtil;
|
|
_serviceScopeFactory = serviceScopeFactory;
|
|
}
|
|
|
|
public Task StartAsync(CancellationToken cancellationToken)
|
|
{
|
|
var version = Assembly.GetExecutingAssembly().GetName().Version!;
|
|
Logger.LogInformation("Launching {name} {major}.{minor}.{build}-lop{rev}", "Loporrit Sync", version.Major, version.Minor, version.Build, version.Revision);
|
|
Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(MarePlugin), Services.Events.EventSeverity.Informational,
|
|
$"Starting Loporrit Sync {version.Major}.{version.Minor}.{version.Build}-lop{version.Revision}")));
|
|
|
|
Mediator.Subscribe<SwitchToMainUiMessage>(this, (msg) => { if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager); });
|
|
Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
|
Mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
|
|
|
Mediator.StartQueueProcessing();
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken)
|
|
{
|
|
UnsubscribeAll();
|
|
|
|
DalamudUtilOnLogOut();
|
|
|
|
Logger.LogDebug("Halting MarePlugin");
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private void DalamudUtilOnLogIn()
|
|
{
|
|
Logger?.LogDebug("Client login");
|
|
if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager);
|
|
}
|
|
|
|
private void DalamudUtilOnLogOut()
|
|
{
|
|
Logger?.LogDebug("Client logout");
|
|
|
|
_runtimeServiceScope?.Dispose();
|
|
}
|
|
|
|
private async Task WaitForPlayerAndLaunchCharacterManager()
|
|
{
|
|
while (!await _dalamudUtil.GetIsPlayerPresentAsync().ConfigureAwait(false))
|
|
{
|
|
await Task.Delay(100).ConfigureAwait(false);
|
|
}
|
|
|
|
try
|
|
{
|
|
Logger?.LogDebug("Launching Managers");
|
|
|
|
_runtimeServiceScope?.Dispose();
|
|
_runtimeServiceScope = _serviceScopeFactory.CreateScope();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<UiService>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<CommandManagerService>();
|
|
if (!_mareConfigService.Current.HasValidSetup() || !_serverConfigurationManager.HasValidConfig())
|
|
{
|
|
Mediator.Publish(new SwitchToIntroUiMessage());
|
|
return;
|
|
}
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<CacheCreationService>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<TransientResourceManager>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<OnlinePlayerManager>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<NotificationService>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<ChatService>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<GuiHookService>();
|
|
|
|
#if !DEBUG
|
|
if (_mareConfigService.Current.LogLevel != LogLevel.Information)
|
|
{
|
|
Mediator.Publish(new NotificationMessage("Abnormal Log Level",
|
|
$"Your log level is set to '{_mareConfigService.Current.LogLevel}' which is not recommended for normal usage. Set it to '{LogLevel.Information}' in \"Loporrit Settings -> Debug\" unless instructed otherwise.",
|
|
NotificationType.Error, TimeSpan.FromSeconds(15000)));
|
|
}
|
|
#endif
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger?.LogCritical(ex, "Error during launch of managers");
|
|
}
|
|
}
|
|
} |