Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 21 additions & 47 deletions src/NosCore.Algorithm/DamageService/DamageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,31 @@ public class DamageService : IDamageService

public DamageService()
{
// Adventurer
for (var i = 0; i < Constants.MaxLevel; i++)
_minDamage[(byte) CharacterClassType.Adventurer, 0] = 10;
_minDamage[(byte)CharacterClassType.Swordman, 0] = 10;
_minDamage[(byte)CharacterClassType.Archer, 0] = 60;
_minDamage[(byte)CharacterClassType.Magician, 0] = 10;
_minDamage[(byte)CharacterClassType.MartialArtist, 0] = 10;

var swordmanMinUp = 2;
var mageMinUp = 2;
var fighterMinUp = 2;
for (var i = 1; i < Constants.MaxLevel; i++)
{
_minDamage[(byte)CharacterClassType.Adventurer, i] = i + 10;
}

// Swordman
int swordmanMin = 8;
int swordmanMinUp = 2;
for (var i = 0; i < Constants.MaxLevel; i++)
{
if (i > 0 && (i - 2) % 10 == 0 || i > 0 && (i - 7) % 10 == 0)
if ((i - 2) % 10 == 0 || (i - 7) % 10 == 0)
{
swordmanMinUp++;
}

if (i > 0 && (i - 1) % 10 == 0 || i > 0 && (i - 6) % 10 == 0)
} else if ((i - 1) % 10 == 0 || (i - 6) % 10 == 0)
{
swordmanMinUp--;
}

swordmanMin += swordmanMinUp;
_minDamage[(byte)CharacterClassType.Swordman, i] = _minDamage[(byte)CharacterClassType.Swordman, i - 1] + swordmanMinUp;

_minDamage[(byte)CharacterClassType.Swordman, i] = swordmanMin;
}

// Archer
int archerMin = 58;
for (var i = 0; i < Constants.MaxLevel; i++)
{
int archerMinUp;
if (i > 0 && (i - 1) % 10 == 0 || i > 0 && (i - 3) % 10 == 0 || i > 0 && (i - 5) % 10 == 0 || i > 0 && (i - 8) % 10 == 0)
if ((i - 1) % 10 == 0 || (i - 3) % 10 == 0 || (i - 5) % 10 == 0 || (i - 8) % 10 == 0)
{
archerMinUp = 1;
}
Expand All @@ -58,49 +51,30 @@ public DamageService()
archerMinUp = 2;
}

archerMin += archerMinUp;
_minDamage[(byte)CharacterClassType.Archer, i] = _minDamage[(byte)CharacterClassType.Archer, i - 1] + archerMinUp;

_minDamage[(byte)CharacterClassType.Archer, i] = archerMin;
}

// Magician
int mageMin = 8;
int mageMinUp = 2;
for (var i = 0; i < Constants.MaxLevel; i++)
{
if (i > 0 && (i - 2) % 10 == 0 || i > 0 && (i - 7) % 10 == 0)
if ((i - 2) % 10 == 0 || (i - 7) % 10 == 0)
{
mageMinUp++;
}

if (i > 0 && (i - 1) % 10 == 0 || i > 0 && (i - 6) % 10 == 0)
else if((i - 1) % 10 == 0 || (i - 6) % 10 == 0)
{
mageMinUp--;
}

mageMin += mageMinUp;
_minDamage[(byte)CharacterClassType.Magician, i] = _minDamage[(byte)CharacterClassType.Magician, i - 1] + mageMinUp;

_minDamage[(byte)CharacterClassType.Magician, i] = mageMin;
}

// Fighter
int fighterMin = 8;
int fighterMinUp = 2;
for (var i = 0; i < Constants.MaxLevel; i++)
{
if (i > 0 && (i - 2) % 10 == 0 || i > 0 && (i - 4) % 10 == 0 || i > 0 && (i - 6) % 10 == 0 || i > 0 && (i - 8) % 10 == 0 || i > 0 && (i - 10) % 10 == 0)
if ((i - 2) % 10 == 0 || (i - 4) % 10 == 0 || (i - 6) % 10 == 0 || (i - 8) % 10 == 0 || (i - 10) % 10 == 0)
{
fighterMinUp++;
}

if (i > 0 && (i - 1) % 10 == 0 || i > 0 && (i - 3) % 10 == 0 || i > 0 && (i - 5) % 10 == 0 || i > 0 && (i - 7) % 10 == 0 || i > 0 && (i - 9) % 10 == 0)
} else if ((i - 1) % 10 == 0 || (i - 3) % 10 == 0 || (i - 5) % 10 == 0 || (i - 7) % 10 == 0 || (i - 9) % 10 == 0)
{
fighterMinUp--;
}

fighterMin += fighterMinUp;

_minDamage[(byte)CharacterClassType.MartialArtist, i] = fighterMin;
_minDamage[(byte)CharacterClassType.MartialArtist, i] = _minDamage[(byte)CharacterClassType.MartialArtist, i - 1] + fighterMinUp;
}
}

Expand Down
54 changes: 14 additions & 40 deletions src/NosCore.Algorithm/ExperienceService/ExperienceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,51 +19,25 @@ public ExperienceService()
v[0] = 540;
v[1] = 960;
_xpData[0] = 300;
for (var i = 2; i < v.Length; i++)
{
v[i] = v[i - 1] + 420 + 120 * (i - 1);
}

for (var i = 1; i < _xpData.Length; i++)
{
if (i < 79)
{
if (i == 14)
{
var = 6 / 3d;
}
else if (i == 39)
{
var = 19 / 3d;
}
else if (i == 59)
{
var = 70 / 3d;
}

_xpData[i] = Convert.ToInt64(_xpData[i - 1] + var * v[i - 1]);
}
else
v[i] = i == 1 ? v[i] : v[i - 1] + 420 + 120 * (i - 1);
var = i switch
{
if (i == 79)
{
var = 5000;
}
else if (i == 82)
{
var = 9000;
}
else if (i == 84)
{
var = 13000;
}
else if (i == 96)
{
var = 15000;
}
14 => 6 / 3d,
39 => 19 / 3d,
59 => 70 / 3d,
79 => 5000,
82 => 9000,
84 => 13000,
96 => 15000,
_ => var
};

_xpData[i] = Convert.ToInt64(_xpData[i - 1] + var * (i + 2) * (i + 2));
}
_xpData[i] = i < 79
? Convert.ToInt64(_xpData[i - 1] + var * v[i - 1])
: Convert.ToInt64(_xpData[i - 1] + var * (i + 2) * (i + 2));
}
}
public long GetExperience(byte level)
Expand Down
59 changes: 7 additions & 52 deletions src/NosCore.Algorithm/HitRateService/HitRateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,67 +16,22 @@ public class HitRateService : IHitRateService
private readonly double[,] _hitRate = new double[Constants.ClassCount, Constants.MaxLevel];
public HitRateService()
{
var archerHitRate = 31;
var fighterHitRate = 8;
var swordHitRate = 23;
for (var i = 0; i < Constants.MaxLevel; i++)
{
_hitRate[(byte)CharacterClassType.Adventurer, i] = i + 10;
}

int swordHitRate = 23;
for (var i = 0; i < Constants.MaxLevel; i++)
{
int swordHitRateUp;
if ((i - 5) % 5 == 0)
{
swordHitRateUp = 2;
}
else
{
swordHitRateUp = 1;
}

swordHitRate += swordHitRateUp;

swordHitRate += (i - 5) % 5 == 0 ? 2 : 1;
_hitRate[(byte)CharacterClassType.Swordman, i] = swordHitRate;
}

int archerHitRate = 31;
for (var i = 0; i < Constants.MaxLevel; i++)
{
int archerHitRateUp;
if (i != 96 && i % 2 == 0 || i > 0 && i % 5 == 0)
{
archerHitRateUp = 4;
}
else
{
archerHitRateUp = 2;
}

archerHitRate += archerHitRateUp;
archerHitRate += i != 96 && i % 2 == 0 || i > 0 && i % 5 == 0 ? 4 : 2;
_hitRate[(byte)CharacterClassType.Archer, i] = archerHitRate;

_hitRate[2, i] = archerHitRate;
}

for (var i = 0; i < Constants.MaxLevel; i++)
{
_hitRate[(byte)CharacterClassType.Magician, i] = 0;
}

int fighterHitRate = 8;
for (var i = 0; i < Constants.MaxLevel; i++)
{
int fighterHitRateUp;
if (i == 0 || (i - 4) % 10 == 0 || i > 0 && (i - 7) % 10 == 0 || i > 0 && (i - 10) % 10 == 0)
{
fighterHitRateUp = 2;
}
else
{
fighterHitRateUp = 1;
}

fighterHitRate += fighterHitRateUp;

fighterHitRate += i == 0 || (i - 4) % 10 == 0 || i > 0 && (i - 7) % 10 == 0 || i > 0 && (i - 10) % 10 == 0 ? 2 : 1;
_hitRate[(byte)CharacterClassType.MartialArtist, i] = fighterHitRate;
}
}
Expand Down
42 changes: 21 additions & 21 deletions src/NosCore.Algorithm/HpService/HpService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public class HpService : IHpService
public HpService()
{
// Adventurer HP
int basicHp = 205;
int basicInc = 15;
var basicHp = 205;
var basicInc = 15;
for (var i = 0; i < Constants.MaxLevel; i++)
{
basicInc++;
Expand All @@ -26,17 +26,17 @@ public HpService()
_hpData[(byte)CharacterClassType.Adventurer, i] = basicHp;
}

int swordHp = 190;
int swordInc = 14;
var swordHp = 190;
var swordInc = 14;
for (var i = 0; i < Constants.MaxLevel; i++)
{
bool increase2 = (i - 2) % 10 == 0;
bool increase3 = (i - 3) % 10 == 0;
bool increase4 = (i - 4) % 10 == 0;
bool increase5 = (i - 5) % 10 == 0;
bool increase7 = (i - 7) % 10 == 0;
bool increase8 = (i - 8) % 10 == 0;
bool increase9 = (i - 9) % 10 == 0;
var increase2 = (i - 2) % 10 == 0;
var increase3 = (i - 3) % 10 == 0;
var increase4 = (i - 4) % 10 == 0;
var increase5 = (i - 5) % 10 == 0;
var increase7 = (i - 7) % 10 == 0;
var increase8 = (i - 8) % 10 == 0;
var increase9 = (i - 9) % 10 == 0;

swordInc++;
swordHp += swordInc;
Expand All @@ -58,12 +58,12 @@ public HpService()
_hpData[(byte)CharacterClassType.Magician, i] = basicHp;
}

int archerHp = 190;
int archerInc = 14;
var archerHp = 190;
var archerInc = 14;
for (var i = 0; i < Constants.MaxLevel; i++)
{
bool increase4 = (i - 4) % 10 == 0;
bool increase7 = (i - 7) % 10 == 0;
var increase4 = (i - 4) % 10 == 0;
var increase7 = (i - 7) % 10 == 0;

archerInc++;
archerHp += archerInc;
Expand All @@ -77,14 +77,14 @@ public HpService()
_hpData[(byte)CharacterClassType.Archer, i] = archerHp;
}

int fighterHp = 190;
int fighterInc = 14;
var fighterHp = 190;
var fighterInc = 14;
for (var i = 0; i < Constants.MaxLevel; i++)
{
bool increase2 = (i - 2) % 10 == 0;
bool increase4 = (i - 4) % 10 == 0;
bool increase6 = (i - 6) % 10 == 0;
bool increase7 = (i - 7) % 10 == 0;
var increase2 = (i - 2) % 10 == 0;
var increase4 = (i - 4) % 10 == 0;
var increase6 = (i - 6) % 10 == 0;
var increase7 = (i - 7) % 10 == 0;

fighterInc++;
fighterHp += fighterInc;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,15 @@ public JobExperienceService()
_jobXpData[(byte)CharacterClassType.Magician, 0] = 14500;
_jobXpData[(byte)CharacterClassType.MartialArtist, 0] = 14500;
_jobXpData[(byte)CharacterClassType.Swordman, 0] = 14500;
for (var i = 1; i < 20; i++)
{
_jobXpData[(byte)CharacterClassType.Adventurer, i] = _jobXpData[(byte)CharacterClassType.Adventurer, i - 1] + 700;
}

for (var i = 1; i < Constants.MaxJobLevel; i++)
{
var var2 = 4500;

if (i > 39)
if (i < 20)
{
var2 = 15000;
_jobXpData[(byte)CharacterClassType.Adventurer, i] = _jobXpData[(byte)CharacterClassType.Adventurer, i - 1] + 700;
}

_jobXpData[(byte)CharacterClassType.Archer, i] = _jobXpData[(byte)CharacterClassType.Archer, i - 1] + var2;
_jobXpData[(byte)CharacterClassType.Archer, i] = _jobXpData[(byte)CharacterClassType.Archer, i - 1] + ((i > 39) ? 15000 : 4500);

_jobXpData[(byte)CharacterClassType.Magician, i] = _jobXpData[(byte)CharacterClassType.Archer, i];
_jobXpData[(byte)CharacterClassType.MartialArtist, i] = _jobXpData[(byte)CharacterClassType.Archer, i];
Expand Down
2 changes: 1 addition & 1 deletion src/NosCore.Algorithm/NosCore.Algorithm.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<RepositoryUrl>https://github.com/NosCoreIO/NosCore.Algorithm.git</RepositoryUrl>
<PackageIconUrl></PackageIconUrl>
<PackageTags>nostale, noscore, nostale private server source, nostale emulator</PackageTags>
<Version>0.2.0</Version>
<Version>0.3.0</Version>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<Description>NosCore's Algorithm</Description>
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
Expand Down
Loading