mirror of
https://github.com/gwdevhub/Daybreak.git
synced 2026-07-15 15:19:57 +00:00
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
using Daybreak.API.Interop;
|
||||
using Daybreak.API.Interop.GuildWars;
|
||||
using Daybreak.API.Models;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
|
||||
using System.Core.Extensions;
|
||||
using System.Extensions.Core;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace Daybreak.API.Services;
|
||||
|
||||
public sealed class MainPlayerService : IDisposable
|
||||
{
|
||||
private readonly ChatService chatService;
|
||||
private readonly InstanceContextService instanceContextService;
|
||||
private readonly IBuildTemplateManager buildTemplateManager;
|
||||
private readonly SkillbarContextService skillbarContextService;
|
||||
@@ -39,6 +40,7 @@ public sealed class MainPlayerService : IDisposable
|
||||
private DateTimeOffset lastFrequencyUpdate = DateTimeOffset.MinValue;
|
||||
|
||||
public MainPlayerService(
|
||||
ChatService chatService,
|
||||
InstanceContextService instanceContextService,
|
||||
IBuildTemplateManager buildTemplateManager,
|
||||
SkillbarContextService skillbarContextService,
|
||||
@@ -47,6 +49,7 @@ public sealed class MainPlayerService : IDisposable
|
||||
GameThreadService gameThreadService,
|
||||
ILogger<MainPlayerService> logger)
|
||||
{
|
||||
this.chatService = chatService.ThrowIfNull();
|
||||
this.instanceContextService = instanceContextService.ThrowIfNull();
|
||||
this.buildTemplateManager = buildTemplateManager.ThrowIfNull();
|
||||
this.skillbarContextService = skillbarContextService.ThrowIfNull();
|
||||
@@ -62,17 +65,17 @@ public sealed class MainPlayerService : IDisposable
|
||||
this.callbackRegistration?.Dispose();
|
||||
}
|
||||
|
||||
public Task<bool> SetCurrentBuild(string buildCode, CancellationToken cancellationToken)
|
||||
public async Task<bool> SetCurrentBuild(string buildCode, CancellationToken cancellationToken)
|
||||
{
|
||||
var scopedLogger = this.logger.CreateScopedLogger();
|
||||
if (!this.buildTemplateManager.TryDecodeTemplate(buildCode, out var build) ||
|
||||
build is not SingleBuildEntry singleBuild)
|
||||
{
|
||||
scopedLogger.LogError("Failed to decode build template from code {buildCode}", buildCode);
|
||||
return Task.FromResult(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.gameThreadService.QueueOnGameThread(() =>
|
||||
var result = await this.gameThreadService.QueueOnGameThread(() =>
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
@@ -165,6 +168,17 @@ public sealed class MainPlayerService : IDisposable
|
||||
return true;
|
||||
}
|
||||
}, cancellationToken);
|
||||
|
||||
if (result)
|
||||
{
|
||||
await this.chatService.AddMessageAsync("Build applied successfully.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
await this.chatService.AddMessageAsync("Failed to apply build.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public Task<BuildEntry?> GetCurrentBuild(CancellationToken cancellationToken)
|
||||
|
||||
@@ -9,13 +9,13 @@ using Daybreak.Shared.Services.BuildTemplates;
|
||||
using System.Core.Extensions;
|
||||
using System.Extensions;
|
||||
using System.Extensions.Core;
|
||||
using System.Windows.Controls;
|
||||
using ZLinq;
|
||||
using InstanceType = Daybreak.API.Interop.GuildWars.InstanceType;
|
||||
|
||||
namespace Daybreak.API.Services;
|
||||
|
||||
public sealed class PartyService(
|
||||
ChatService chatService,
|
||||
IBuildTemplateManager buildTemplateManager,
|
||||
UIService uiService,
|
||||
UIContextService uIContextService,
|
||||
@@ -28,6 +28,7 @@ public sealed class PartyService(
|
||||
{
|
||||
private static readonly TimeSpan HeroSpawnDelay = TimeSpan.FromSeconds(1);
|
||||
|
||||
private readonly ChatService chatService = chatService.ThrowIfNull();
|
||||
private readonly IBuildTemplateManager buildTemplateManager = buildTemplateManager.ThrowIfNull();
|
||||
private readonly UIService uiService = uiService.ThrowIfNull();
|
||||
private readonly UIContextService uIContextService = uIContextService.ThrowIfNull();
|
||||
@@ -45,18 +46,21 @@ public sealed class PartyService(
|
||||
if (!await this.IsInValidOutpost(cancellationToken))
|
||||
{
|
||||
scopedLogger.LogError("Could not set party loadout. Not in a valid outpost");
|
||||
await this.chatService.AddMessageAsync("Cannot set party loadout. Not in a valid outpost.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!await this.KickAllHeroes(cancellationToken))
|
||||
{
|
||||
scopedLogger.LogError("Could not set party loadout. Could not leave party");
|
||||
await this.chatService.AddMessageAsync("Cannot set party loadout. Could not leave party.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!await this.gameThreadService.QueueOnGameThread(() => this.SpawnHeroes(partyLoadout), cancellationToken))
|
||||
{
|
||||
scopedLogger.LogError("Could not set party loadout. Could not spawn heroes");
|
||||
await this.chatService.AddMessageAsync("Cannot set party loadout. Could not spawn heroes.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -65,6 +69,7 @@ public sealed class PartyService(
|
||||
if (!await this.gameThreadService.QueueOnGameThread(() => this.ApplyBuilds(partyLoadout), cancellationToken))
|
||||
{
|
||||
scopedLogger.LogError("Could not set party loadout. Could not apply builds");
|
||||
await this.chatService.AddMessageAsync("Cannot set party loadout. Could not apply builds.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -75,9 +80,11 @@ public sealed class PartyService(
|
||||
// if (!await this.SetHeroBehavior(heroBehaviorEntry.AgentId, heroBehaviorEntry.Behavior, cancellationToken))
|
||||
// {
|
||||
// scopedLogger.LogWarning("Could not set hero behavior for agent {agentId} to {behavior}", heroBehaviorEntry.AgentId, heroBehaviorEntry.Behavior);
|
||||
// await this.chatService.AddMessageAsync($"Cannot set party loadout. Could not set behavior {behavior} for agent {agentId}.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
// }
|
||||
//}
|
||||
|
||||
await this.chatService.AddMessageAsync("Party loadout set.", "Daybreak.API", Channel.Moderator, cancellationToken);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user