From 96f4656acafa591f7c97ad2102497673114b0616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Mon, 24 Mar 2025 04:43:47 -0300 Subject: [PATCH 1/2] Fix: Item Stats --- .../Util/ItemStatsCalculator.cs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Maple2.Server.Game/Util/ItemStatsCalculator.cs b/Maple2.Server.Game/Util/ItemStatsCalculator.cs index c677a3a7b..92eff0624 100644 --- a/Maple2.Server.Game/Util/ItemStatsCalculator.cs +++ b/Maple2.Server.Game/Util/ItemStatsCalculator.cs @@ -199,26 +199,26 @@ public bool RandomizeValues(Item item, ItemOption itemOptionMetadata, ref ItemSt foreach (BasicAttribute attribute in option.Basic.Keys) { if (table.Values.TryGetValue(attribute, out ItemEquipVariationTable.Set[]? values)) { - int value = GetValue(item, itemOptionMetadata, attribute, tableValues: values, rollMax: rollMax); + int value = GetValue(attribute, tableValues: values, rollMax: rollMax); option.Basic[attribute] = new BasicOption((int) (value * option.MultiplyFactor)); } else if (table.Rates.TryGetValue(attribute, out ItemEquipVariationTable.Set[]? rates)) { - int rateInt = GetValue(item, itemOptionMetadata, attribute, tableRates: rates, rollMax: rollMax); + int rateInt = GetValue(attribute, tableRates: rates, rollMax: rollMax); option.Basic[attribute] = new BasicOption((rateInt / 1000f) * option.MultiplyFactor); } } foreach (SpecialAttribute attribute in option.Special.Keys) { if (table.SpecialValues.TryGetValue(attribute, out ItemEquipVariationTable.Set[]? values)) { - int value = GetValue(item, itemOptionMetadata, specialAttribute: attribute, tableValues: values, rollMax: rollMax); + int value = GetValue(specialAttribute: attribute, tableValues: values, rollMax: rollMax); option.Special[attribute] = new SpecialOption(0f, value * option.MultiplyFactor); } else if (table.SpecialRates.TryGetValue(attribute, out ItemEquipVariationTable.Set[]? rates)) { - int rateInt = GetValue(item, itemOptionMetadata, specialAttribute: attribute, tableRates: rates, rollMax: rollMax); + int rateInt = GetValue(specialAttribute: attribute, tableRates: rates, rollMax: rollMax); option.Special[attribute] = new SpecialOption((rateInt / 1000f) * option.MultiplyFactor); } } return true; - int GetValue(Item item, ItemOption itemOptionMetadata, BasicAttribute? attribute = null, SpecialAttribute? specialAttribute = null, ItemEquipVariationTable.Set[]? tableValues = null, ItemEquipVariationTable.Set[]? tableRates = null, bool rollMax = false) { + int GetValue(BasicAttribute? attribute = null, SpecialAttribute? specialAttribute = null, ItemEquipVariationTable.Set[]? tableValues = null, ItemEquipVariationTable.Set[]? tableRates = null, bool rollMax = false) { var weightedValues = new WeightedSet(); var weightedRates = new WeightedSet(); if (item.Type.IsPet) { @@ -446,13 +446,17 @@ private int GetItemVariationValue(BasicAttribute? basicAttribute = null, Special } else if (TableMetadata.ItemVariationTable.Rates.TryGetValue(basicAttribute.Value, out ItemVariationTable.Range[]? rates)) { foreach (ItemVariationTable.Range range in rates) { if (rate >= range.Min && rate <= range.Max) { - int convertedVariation = (int) range.Variation * 1000; - int convertedRate = (int) rate * 1000; + int convertedVariation = (int) (range.Variation * 1000); + int convertedRate = (int) (rate * 1000); return Random.Shared.Next(convertedRate, convertedRate + convertedVariation + 1); } } } - } else if (specialAttribute != null) { + + return value; + } + + if (specialAttribute != null) { if (TableMetadata.ItemVariationTable.SpecialValues.TryGetValue(specialAttribute.Value, out ItemVariationTable.Range[]? values)) { foreach (ItemVariationTable.Range range in values) { if (value >= range.Min && value <= range.Max) { @@ -462,13 +466,16 @@ private int GetItemVariationValue(BasicAttribute? basicAttribute = null, Special } else if (TableMetadata.ItemVariationTable.SpecialRates.TryGetValue(specialAttribute.Value, out ItemVariationTable.Range[]? rates)) { foreach (ItemVariationTable.Range range in rates) { if (rate >= range.Min && rate <= range.Max) { - int convertedVariation = (int) range.Variation * 1000; - int convertedRate = (int) rate * 1000; + int convertedVariation = (int) (range.Variation * 1000); + int convertedRate = (int) (rate * 1000); return Random.Shared.Next(convertedRate, convertedRate + convertedVariation + 1); } } } + + return (int) (rate * 1000); } + return 0; } From e27d4a18bd018f4a9c7170e3de48166e8f9589e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Mon, 24 Mar 2025 04:55:24 -0300 Subject: [PATCH 2/2] Suggestion --- Maple2.Server.Game/Util/ItemStatsCalculator.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Maple2.Server.Game/Util/ItemStatsCalculator.cs b/Maple2.Server.Game/Util/ItemStatsCalculator.cs index 92eff0624..f835aa398 100644 --- a/Maple2.Server.Game/Util/ItemStatsCalculator.cs +++ b/Maple2.Server.Game/Util/ItemStatsCalculator.cs @@ -453,7 +453,11 @@ private int GetItemVariationValue(BasicAttribute? basicAttribute = null, Special } } - return value; + if (value != 0) { + return value; + } + + return (int) (rate * 1000); } if (specialAttribute != null) { @@ -473,6 +477,10 @@ private int GetItemVariationValue(BasicAttribute? basicAttribute = null, Special } } + if (value != 0) { + return value; + } + return (int) (rate * 1000); }