Improved IsSameItem

This commit is contained in:
Chomp
2025-02-03 15:29:34 +00:00
parent a4bb2e8f25
commit d2e04ff877
3 changed files with 26 additions and 90 deletions
@@ -703,7 +703,7 @@ public class RagfairOfferGenerator(
if (rootItem.Upd?.Key != null && itemDetails.Properties.MaximumNumberOfUsage > 1) {
// Randomize key uses
rootItem.Upd.Key.NumberOfUsages = Math.Round((double) itemDetails.Properties.MaximumNumberOfUsage * (1 - maxMultiplier));
rootItem.Upd.Key.NumberOfUsages = (int?)Math.Round(itemDetails.Properties.MaximumNumberOfUsage.Value * (1 - maxMultiplier));
return;
}
+23 -88
View File
@@ -156,98 +156,33 @@ public class ItemHelper(
return false;
}
// Key
if (compareUpdProperties is null || compareUpdProperties.Contains("Key"))
// key = Upd property Type as string, value = comparison function that returns bool
var comparers = new Dictionary<string, Func<Upd, Upd, bool>>
{
if (item1.Upd?.Key?.NumberOfUsages != item2.Upd?.Key?.NumberOfUsages)
{ "Key", (upd1, upd2) => upd1.Key?.NumberOfUsages == upd2.Key?.NumberOfUsages },
{ "Buff", (upd1, upd2) => upd1.Buff?.Value == upd2.Buff?.Value && upd1.Buff?.BuffType == upd2.Buff?.BuffType },
{ "CultistAmulet", (upd1, upd2) => upd1.CultistAmulet?.NumberOfUsages == upd2.CultistAmulet?.NumberOfUsages },
{ "Dogtag", (upd1, upd2) => upd1.Dogtag?.ProfileId == upd2.Dogtag?.ProfileId },
{ "FaceShield", (upd1, upd2) => upd1.FaceShield?.Hits == upd2.FaceShield?.Hits },
{ "Foldable", (upd1, upd2) => upd1.Foldable?.Folded.GetValueOrDefault(false) == upd2.Foldable?.Folded.GetValueOrDefault(false) },
{ "FoodDrink", (upd1, upd2) => upd1.FoodDrink?.HpPercent == upd2.FoodDrink?.HpPercent },
{ "MedKit", (upd1, upd2) => upd1.MedKit?.HpResource == upd2.MedKit?.HpResource },
{ "RecodableComponent", (upd1, upd2) => upd1.RecodableComponent?.IsEncoded == upd2.RecodableComponent?.IsEncoded },
{ "RepairKit", (upd1, upd2) => upd1.RepairKit?.Resource == upd2.RepairKit?.Resource },
{ "Resource", (upd1, upd2) => upd1.Resource?.UnitsConsumed == upd2.Resource?.UnitsConsumed }
};
// Choose above keys or passed in keys to compare items with
var valuesToCompare = compareUpdProperties?.Count > 0 ? compareUpdProperties : comparers.Keys.ToHashSet();
foreach (var propertyName in valuesToCompare)
{
if (!comparers.TryGetValue(propertyName, out var comparer))
{
return false;
// Key not found, skip
continue;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("Buff"))
{
// Buffed armor/weapon
if (item1.Upd?.Buff.Value != item2.Upd?.Buff.Value
&& item1.Upd?.Buff.BuffType != item2.Upd?.Buff.BuffType)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("CultistAmulet"))
{
// Amulet
if (item1.Upd?.CultistAmulet?.NumberOfUsages != item2.Upd?.CultistAmulet?.NumberOfUsages)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("Dogtag"))
{
if (item1.Upd.Dogtag.ProfileId != item2.Upd.Dogtag.ProfileId)
{
return false;
}
}
// Faceshield
if (compareUpdProperties is null || compareUpdProperties.Contains("FaceShield"))
{
if (item1.Upd?.FaceShield?.Hits != item2.Upd?.FaceShield?.Hits)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("Foldable"))
{
if (item1.Upd?.Foldable?.Folded.GetValueOrDefault(false) !=
item2.Upd?.Foldable?.Folded.GetValueOrDefault(false))
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("FoodDrink"))
{
if (item1.Upd?.FoodDrink?.HpPercent != item2.Upd?.FoodDrink?.HpPercent)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("MedKit"))
{
if (item1.Upd.MedKit.HpResource != item2.Upd.MedKit.HpResource)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("RecodableComponent"))
{
if (item1.Upd?.RecodableComponent?.IsEncoded != item2.Upd?.RecodableComponent?.IsEncoded)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("RepairKit"))
{
if (item1.Upd?.RepairKit?.Resource != item2.Upd?.RepairKit?.Resource)
{
return false;
}
}
if (compareUpdProperties is null || compareUpdProperties.Contains("Resource"))
{
if (item1.Upd?.Resource?.UnitsConsumed != item2.Upd?.Resource?.UnitsConsumed)
if (!comparer(item1.Upd, item2.Upd))
{
return false;
}
@@ -244,8 +244,9 @@ public record UpdFoodDrink
public record UpdKey
{
// Checked in client
[JsonPropertyName("NumberOfUsages")]
public double? NumberOfUsages { get; set; }
public int? NumberOfUsages { get; set; }
}
public record UpdResource