Skip to content

Commit bf8f241

Browse files
authored
Merge pull request #64 from NosCoreIO/cleanup
Cleanup algo
2 parents 7be9599 + 90791a9 commit bf8f241

File tree

3 files changed

+16
-62
lines changed

3 files changed

+16
-62
lines changed

src/NosCore.Algorithm/HpService/HpService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ namespace NosCore.Algorithm.HpService
1212
public class HpService : IHpService
1313
{
1414
private readonly long[,] _hpData = new long[Constants.ClassCount, Constants.MaxLevel];
15-
public readonly int[][] ClassConstants = new int[][] { new int[] { 0, 0, 0 }, new int[] { 8, 2, 0 }, new int[] { 3, 6, 1 }, new int[] { 0, 2, 8 }, new int[] { 5, 3, 2 } };
15+
public readonly int[] ClassConstants = { 0, 8, 3, 0, 5 };
1616

1717
public HpService()
1818
{
1919
foreach (CharacterClassType classType in Enum.GetValues(typeof(CharacterClassType)))
2020
{
2121
for (var i = 0; i < Constants.MaxLevel; i++)
2222
{
23-
var hpx = i + 1 + Math.Floor(i * (double)(ClassConstants[(int)classType][0]) / 10);
23+
var hpx = i + 1 + Math.Floor(i * (double)(ClassConstants[(int)classType]) / 10);
2424
var hp = (0.5 * Math.Pow(hpx, 2)) + (15.5 * hpx) + 205;
2525
_hpData[(int)classType, i] = (long)hp;
2626
}

src/NosCore.Algorithm/MpService/MpService.cs

Lines changed: 13 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,80 +5,34 @@
55
// -----------------------------------
66

77
using NosCore.Shared.Enumerations;
8+
using System;
89

910
namespace NosCore.Algorithm.MpService
1011
{
1112
public class MpService : IMpService
1213
{
1314
private readonly long[,] _mpData = new long[Constants.ClassCount, Constants.MaxLevel];
15+
public readonly int[] ClassConstants = new int[] { 0, 0, 1, 8, 2 };
1416

1517
public MpService()
1618
{
17-
var adventurerMpAdd = 9;
18-
var magicianMpAdd = new[] { 9, 18, 21, 22, 25, 13, 27, 30, 31, 34 };
19-
var martialArtistMpAdd = new[] { 9, 9, 9, 10, 22, 11, 12, 13, 13, 27 };
20-
var archerMpAdd = new[] { 9, 9, 9, 10, 11, 11, 11, 12, 13, 26 };
21-
22-
_mpData[(byte)CharacterClassType.Adventurer, 0] = 60;
23-
_mpData[(byte)CharacterClassType.Swordsman, 0] = 60;
24-
_mpData[(byte)CharacterClassType.Mage, 0] = 60;
25-
_mpData[(byte)CharacterClassType.MartialArtist, 0] = 60;
26-
_mpData[(byte)CharacterClassType.Archer, 0] = 60;
27-
var countMagician = 9;
28-
var countArcher = 11;
29-
var substractMagician = true;
30-
var substractArcher = false;
31-
var reverseArcher = 0;
32-
for (var i = 1; i < Constants.MaxLevel; i++)
19+
foreach (CharacterClassType classType in Enum.GetValues(typeof(CharacterClassType)))
3320
{
34-
adventurerMpAdd += i % 4 == 0 ? 2 : 0;
35-
_mpData[(byte)CharacterClassType.Adventurer, i] =
36-
_mpData[(byte)CharacterClassType.Adventurer, i - 1] + (i % 4 == 0 ? adventurerMpAdd - 1 : adventurerMpAdd);
37-
_mpData[(byte)CharacterClassType.Swordsman, i] = _mpData[(byte)CharacterClassType.Adventurer, i];
38-
if (i - 1 > 9)
21+
for (var i = 0; i < Constants.MaxLevel; i++)
3922
{
40-
var switcher = !substractMagician ? 1 : -1;
41-
if ((i - 1) % 5 == 0)
42-
{
43-
countMagician += !substractMagician ? 1 : -1;
44-
substractMagician = countMagician == 10 || countMagician == 8 ? !substractMagician : substractMagician;
45-
magicianMpAdd[(i - 1) % 10] = magicianMpAdd[(i - 1) % 10] + countMagician;
46-
}
47-
else
48-
{
49-
magicianMpAdd[(i - 1) % 10] += 18 + switcher / ((i - 1) % 5 % 2 == 1 ? 1 : -1);
50-
}
51-
52-
if (i % 10 == 0)
53-
{
54-
countArcher += !substractArcher ? 1 : -1;
55-
substractArcher = countArcher == 12 || countArcher == 10 ? !substractArcher : substractArcher;
56-
archerMpAdd[(i - 1) % 10] = archerMpAdd[(i - 1) % 10] + countArcher;
57-
reverseArcher++;
58-
}
59-
else
60-
{
61-
var switcherArcher = reverseArcher % 4 == 2 || reverseArcher % 4 == 3 ? -1 : 1;
62-
archerMpAdd[(i - 1) % 10] += (switcherArcher == -1 ? 6 : 5) +
63-
(i % 20 < 10
64-
? i % 4 == 2 || i % 4 == 1 ? 0 : switcherArcher
65-
: i % 4 == 0 || i % 4 == 1 ? switcherArcher : 0);
66-
67-
}
68-
69-
martialArtistMpAdd[(i - 1) % 10] += (i - 1) % 5 == 4 ? 12 : 6;
23+
var mpx = i + 1 + Math.Floor(i * (double)ClassConstants[(int)classType] / 10);
24+
var mp = Math.Floor(9.25 * mpx + 50.75) + ((int)((mpx - 2) / 4) * 2) * (Modulus(mpx - 2, 4) + 1 + (int)((mpx - 6) / 4) * 2);
25+
_mpData[(int)classType, i] = (long)mp;
7026
}
71-
_mpData[(byte)CharacterClassType.Mage, i] =
72-
_mpData[(byte)CharacterClassType.Mage, i - 1] + magicianMpAdd[(i - 1) % 10];
73-
74-
_mpData[(byte)CharacterClassType.MartialArtist, i] =
75-
_mpData[(byte)CharacterClassType.MartialArtist, i - 1] + martialArtistMpAdd[(i - 1) % 10];
76-
77-
_mpData[(byte)CharacterClassType.Archer, i] =
78-
_mpData[(byte)CharacterClassType.Archer, i - 1] + archerMpAdd[(i - 1) % 10];
7927
}
28+
}
8029

30+
private static double Modulus(double dividend, double divisor)
31+
{
32+
double modulus = (Math.Abs(dividend) - (Math.Abs(divisor) * Math.Floor(Math.Abs(dividend) / Math.Abs(divisor)))) * Math.Sign(dividend);
33+
return modulus;
8134
}
35+
8236
public long GetMp(CharacterClassType @class, byte level)
8337
{
8438
return _mpData![(byte)@class, level - 1];

src/NosCore.Algorithm/NosCore.Algorithm.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<RepositoryUrl>https://github.com/NosCoreIO/NosCore.Algorithm.git</RepositoryUrl>
1414
<PackageIconUrl></PackageIconUrl>
1515
<PackageTags>nostale, noscore, nostale private server source, nostale emulator</PackageTags>
16-
<Version>1.0.0</Version>
16+
<Version>1.0.1</Version>
1717
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
1818
<Description>NosCore's Algorithm</Description>
1919
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>

0 commit comments

Comments
 (0)