mirror of
https://github.com/rafi1212122/BLHX.Server.git
synced 2025-12-12 14:34:39 +01:00
133 lines
4.0 KiB
C#
133 lines
4.0 KiB
C#
using BLHX.Server.Common.Data;
|
|
using BLHX.Server.Common.Utils;
|
|
|
|
namespace BLHX.Server.Game.Commands;
|
|
|
|
[CommandHandler("test", "Test command", "test type=gacha")]
|
|
public class TestCommand : Command
|
|
{
|
|
static readonly string[] RarityStrings = { "Unknown", "Unused", "Normal", "Rare", "Elite", "SSR", "UR" };
|
|
|
|
[Argument("type")]
|
|
public string? Type { get; set; }
|
|
|
|
[Argument("verbose")]
|
|
public string? Verbose { get; set; }
|
|
|
|
[Argument("count")]
|
|
public string? Count { get; set; }
|
|
|
|
[Argument("value")]
|
|
public string? Value { get; set; }
|
|
|
|
public override void Execute(Dictionary<string, string> args)
|
|
{
|
|
base.Execute(args);
|
|
|
|
switch (Type)
|
|
{
|
|
case "gacha":
|
|
TestGacha(Parse(Count, 1000000), Parse(Verbose, false));
|
|
break;
|
|
case "lookup":
|
|
LookupShip(Parse(Value, 1));
|
|
break;
|
|
case "pathfinding":
|
|
TestPathfinding();
|
|
break;
|
|
default:
|
|
Logger.c.Warn("Unknown test type");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void TestGacha(int count, bool verbose)
|
|
{
|
|
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
|
|
var counts = new int[7];
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
int rarity = RNG.NextShipRarity();
|
|
|
|
counts[rarity]++;
|
|
|
|
if (verbose)
|
|
Logger.c.Log($"Roll {i + 1}: {rarity} - {RarityStrings[rarity]}");
|
|
}
|
|
|
|
stopwatch.Stop();
|
|
|
|
Logger.c.Log("----------------------------------------");
|
|
Logger.c.Log($"TOTAL ROLLS: {count}");
|
|
Logger.c.Log($"PROCESSING TIME: {stopwatch.Elapsed}");
|
|
|
|
for (int i = 2; i < counts.Length; i++)
|
|
{
|
|
double percentage = (double)Math.Round(counts[i] / (double)count * 100, 2);
|
|
|
|
Logger.c.Log($"{RarityStrings[i]}: {counts[i]} ({percentage}%)");
|
|
}
|
|
}
|
|
|
|
void LookupShip(int id)
|
|
{
|
|
ShipDataStatistics? ship = Data.ShipDataStatistics.GetValueOrDefault(id);
|
|
|
|
if (ship != null)
|
|
Logger.c.Log($"Ship {id} ({ship.EnglishName}):\n{JSON.Stringify(ship)}");
|
|
else
|
|
Logger.c.Warn($"Ship {id} not found");
|
|
}
|
|
|
|
void TestPathfinding()
|
|
{
|
|
bool verbose = Parse(Verbose, true);
|
|
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
|
|
var grid = Data.ChapterTemplate[103].GridItems;
|
|
(uint startX, uint startY, uint width, uint height) = grid.GetDimensions();
|
|
var path = Pathfinding.AStar(grid, 0, 0, width - 1, height - 1);
|
|
|
|
if (verbose)
|
|
{
|
|
Logger.c.Log("TEST GRID:");
|
|
for (uint x = 0; x < width; x++)
|
|
{
|
|
for (uint y = 0; y < height; y++)
|
|
{
|
|
var gridItem = grid.Find(x, y).Value;
|
|
|
|
if (gridItem.Column >= startX && gridItem.Column <= width &&
|
|
gridItem.Row >= startY && gridItem.Row <= height)
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
else if (x == 0 && y == 0)
|
|
Console.ForegroundColor = ConsoleColor.Cyan;
|
|
else if (x == width - 1 && y == height - 1)
|
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
|
|
Console.Write(grid.Find(x, y).Value.Blocking ? "1" : "0");
|
|
Console.ResetColor();
|
|
}
|
|
|
|
Console.WriteLine();
|
|
}
|
|
}
|
|
|
|
if (path != null)
|
|
{
|
|
Logger.c.Log($"Path found! Length: {path.Count}");
|
|
|
|
if (verbose)
|
|
foreach (var node in path)
|
|
Logger.c.Log(node.ToString());
|
|
}
|
|
else
|
|
Logger.c.Warn("No path found!");
|
|
|
|
stopwatch.Stop();
|
|
|
|
Logger.c.Log("----------------------------------------");
|
|
Logger.c.Log($"PROCESSING TIME: {stopwatch.Elapsed}");
|
|
}
|
|
}
|