66 lines
2.4 KiB
C#
66 lines
2.4 KiB
C#
using Microsoft.Extensions.Options;
|
|
using NeonSprawl.Server.Game.Encounters;
|
|
using NeonSprawl.Server.Game.Npc;
|
|
using NeonSprawl.Server.Game.PositionState;
|
|
|
|
namespace NeonSprawl.Server.Game.Combat;
|
|
|
|
/// <summary>Dev-only route to reset prototype combat dummy HP for Bruno and manual QA (NEO-83).</summary>
|
|
public static class CombatTargetFixtureApi
|
|
{
|
|
public static WebApplication MapCombatTargetFixtureApi(this WebApplication app)
|
|
{
|
|
app.MapPost(
|
|
"/game/__dev/combat-targets-fixture",
|
|
(
|
|
CombatTargetFixtureRequest? body,
|
|
ICombatEntityHealthStore healthStore,
|
|
IThreatStateStore threatStore,
|
|
INpcRuntimeStateStore runtimeStore,
|
|
IPlayerCombatHealthStore playerHealthStore,
|
|
IEncounterDefinitionRegistry encounterRegistry,
|
|
IEncounterProgressStore encounterProgressStore,
|
|
IEncounterCompletionStore encounterCompletionStore,
|
|
IEncounterCompleteEventStore encounterCompleteEventStore,
|
|
IOptions<GamePositionOptions> gameOptions) =>
|
|
{
|
|
if (body is null || body.SchemaVersion != CombatTargetFixtureRequest.CurrentSchemaVersion)
|
|
{
|
|
return Results.BadRequest();
|
|
}
|
|
|
|
foreach (var id in PrototypeNpcRegistry.GetInstanceIdsInOrder())
|
|
{
|
|
if (!healthStore.TryResetToFull(id, out _))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
}
|
|
|
|
AggroOperations.ClearAllPrototypeHolders(threatStore);
|
|
NpcRuntimeOperations.ResetAllPrototypeRows(runtimeStore);
|
|
|
|
var devPlayerId = gameOptions.Value.DevPlayerId;
|
|
if (!playerHealthStore.TryResetToFull(devPlayerId, out _))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
|
|
EncounterDevFixtureOperations.ClearPlayerEncounterState(
|
|
devPlayerId,
|
|
encounterRegistry,
|
|
encounterProgressStore,
|
|
encounterCompletionStore,
|
|
encounterCompleteEventStore);
|
|
|
|
return Results.Json(
|
|
new CombatTargetFixtureResponse
|
|
{
|
|
Applied = true,
|
|
});
|
|
});
|
|
|
|
return app;
|
|
}
|
|
}
|