Add sub levels
This commit is contained in:
parent
5e51a7f6f1
commit
b6bd9707b7
@ -37,9 +37,9 @@ internal class InfluxStatisticsClient : IDisposable
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
DateTime date = DateTime.UtcNow;
|
DateTime date = DateTime.UtcNow;
|
||||||
IReadOnlyDictionary<Character, Currencies> stats = update.Currencies;
|
IReadOnlyDictionary<Character, Currencies> currencyStats = update.Currencies;
|
||||||
|
|
||||||
var validFcIds = stats.Keys
|
var validFcIds = currencyStats.Keys
|
||||||
.Where(x => x.CharacterType == CharacterType.Character)
|
.Where(x => x.CharacterType == CharacterType.Character)
|
||||||
.Select(x => x.FreeCompanyId)
|
.Select(x => x.FreeCompanyId)
|
||||||
.ToList();
|
.ToList();
|
||||||
@ -48,7 +48,7 @@ internal class InfluxStatisticsClient : IDisposable
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<PointData> values = new();
|
List<PointData> values = new();
|
||||||
foreach (var (character, currencies) in stats)
|
foreach (var (character, currencies) in currencyStats)
|
||||||
{
|
{
|
||||||
if (character.CharacterType == CharacterType.Character)
|
if (character.CharacterType == CharacterType.Character)
|
||||||
{
|
{
|
||||||
@ -64,7 +64,7 @@ internal class InfluxStatisticsClient : IDisposable
|
|||||||
}
|
}
|
||||||
else if (character.CharacterType == CharacterType.Retainer)
|
else if (character.CharacterType == CharacterType.Retainer)
|
||||||
{
|
{
|
||||||
var owner = stats.Keys.First(x => x.CharacterId == character.OwnerId);
|
var owner = currencyStats.Keys.First(x => x.CharacterId == character.OwnerId);
|
||||||
values.Add(PointData.Measurement("currency")
|
values.Add(PointData.Measurement("currency")
|
||||||
.Tag("id", character.CharacterId.ToString())
|
.Tag("id", character.CharacterId.ToString())
|
||||||
.Tag("player_name", owner.Name)
|
.Tag("player_name", owner.Name)
|
||||||
@ -90,6 +90,23 @@ internal class InfluxStatisticsClient : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var (fc, subs) in update.Submarines)
|
||||||
|
{
|
||||||
|
if (validFcIds.Contains(fc.CharacterId))
|
||||||
|
{
|
||||||
|
foreach (var sub in subs)
|
||||||
|
{
|
||||||
|
values.Add(PointData.Measurement("submersibles")
|
||||||
|
.Tag("id", fc.CharacterId.ToString())
|
||||||
|
.Tag("fc_name", fc.Name)
|
||||||
|
.Tag("sub_id", $"{fc.CharacterId}_{sub.Id}")
|
||||||
|
.Tag("sub_name", sub.Name)
|
||||||
|
.Field("level", sub.Level)
|
||||||
|
.Timestamp(date, WritePrecision.S));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var writeApi = _influxClient.GetWriteApiAsync();
|
var writeApi = _influxClient.GetWriteApiAsync();
|
||||||
await writeApi.WritePointsAsync(
|
await writeApi.WritePointsAsync(
|
||||||
values,
|
values,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Dalamud.Game.ClientState;
|
using Dalamud.Game.ClientState;
|
||||||
using Dalamud.Game.Command;
|
using Dalamud.Game.Command;
|
||||||
@ -10,6 +11,7 @@ using Dalamud.Plugin;
|
|||||||
using ECommons;
|
using ECommons;
|
||||||
using Influx.AllaganTools;
|
using Influx.AllaganTools;
|
||||||
using Influx.Influx;
|
using Influx.Influx;
|
||||||
|
using Influx.SubmarineTracker;
|
||||||
using Influx.Windows;
|
using Influx.Windows;
|
||||||
|
|
||||||
namespace Influx;
|
namespace Influx;
|
||||||
@ -24,6 +26,7 @@ public class InfluxPlugin : IDalamudPlugin
|
|||||||
private readonly ClientState _clientState;
|
private readonly ClientState _clientState;
|
||||||
private readonly CommandManager _commandManager;
|
private readonly CommandManager _commandManager;
|
||||||
private readonly AllaganToolsIpc _allaganToolsIpc;
|
private readonly AllaganToolsIpc _allaganToolsIpc;
|
||||||
|
private readonly SubmarineTrackerIpc _submarineTrackerIpc;
|
||||||
private readonly InfluxStatisticsClient _influxStatisticsClient;
|
private readonly InfluxStatisticsClient _influxStatisticsClient;
|
||||||
private readonly WindowSystem _windowSystem;
|
private readonly WindowSystem _windowSystem;
|
||||||
private readonly StatisticsWindow _statisticsWindow;
|
private readonly StatisticsWindow _statisticsWindow;
|
||||||
@ -40,6 +43,7 @@ public class InfluxPlugin : IDalamudPlugin
|
|||||||
_clientState = clientState;
|
_clientState = clientState;
|
||||||
_commandManager = commandManager;
|
_commandManager = commandManager;
|
||||||
_allaganToolsIpc = new AllaganToolsIpc(pluginInterface, chatGui, _configuration);
|
_allaganToolsIpc = new AllaganToolsIpc(pluginInterface, chatGui, _configuration);
|
||||||
|
_submarineTrackerIpc = new SubmarineTrackerIpc(chatGui);
|
||||||
_influxStatisticsClient = new InfluxStatisticsClient(chatGui, _configuration);
|
_influxStatisticsClient = new InfluxStatisticsClient(chatGui, _configuration);
|
||||||
|
|
||||||
_windowSystem = new WindowSystem(typeof(InfluxPlugin).FullName);
|
_windowSystem = new WindowSystem(typeof(InfluxPlugin).FullName);
|
||||||
@ -76,9 +80,12 @@ public class InfluxPlugin : IDalamudPlugin
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var currencies = _allaganToolsIpc.CountCurrencies();
|
||||||
|
var characters = currencies.Keys.ToList();
|
||||||
var update = new StatisticsUpdate
|
var update = new StatisticsUpdate
|
||||||
{
|
{
|
||||||
Currencies = _allaganToolsIpc.CountCurrencies(),
|
Currencies = currencies,
|
||||||
|
Submarines = _submarineTrackerIpc.GetSubmarineStats(characters),
|
||||||
};
|
};
|
||||||
_statisticsWindow.OnStatisticsUpdate(update);
|
_statisticsWindow.OnStatisticsUpdate(update);
|
||||||
_influxStatisticsClient.OnStatisticsUpdate(update);
|
_influxStatisticsClient.OnStatisticsUpdate(update);
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Influx.AllaganTools;
|
using Influx.AllaganTools;
|
||||||
|
using Influx.SubmarineTracker;
|
||||||
|
|
||||||
namespace Influx;
|
namespace Influx;
|
||||||
|
|
||||||
internal sealed class StatisticsUpdate
|
internal sealed class StatisticsUpdate
|
||||||
{
|
{
|
||||||
public required IReadOnlyDictionary<Character, Currencies> Currencies { get; init; }
|
public required IReadOnlyDictionary<Character, Currencies> Currencies { get; init; }
|
||||||
|
public required Dictionary<Character, List<SubmarineStats>> Submarines { get; init; }
|
||||||
}
|
}
|
||||||
|
8
Influx/SubmarineTracker/SubmarineStats.cs
Normal file
8
Influx/SubmarineTracker/SubmarineStats.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Influx.SubmarineTracker;
|
||||||
|
|
||||||
|
public class SubmarineStats
|
||||||
|
{
|
||||||
|
public string Name { get; init; }
|
||||||
|
public int Id { get; init; }
|
||||||
|
public ushort Level { get; init; }
|
||||||
|
}
|
86
Influx/SubmarineTracker/SubmarineTrackerIpc.cs
Normal file
86
Influx/SubmarineTracker/SubmarineTrackerIpc.cs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Dalamud.Game.Gui;
|
||||||
|
using ECommons.Reflection;
|
||||||
|
using Influx.AllaganTools;
|
||||||
|
|
||||||
|
namespace Influx.SubmarineTracker;
|
||||||
|
|
||||||
|
internal sealed class SubmarineTrackerIpc
|
||||||
|
{
|
||||||
|
private readonly ChatGui _chatGui;
|
||||||
|
|
||||||
|
public SubmarineTrackerIpc(ChatGui chatGui)
|
||||||
|
{
|
||||||
|
_chatGui = chatGui;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dictionary<Character, List<SubmarineStats>> GetSubmarineStats(List<Character> characters)
|
||||||
|
{
|
||||||
|
if (DalamudReflector.TryGetDalamudPlugin("Submarine Tracker", out var it, false, true))
|
||||||
|
{
|
||||||
|
var submarineData = it.GetType().Assembly.GetType("SubmarineTracker.Data.Submarines");
|
||||||
|
var knownSubmarineData = submarineData!.GetField("KnownSubmarines")!;
|
||||||
|
return ((IEnumerable)knownSubmarineData.GetValue(null)!).Cast<object>()
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
OwnerId = (ulong)x.GetType().GetProperty("Key")!.GetValue(x)!,
|
||||||
|
FcWrapper = x.GetType().GetProperty("Value")!.GetValue(x)!
|
||||||
|
})
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
Owner = characters.FirstOrDefault(y => y.CharacterId == x.OwnerId),
|
||||||
|
Subs = new FcSubmarines(x.FcWrapper).Submarines,
|
||||||
|
})
|
||||||
|
.Where(x => x.Owner != null)
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
x.Subs,
|
||||||
|
Fc = characters.FirstOrDefault(y => y.CharacterId == x.Owner!.FreeCompanyId)
|
||||||
|
})
|
||||||
|
.Where(x => x.Fc != null)
|
||||||
|
.ToDictionary(
|
||||||
|
x => x.Fc!,
|
||||||
|
x => x.Subs.Select(y => new SubmarineStats
|
||||||
|
{
|
||||||
|
Id = x.Subs.IndexOf(y),
|
||||||
|
Name = y.Name,
|
||||||
|
Level = y.Level,
|
||||||
|
}).ToList());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return new Dictionary<Character, List<SubmarineStats>>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class FcSubmarines
|
||||||
|
{
|
||||||
|
private readonly object _delegate;
|
||||||
|
|
||||||
|
public FcSubmarines(object @delegate)
|
||||||
|
{
|
||||||
|
_delegate = @delegate;
|
||||||
|
Submarines = ((IEnumerable)_delegate.GetType().GetField("Submarines")!.GetValue(_delegate)!)
|
||||||
|
.Cast<object>()
|
||||||
|
.Select(x => new Submarine(x))
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Submarine> Submarines { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class Submarine
|
||||||
|
{
|
||||||
|
private readonly object _delegate;
|
||||||
|
|
||||||
|
public Submarine(object @delegate)
|
||||||
|
{
|
||||||
|
_delegate = @delegate;
|
||||||
|
Name = (string)_delegate.GetType().GetProperty("Name")!.GetValue(_delegate)!;
|
||||||
|
Level = (ushort)_delegate.GetType().GetProperty("Rank")!.GetValue(_delegate)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public ushort Level { get; }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user