diff --git a/documentation/DocumentationTest.ExperienceDocumentation.approved.txt b/documentation/DocumentationTest.ExperienceDocumentation.approved.txt index 9b815a2..411a67e 100644 --- a/documentation/DocumentationTest.ExperienceDocumentation.approved.txt +++ b/documentation/DocumentationTest.ExperienceDocumentation.approved.txt @@ -95,6 +95,6 @@ Level 93 - XP: 1340194000 Level 94 - XP: 1457519000 Level 95 - XP: 1577327000 Level 96 - XP: 1699644000 -Level 97 - XP: 1824496000 -Level 98 - XP: 1951909000 -Level 99 - XP: 2081909000 +Level 97 - XP: 1843704000 +Level 98 - XP: 1990719000 +Level 99 - XP: 2140719000 diff --git a/documentation/DocumentationTest.HpDocumentation.approved.txt b/documentation/DocumentationTest.HpDocumentation.approved.txt index 09b6622..1a5f079 100644 --- a/documentation/DocumentationTest.HpDocumentation.approved.txt +++ b/documentation/DocumentationTest.HpDocumentation.approved.txt @@ -1,5 +1,5 @@ ============ HP Table ============= -Class Adventurer +-------------- Class Adventurer -------------- Level 1 - HP: 205 Level 2 - HP: 221 Level 3 - HP: 238 @@ -99,7 +99,8 @@ Level 96 - HP: 6190 Level 97 - HP: 6301 Level 98 - HP: 6413 Level 99 - HP: 6526 -Class Swordman + +-------------- Class Swordman -------------- Level 1 - HP: 946 Level 2 - HP: 946 Level 3 - HP: 946 @@ -199,7 +200,8 @@ Level 96 - HP: 17290 Level 97 - HP: 17663 Level 98 - HP: 17851 Level 99 - HP: 18230 -Class Archer + +-------------- Class Archer -------------- Level 1 - HP: 680 Level 2 - HP: 680 Level 3 - HP: 680 @@ -299,7 +301,8 @@ Level 96 - HP: 9676 Level 97 - HP: 9815 Level 98 - HP: 9955 Level 99 - HP: 10238 -Class Magician + +-------------- Class Magician -------------- Level 1 - HP: 325 Level 2 - HP: 357 Level 3 - HP: 391 @@ -399,7 +402,8 @@ Level 96 - HP: 12295 Level 97 - HP: 12517 Level 98 - HP: 12741 Level 99 - HP: 12967 -Class MartialArtist + +-------------- Class MartialArtist -------------- Level 1 - HP: 946 Level 2 - HP: 946 Level 3 - HP: 946 diff --git a/documentation/DocumentationTest.SpExperienceDocumentation.approved.txt b/documentation/DocumentationTest.SpExperienceDocumentation.approved.txt new file mode 100644 index 0000000..5f41aed --- /dev/null +++ b/documentation/DocumentationTest.SpExperienceDocumentation.approved.txt @@ -0,0 +1,202 @@ +============ SP Experience Table ============= +-------------- Primary SP -------------- +Level 1 - XP: 15000 +Level 2 - XP: 25000 +Level 3 - XP: 35000 +Level 4 - XP: 45000 +Level 5 - XP: 55000 +Level 6 - XP: 65000 +Level 7 - XP: 75000 +Level 8 - XP: 85000 +Level 9 - XP: 95000 +Level 10 - XP: 105000 +Level 11 - XP: 115000 +Level 12 - XP: 125000 +Level 13 - XP: 135000 +Level 14 - XP: 145000 +Level 15 - XP: 155000 +Level 16 - XP: 165000 +Level 17 - XP: 175000 +Level 18 - XP: 185000 +Level 19 - XP: 195000 +Level 20 - XP: 218000 +Level 21 - XP: 225566 +Level 22 - XP: 233888 +Level 23 - XP: 243002 +Level 24 - XP: 252944 +Level 25 - XP: 263750 +Level 26 - XP: 275456 +Level 27 - XP: 288098 +Level 28 - XP: 301712 +Level 29 - XP: 316334 +Level 30 - XP: 332000 +Level 31 - XP: 348746 +Level 32 - XP: 366608 +Level 33 - XP: 385622 +Level 34 - XP: 405824 +Level 35 - XP: 427250 +Level 36 - XP: 449936 +Level 37 - XP: 473918 +Level 38 - XP: 499232 +Level 39 - XP: 525914 +Level 40 - XP: 554000 +Level 41 - XP: 583526 +Level 42 - XP: 614528 +Level 43 - XP: 647042 +Level 44 - XP: 681104 +Level 45 - XP: 716750 +Level 46 - XP: 754016 +Level 47 - XP: 792938 +Level 48 - XP: 833552 +Level 49 - XP: 875894 +Level 50 - XP: 920000 +Level 51 - XP: 965906 +Level 52 - XP: 1013648 +Level 53 - XP: 1063262 +Level 54 - XP: 1114784 +Level 55 - XP: 1168250 +Level 56 - XP: 1223696 +Level 57 - XP: 1281158 +Level 58 - XP: 1340672 +Level 59 - XP: 1402274 +Level 60 - XP: 1466000 +Level 61 - XP: 1531886 +Level 62 - XP: 1599968 +Level 63 - XP: 1670282 +Level 64 - XP: 1742864 +Level 65 - XP: 1817750 +Level 66 - XP: 1894976 +Level 67 - XP: 1974578 +Level 68 - XP: 2056592 +Level 69 - XP: 2141054 +Level 70 - XP: 2228000 +Level 71 - XP: 2317466 +Level 72 - XP: 2409488 +Level 73 - XP: 2504102 +Level 74 - XP: 2601344 +Level 75 - XP: 2701250 +Level 76 - XP: 2803856 +Level 77 - XP: 2909198 +Level 78 - XP: 3017312 +Level 79 - XP: 3128234 +Level 80 - XP: 3242000 +Level 81 - XP: 3358646 +Level 82 - XP: 3478208 +Level 83 - XP: 3600722 +Level 84 - XP: 3726224 +Level 85 - XP: 3854750 +Level 86 - XP: 3986336 +Level 87 - XP: 4121018 +Level 88 - XP: 4258832 +Level 89 - XP: 4399814 +Level 90 - XP: 4544000 +Level 91 - XP: 4691426 +Level 92 - XP: 4842128 +Level 93 - XP: 4996142 +Level 94 - XP: 5153504 +Level 95 - XP: 5314250 +Level 96 - XP: 5478416 +Level 97 - XP: 5646038 +Level 98 - XP: 5817152 +Level 99 - XP: 5991794 + +-------------- Secondary SP -------------- +Level 1 - XP: 10000 +Level 2 - XP: 10000 +Level 3 - XP: 10000 +Level 4 - XP: 10000 +Level 5 - XP: 10000 +Level 6 - XP: 10000 +Level 7 - XP: 10000 +Level 8 - XP: 10000 +Level 9 - XP: 10000 +Level 10 - XP: 10000 +Level 11 - XP: 10000 +Level 12 - XP: 10000 +Level 13 - XP: 10000 +Level 14 - XP: 10000 +Level 15 - XP: 10000 +Level 16 - XP: 10000 +Level 17 - XP: 10000 +Level 18 - XP: 10000 +Level 19 - XP: 10000 +Level 20 - XP: 100000 +Level 21 - XP: 105000 +Level 22 - XP: 110000 +Level 23 - XP: 115000 +Level 24 - XP: 120000 +Level 25 - XP: 125000 +Level 26 - XP: 130000 +Level 27 - XP: 135000 +Level 28 - XP: 140000 +Level 29 - XP: 145000 +Level 30 - XP: 150000 +Level 31 - XP: 155000 +Level 32 - XP: 160000 +Level 33 - XP: 165000 +Level 34 - XP: 170000 +Level 35 - XP: 175000 +Level 36 - XP: 180000 +Level 37 - XP: 185000 +Level 38 - XP: 1 +Level 39 - XP: 1 +Level 40 - XP: 1 +Level 41 - XP: 1 +Level 42 - XP: 1 +Level 43 - XP: 1 +Level 44 - XP: 1 +Level 45 - XP: 1 +Level 46 - XP: 1 +Level 47 - XP: 1 +Level 48 - XP: 1 +Level 49 - XP: 1 +Level 50 - XP: 1 +Level 51 - XP: 1 +Level 52 - XP: 1 +Level 53 - XP: 1 +Level 54 - XP: 1 +Level 55 - XP: 1 +Level 56 - XP: 1 +Level 57 - XP: 1 +Level 58 - XP: 1 +Level 59 - XP: 1 +Level 60 - XP: 1 +Level 61 - XP: 1 +Level 62 - XP: 1 +Level 63 - XP: 1 +Level 64 - XP: 1 +Level 65 - XP: 1 +Level 66 - XP: 1 +Level 67 - XP: 1 +Level 68 - XP: 1 +Level 69 - XP: 1 +Level 70 - XP: 1 +Level 71 - XP: 1 +Level 72 - XP: 1 +Level 73 - XP: 1 +Level 74 - XP: 1 +Level 75 - XP: 1 +Level 76 - XP: 1 +Level 77 - XP: 1 +Level 78 - XP: 1 +Level 79 - XP: 1 +Level 80 - XP: 1 +Level 81 - XP: 1 +Level 82 - XP: 1 +Level 83 - XP: 1 +Level 84 - XP: 1 +Level 85 - XP: 1 +Level 86 - XP: 1 +Level 87 - XP: 1 +Level 88 - XP: 1 +Level 89 - XP: 1 +Level 90 - XP: 1 +Level 91 - XP: 1 +Level 92 - XP: 1 +Level 93 - XP: 1 +Level 94 - XP: 1 +Level 95 - XP: 1 +Level 96 - XP: 1 +Level 97 - XP: 1 +Level 98 - XP: 1 +Level 99 - XP: 1 diff --git a/src/NosCore.Algorithm/ExperienceService/ExperienceService.cs b/src/NosCore.Algorithm/ExperienceService/ExperienceService.cs index 0f1ce8c..df716f6 100644 --- a/src/NosCore.Algorithm/ExperienceService/ExperienceService.cs +++ b/src/NosCore.Algorithm/ExperienceService/ExperienceService.cs @@ -4,7 +4,7 @@ namespace NosCore.Algorithm.ExperienceService { public class ExperienceService : IExperienceService { - private readonly double[]_xpData = new double[Constants.MaxLevel]; + private readonly double[] _xpData = new double[Constants.MaxLevel]; public ExperienceService() { @@ -51,6 +51,10 @@ public ExperienceService() { var = 13000; } + else if (i == 96) + { + var = 15000; + } _xpData[i] = Convert.ToInt64(_xpData[i - 1] + var * (i + 2) * (i + 2)); } diff --git a/src/NosCore.Algorithm/HpService/HpService.cs b/src/NosCore.Algorithm/HpService/HpService.cs index 72891c9..a8f162f 100644 --- a/src/NosCore.Algorithm/HpService/HpService.cs +++ b/src/NosCore.Algorithm/HpService/HpService.cs @@ -2,6 +2,7 @@ namespace NosCore.Algorithm.HpService { + //TODO finish/fix this service public class HpService : IHpService { private readonly double[,] _hpData = new double[Constants.ClassCount, Constants.MaxLevel]; diff --git a/src/NosCore.Algorithm/SpExperienceService/ISpExperienceService.cs b/src/NosCore.Algorithm/SpExperienceService/ISpExperienceService.cs new file mode 100644 index 0000000..f2aa4a1 --- /dev/null +++ b/src/NosCore.Algorithm/SpExperienceService/ISpExperienceService.cs @@ -0,0 +1,13 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +namespace NosCore.Algorithm.SpExperienceService +{ + public interface ISpExperienceService + { + long GetSpExperience(byte level, bool isSecondarySp); + } +} \ No newline at end of file diff --git a/src/NosCore.Algorithm/SpExperienceService/SpExperienceService.cs b/src/NosCore.Algorithm/SpExperienceService/SpExperienceService.cs new file mode 100644 index 0000000..54127e7 --- /dev/null +++ b/src/NosCore.Algorithm/SpExperienceService/SpExperienceService.cs @@ -0,0 +1,46 @@ +namespace NosCore.Algorithm.SpExperienceService +{ + public class SpExperienceService : ISpExperienceService + { + private readonly double[,] _spXpData = new double[2, Constants.MaxLevel]; + + public SpExperienceService() + { + _spXpData[0, 0] = 15000; + _spXpData[0, 19] = 218000; + for (int i = 1; i < 19; i++) + { + _spXpData[0,i] = _spXpData[0, i - 1] + 10000; + } + for (int i = 20; i < _spXpData.GetLength(1); i++) + { + _spXpData[0, i] = _spXpData[0, i - 1] + 6 * (3 * i * (i + 1) + 1); + } + + for (int i = 0; i < Constants.MaxLevel; i++) + { + if (i < 19) + { + _spXpData[1, i] = 10000; + } else if (i == 19) + { + _spXpData[1, i] = 100000; + } + else if (i < 37) + { + _spXpData[1, i] = _spXpData[1, i-1] + 5000; + } + else + { + _spXpData[1, i] = 1; + } + + } + + } + public long GetSpExperience(byte level, bool isSecondarySp) + { + return (long)_spXpData![isSecondarySp ? 1 : 0, level - 1]; + } + } +} diff --git a/test/NosCore.Algorithm.Tests/DocumentationTest.cs b/test/NosCore.Algorithm.Tests/DocumentationTest.cs index cbec645..71f73c7 100644 --- a/test/NosCore.Algorithm.Tests/DocumentationTest.cs +++ b/test/NosCore.Algorithm.Tests/DocumentationTest.cs @@ -27,17 +27,39 @@ public void ExperienceDocumentation() Approvals.Verify(resultBuilder); } + [TestMethod] + public void SpExperienceDocumentation() + { + var experienceService = new SpExperienceService.SpExperienceService(); + + StringBuilder resultBuilder = new StringBuilder("============ SP Experience Table ============="); + + + for (int i = 0; i < 2; i++) + { + resultBuilder.AppendLine(); + resultBuilder.AppendLine($"-------------- {(i == 0 ? "Primary" : "Secondary")} SP --------------"); + for (byte level = 1; level < 100; level++) + { + resultBuilder.AppendLine( + $"Level {level.ToString().PadRight(2)} - XP: {experienceService.GetSpExperience(level, i == 1)}"); + } + } + Approvals.Verify(resultBuilder); + } + + [TestMethod] public void HpDocumentation() { var experienceService = new HpService.HpService(); StringBuilder resultBuilder = new StringBuilder("============ HP Table ============="); - resultBuilder.AppendLine(); foreach (var @class in Enum.GetValues(typeof(CharacterClassType)).Cast()) { - resultBuilder.AppendLine($"Class {@class}"); + resultBuilder.AppendLine(); + resultBuilder.AppendLine($"-------------- Class {@class} --------------"); for (byte level = 1; level < 100; level++) { resultBuilder.AppendLine(