Fix crashes
This commit is contained in:
@@ -427,7 +427,7 @@ public sealed unsafe class SynthHelper : Window, IDisposable
|
||||
}
|
||||
|
||||
if (ImGui.Button("Open in Macro Editor", new(-1, 0)))
|
||||
Service.Plugin.OpenMacroEditor(CharacterStats!, RecipeData!, new(Service.ClientState.LocalPlayer!.StatusList), Enumerable.Empty<ActionType>(), null);
|
||||
Service.Plugin.OpenMacroEditor(CharacterStats!, RecipeData!, new(Service.ClientState.LocalPlayer!.StatusList), [], null);
|
||||
}
|
||||
|
||||
private void OnStartCrafting(ushort recipeId)
|
||||
|
||||
@@ -18,12 +18,12 @@ public record struct SimulationState
|
||||
public ActionStates ActionStates;
|
||||
|
||||
// https://github.com/ffxiv-teamcraft/simulator/blob/0682dfa76043ff4ccb38832c184d046ceaff0733/src/model/tables.ts#L2
|
||||
private static ReadOnlySpan<int> HQPercentTable => new[] {
|
||||
private static ReadOnlySpan<int> HQPercentTable => [
|
||||
1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
|
||||
9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17,
|
||||
17, 18, 18, 18, 19, 19, 20, 20, 21, 22, 23, 24, 26, 28, 31, 34, 38, 42, 47, 52, 58, 64, 68, 71,
|
||||
74, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 96, 98, 100
|
||||
};
|
||||
];
|
||||
public readonly int HQPercent => HQPercentTable[(int)Math.Clamp((float)Quality / Input.Recipe.MaxQuality * 100, 0, 100)];
|
||||
public readonly int Collectability => Math.Max(Quality / 10, 1);
|
||||
public readonly int MaxCollectability => Math.Max(Input.Recipe.MaxQuality / 10, 1);
|
||||
|
||||
+6
-5
@@ -176,9 +176,8 @@ public sealed class MCTS
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
[SkipLocalsInit]
|
||||
private (Node ExpandedNode, float Score) ExpandAndRollout(Random random, Simulator simulator, Node initialNode)
|
||||
private (Node ExpandedNode, float Score) ExpandAndRollout(Random random, Simulator simulator, Node initialNode, Span<ActionType> actionBuffer)
|
||||
{
|
||||
ref var initialState = ref initialNode.State;
|
||||
// expand once
|
||||
@@ -194,7 +193,7 @@ public sealed class MCTS
|
||||
var currentActions = expandedNode.State.AvailableActions;
|
||||
|
||||
byte actionCount = 0;
|
||||
Span<ActionType> actions = stackalloc ActionType[Math.Min(config.MaxStepCount - currentState.ActionCount, config.MaxRolloutStepCount)];
|
||||
var actions = actionBuffer[..Math.Min(config.MaxStepCount - currentState.ActionCount, config.MaxRolloutStepCount)];
|
||||
while (SimulationNode.GetCompletionState(currentCompletionState, currentActions) == CompletionState.Incomplete &&
|
||||
actionCount < actions.Length)
|
||||
{
|
||||
@@ -260,16 +259,18 @@ public sealed class MCTS
|
||||
return !NodesIncomplete(rootNode, new());
|
||||
}
|
||||
|
||||
public void Search(int iterations, ref int progress, CancellationToken token)
|
||||
[SkipLocalsInit]
|
||||
public unsafe void Search(int iterations, ref int progress, CancellationToken token)
|
||||
{
|
||||
var simulator = new Simulator(config.ActionPool, config.MaxStepCount, rootNode.State.State);
|
||||
var random = rootNode.State.State.Input.Random;
|
||||
var staleCounter = 0;
|
||||
var i = 0;
|
||||
Span<ActionType> actionBuffer = stackalloc ActionType[Math.Min(config.MaxStepCount, config.MaxRolloutStepCount)];
|
||||
for (; i < iterations || MaxScore == 0; i++)
|
||||
{
|
||||
var selectedNode = Select();
|
||||
var (endNode, score) = ExpandAndRollout(random, simulator, selectedNode);
|
||||
var (endNode, score) = ExpandAndRollout(random, simulator, selectedNode, actionBuffer);
|
||||
if (MaxScore == 0)
|
||||
{
|
||||
if (endNode == selectedNode)
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ internal sealed class Simulator : SimulatorNoRandom
|
||||
State = state;
|
||||
pool = pool.Where(x => x.Item1.IsPossible(this));
|
||||
}
|
||||
actionPoolObjects = pool.OrderBy(x => x.x).ToArray();
|
||||
actionPoolObjects = [.. pool.OrderBy(x => x.x)];
|
||||
this.maxStepCount = maxStepCount;
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ public readonly record struct SolverConfig
|
||||
}
|
||||
|
||||
public static ActionType[] OptimizeActionPool(IEnumerable<ActionType> actions) =>
|
||||
actions.Order().ToArray();
|
||||
[.. actions.Order()];
|
||||
|
||||
public static readonly ActionType[] DeterministicActionPool = OptimizeActionPool(new[]
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user