diff --git a/documentation/DocumentationTest.FamilyExperienceDocumentation.approved.md b/documentation/DocumentationTest.FamilyExperienceDocumentation.approved.md index 148e21f..34211e6 100644 --- a/documentation/DocumentationTest.FamilyExperienceDocumentation.approved.md +++ b/documentation/DocumentationTest.FamilyExperienceDocumentation.approved.md @@ -1,20 +1,31 @@ # Family Experience Table -- Level 1 - XP: 100000 -- Level 2 - XP: 250000 -- Level 3 - XP: 370000 -- Level 4 - XP: 560000 -- Level 5 - XP: 840000 -- Level 6 - XP: 1260000 -- Level 7 - XP: 1900000 -- Level 8 - XP: 2850000 -- Level 9 - XP: 3570000 -- Level 10 - XP: 3830000 -- Level 11 - XP: 4150000 -- Level 12 - XP: 4750000 -- Level 13 - XP: 5500000 -- Level 14 - XP: 6500000 -- Level 15 - XP: 7000000 -- Level 16 - XP: 8500000 -- Level 17 - XP: 9500000 -- Level 18 - XP: 10000000 -- Level 19 - XP: 17000000 +- Level 1 - XP: 80000 +- Level 2 - XP: 96000 +- Level 3 - XP: 120000 +- Level 4 - XP: 152000 +- Level 5 - XP: 224000 +- Level 6 - XP: 336000 +- Level 7 - XP: 512000 +- Level 8 - XP: 760000 +- Level 9 - XP: 1136000 +- Level 10 - XP: 1472000 +- Level 11 - XP: 1800000 +- Level 12 - XP: 2240000 +- Level 13 - XP: 2968000 +- Level 14 - XP: 3848000 +- Level 15 - XP: 5000000 +- Level 16 - XP: 6816000 +- Level 17 - XP: 9672000 +- Level 18 - XP: 14192000 +- Level 19 - XP: 20000000 +- Level 20 - XP: 22000000 +- Level 21 - XP: 24200000 +- Level 22 - XP: 26620000 +- Level 23 - XP: 29282000 +- Level 24 - XP: 32210200 +- Level 25 - XP: 35431220 +- Level 26 - XP: 38974342 +- Level 27 - XP: 42871776 +- Level 28 - XP: 47158953 +- Level 29 - XP: 51874849 +- Level 30 - XP: 57062334 diff --git a/src/NosCore.Algorithm/Constants.cs b/src/NosCore.Algorithm/Constants.cs index 10bec9c..a1abcd4 100644 --- a/src/NosCore.Algorithm/Constants.cs +++ b/src/NosCore.Algorithm/Constants.cs @@ -10,6 +10,7 @@ internal class Constants internal const byte MaxJobLevel = 80; internal const byte MaxHeroLevel = 60; internal const byte MaxMateLevel = 99; + internal const byte MaxFamilyLevel = 30; internal static readonly int ClassCount = Enum.GetNames(typeof(CharacterClassType)).Length; } } diff --git a/src/NosCore.Algorithm/FamilyExperienceService/FamilyExperienceService.cs b/src/NosCore.Algorithm/FamilyExperienceService/FamilyExperienceService.cs index 88c1f60..3597cf0 100644 --- a/src/NosCore.Algorithm/FamilyExperienceService/FamilyExperienceService.cs +++ b/src/NosCore.Algorithm/FamilyExperienceService/FamilyExperienceService.cs @@ -10,18 +10,19 @@ namespace NosCore.Algorithm.FamilyExperienceService /// Provides family experience requirement calculations for different levels /// /// - /// A ginfo line puts a level 7 family's bar at 640 000 against the 1 900 000 here, so at - /// least that row is suspect. One observation is not enough to rebuild the curve, so the - /// table stands until more levels can be checked. + /// From level 20 the curve is the previous requirement plus a tenth, compounded on the + /// unrounded value and floored, which is why the last rows are not round numbers. /// public class FamilyExperienceService : IFamilyExperienceService { private static readonly uint[] FamilyXpData = [ - 100_000, 250_000, 370_000, 560_000, 840_000, - 1_260_000, 1_900_000, 2_850_000, 3_570_000, 3_830_000, - 4_150_000, 4_750_000, 5_500_000, 6_500_000, 7_000_000, - 8_500_000, 9_500_000, 10_000_000, 17_000_000 + 80_000, 96_000, 120_000, 152_000, 224_000, + 336_000, 512_000, 760_000, 1_136_000, 1_472_000, + 1_800_000, 2_240_000, 2_968_000, 3_848_000, 5_000_000, + 6_816_000, 9_672_000, 14_192_000, 20_000_000, 22_000_000, + 24_200_000, 26_620_000, 29_282_000, 32_210_200, 35_431_220, + 38_974_342, 42_871_776, 47_158_953, 51_874_849, 57_062_334 ]; /// diff --git a/src/NosCore.Algorithm/NosCore.Algorithm.csproj b/src/NosCore.Algorithm/NosCore.Algorithm.csproj index c5b09f9..388feff 100644 --- a/src/NosCore.Algorithm/NosCore.Algorithm.csproj +++ b/src/NosCore.Algorithm/NosCore.Algorithm.csproj @@ -13,7 +13,7 @@ https://github.com/NosCoreIO/NosCore.Algorithm.git nostale, noscore, nostale private server source, nostale emulator - 2.0.0 + 2.1.0 false NosCore's Algorithm GPL-3.0-only diff --git a/test/NosCore.Algorithm.Tests/DocumentationTest.cs b/test/NosCore.Algorithm.Tests/DocumentationTest.cs index 625f2d6..33431ed 100644 --- a/test/NosCore.Algorithm.Tests/DocumentationTest.cs +++ b/test/NosCore.Algorithm.Tests/DocumentationTest.cs @@ -431,7 +431,7 @@ public void FamilyExperienceDocumentation() var resultBuilder = new StringBuilder("# Family Experience Table"); resultBuilder.AppendLine(); - for (byte level = 1; level < 20; level++) + for (byte level = 1; level <= 30; level++) { resultBuilder.AppendLine( $"- Level {level,2} - XP: {familyExperienceService.GetFamilyExperience(level)}");