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
39 changes: 14 additions & 25 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: 7.0.x
dotnet-version: 10.0.x

- name: Check Tag
id: check-tag
run: |
if [[ v${{ github.event.ref }} =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo ::set-output name=match::true
echo "match=true" >> $GITHUB_OUTPUT
fi

- name: Run Unit Tests
run: |
dotnet restore
dotnet build
dotnet test test/NosCore.Algorithm.Tests -v m

- name: Build Artifact
if: steps.check-tag.outputs.match == 'true'
id: build_artifact
Expand All @@ -39,24 +39,13 @@ jobs:
dotnet build -c Release
dotnet pack -c Release -o /tmp/nupkgs -v m -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
dotnet nuget push /tmp/nupkgs/NosCore.Algorithm.${{github.event.ref}}.nupkg -s https://api.nuget.org/v3/index.json -k ${{secrets.NUGET_API_KEY}}
echo ::set-output name=ARTIFACT_PATH::/tmp/nupkgs/NosCore.Algorithm.${{github.event.ref}}.nupkg
echo ::set-output name=ARTIFACT_NAME::NosCore.Algorithm.${{github.event.ref}}.nupkg

- name: Gets Latest Release
if: steps.check-tag.outputs.match == 'true'
id: latest_release_info
uses: jossef/action-latest-release-info@v1.1.0
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}

echo "ARTIFACT_PATH=/tmp/nupkgs/NosCore.Algorithm.${{github.event.ref}}.nupkg" >> $GITHUB_OUTPUT
echo "ARTIFACT_NAME=NosCore.Algorithm.${{github.event.ref}}.nupkg" >> $GITHUB_OUTPUT

- name: Upload Release Asset
if: steps.check-tag.outputs.match == 'true'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}
with:
upload_url: ${{ steps.latest_release_info.outputs.upload_url }}
asset_path: ${{ steps.build_artifact.outputs.ARTIFACT_PATH }}
asset_name: ${{ steps.build_artifact.outputs.ARTIFACT_NAME }}
asset_content_type: application/zip

GH_TOKEN: ${{ secrets.REPO_TOKEN }}
run: |
gh release upload ${{ github.event.ref }} ${{ steps.build_artifact.outputs.ARTIFACT_PATH }}

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -500,4 +500,5 @@ fabric.properties
/build/net*.*
/documentation/*.received.md
/documentation/*.received.txt
/documentation/*.approved.txt
/documentation/*.approved.txt
build_output.txt
12 changes: 12 additions & 0 deletions src/NosCore.Algorithm/CloseDefenceService/CloseDefenceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

namespace NosCore.Algorithm.CloseDefenceService
{
/// <summary>
/// Provides close combat defence value calculations for different character classes and levels
/// </summary>
public class CloseDefenceService : ICloseDefenceService
{
private readonly long[,] _closeDefence = new long[Constants.ClassCount, Constants.MaxLevel];

/// <summary>
/// Initializes a new instance of the CloseDefenceService and pre-calculates close defence values for all character classes and levels
/// </summary>
public CloseDefenceService()
{
var adventurerDefence = 4;
Expand Down Expand Up @@ -34,6 +40,12 @@ public CloseDefenceService()
}
}

/// <summary>
/// Gets the close defence value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The close defence value</returns>
public long GetCloseDefence(CharacterClassType @class, byte level)
{
return _closeDefence![(byte)@class, level - 1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

namespace NosCore.Algorithm.CloseDefenceService
{
/// <summary>
/// Service for calculating close combat defence values
/// </summary>
public interface ICloseDefenceService
{
/// <summary>
/// Gets the close defence value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The close defence value</returns>
long GetCloseDefence(CharacterClassType entityClass, byte level);
}
}
18 changes: 18 additions & 0 deletions src/NosCore.Algorithm/DamageService/DamageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@

namespace NosCore.Algorithm.DamageService
{
/// <summary>
/// Provides damage value calculations for different character classes and levels
/// </summary>
public class DamageService : IDamageService
{
private readonly long[,] _minDamage = new long[Constants.ClassCount, Constants.MaxLevel];

/// <summary>
/// Initializes a new instance of the DamageService and pre-calculates damage values for all character classes and levels
/// </summary>
public DamageService()
{
_minDamage[(byte)CharacterClassType.Adventurer, 0] = 10;
Expand Down Expand Up @@ -76,11 +82,23 @@ public DamageService()
}
}

/// <summary>
/// Gets the minimum damage value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The minimum damage value</returns>
public long GetMinDamage(CharacterClassType @class, byte level)
{
return _minDamage![(byte)@class, level - 1];
}

/// <summary>
/// Gets the maximum damage value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The maximum damage value</returns>
public long GetMaxDamage(CharacterClassType @class, byte level) => GetMinDamage(@class, level);
}
}
15 changes: 15 additions & 0 deletions src/NosCore.Algorithm/DamageService/IDamageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,25 @@

namespace NosCore.Algorithm.DamageService
{
/// <summary>
/// Service for calculating damage values for different character classes
/// </summary>
public interface IDamageService
{
/// <summary>
/// Gets the minimum damage value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The minimum damage value</returns>
long GetMinDamage(CharacterClassType entityClass, byte level);

/// <summary>
/// Gets the maximum damage value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The maximum damage value</returns>
long GetMaxDamage(CharacterClassType entityClass, byte level);
}
}
16 changes: 16 additions & 0 deletions src/NosCore.Algorithm/DignityService/DignityService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@

namespace NosCore.Algorithm.DignityService
{
/// <summary>
/// Provides dignity level and threshold calculations
/// </summary>
public class DignityService : IDignityService
{
private readonly Dictionary<DignityType, short> _dignityData = new Dictionary<DignityType, short>();

/// <summary>
/// Initializes a new instance of the DignityService and sets up dignity thresholds for each dignity type
/// </summary>
public DignityService()
{
_dignityData[DignityType.Default] = -99;
Expand All @@ -25,6 +31,11 @@ public DignityService()
_dignityData[DignityType.Failed] = -1000;
}

/// <summary>
/// Gets the dignity level type based on a dignity value
/// </summary>
/// <param name="dignity">The dignity value</param>
/// <returns>The dignity level type</returns>
public DignityType GetLevelFromDignity(short dignity)
{
foreach (var reput in Enum.GetValues(typeof(DignityType)).Cast<DignityType>())
Expand All @@ -38,6 +49,11 @@ public DignityType GetLevelFromDignity(short dignity)
return DignityType.Failed;
}

/// <summary>
/// Gets the dignity value range for a specific dignity level
/// </summary>
/// <param name="level">The dignity level type</param>
/// <returns>A tuple containing the maximum and minimum dignity values for the level</returns>
public (short, short) GetDignity(DignityType level)
{
return (level == DignityType.Default ? (short)200 : (short)(_dignityData[level - 1] - 1), _dignityData[level]);
Expand Down
14 changes: 14 additions & 0 deletions src/NosCore.Algorithm/DignityService/IDignityService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,23 @@

namespace NosCore.Algorithm.DignityService
{
/// <summary>
/// Service for calculating dignity levels and thresholds
/// </summary>
public interface IDignityService
{
/// <summary>
/// Gets the dignity level type based on a dignity value
/// </summary>
/// <param name="dignity">The dignity value</param>
/// <returns>The dignity level type</returns>
DignityType GetLevelFromDignity(short dignity);

/// <summary>
/// Gets the dignity value range for a specific dignity level
/// </summary>
/// <param name="level">The dignity level type</param>
/// <returns>A tuple containing the maximum and minimum dignity values for the level</returns>
(short, short) GetDignity(DignityType level);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

namespace NosCore.Algorithm.DistanceDefenceService
{
/// <summary>
/// Provides distance combat defence value calculations for different character classes and levels
/// </summary>
public class DistanceDefenceService : IDistanceDefenceService
{
private readonly long[,] _distanceDefence = new long[Constants.ClassCount, Constants.MaxLevel];

/// <summary>
/// Initializes a new instance of the DistanceDefenceService and pre-calculates distance defence values for all character classes and levels
/// </summary>
public DistanceDefenceService()
{
var adventurerDefence = 4;
Expand All @@ -32,6 +38,12 @@ public DistanceDefenceService()
}
}

/// <summary>
/// Gets the distance defence value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The distance defence value</returns>
public long GetDistanceDefence(CharacterClassType @class, byte level)
{
return _distanceDefence![(byte)@class, level - 1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

namespace NosCore.Algorithm.DistanceDefenceService
{
/// <summary>
/// Service for calculating distance combat defence values
/// </summary>
public interface IDistanceDefenceService
{
/// <summary>
/// Gets the distance defence value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The distance defence value</returns>
long GetDistanceDefence(CharacterClassType entityClass, byte level);
}
}
12 changes: 12 additions & 0 deletions src/NosCore.Algorithm/DistanceDodgeService/DistanceDodgeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

namespace NosCore.Algorithm.DistanceDodgeService
{
/// <summary>
/// Provides distance combat dodge value calculations for different character classes and levels
/// </summary>
public class DistanceDodgeService : IDistanceDodgeService
{
private readonly long[,] _distanceDodge = new long[Constants.ClassCount, Constants.MaxLevel];

/// <summary>
/// Initializes a new instance of the DistanceDodgeService and pre-calculates distance dodge values for all character classes and levels
/// </summary>
public DistanceDodgeService()
{
var swordmanDodge = 8;
Expand All @@ -31,6 +37,12 @@ public DistanceDodgeService()
}
}

/// <summary>
/// Gets the distance dodge value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The distance dodge value</returns>
public long GetDistanceDodge(CharacterClassType @class, byte level)
{
return _distanceDodge![(byte)@class, level - 1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

namespace NosCore.Algorithm.DistanceDodgeService
{
/// <summary>
/// Service for calculating distance combat dodge values
/// </summary>
public interface IDistanceDodgeService
{
/// <summary>
/// Gets the distance dodge value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The distance dodge value</returns>
long GetDistanceDodge(CharacterClassType entityClass, byte level);
}
}
12 changes: 12 additions & 0 deletions src/NosCore.Algorithm/DodgeService/HitDodgeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

namespace NosCore.Algorithm.HitDodgeService
{
/// <summary>
/// Provides close combat dodge value calculations for different character classes and levels
/// </summary>
public class HitDodgeService : IHitDodgeService
{
private readonly long[,] _hitDodge = new long[Constants.ClassCount, Constants.MaxLevel];

/// <summary>
/// Initializes a new instance of the HitDodgeService and pre-calculates close combat dodge values for all character classes and levels
/// </summary>
public HitDodgeService()
{
var swordmanDodge = 8;
Expand All @@ -31,6 +37,12 @@ public HitDodgeService()
}
}

/// <summary>
/// Gets the close combat dodge value for a character class at a specific level
/// </summary>
/// <param name="class">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The close combat dodge value</returns>
public long GetHitDodge(CharacterClassType @class, byte level)
{
return _hitDodge![(byte)@class, level - 1];
Expand Down
9 changes: 9 additions & 0 deletions src/NosCore.Algorithm/DodgeService/IHitDodgeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

namespace NosCore.Algorithm.HitDodgeService
{
/// <summary>
/// Service for calculating close combat dodge values
/// </summary>
public interface IHitDodgeService
{
/// <summary>
/// Gets the close combat dodge value for a character class at a specific level
/// </summary>
/// <param name="entityClass">The character class type</param>
/// <param name="level">The character level</param>
/// <returns>The close combat dodge value</returns>
long GetHitDodge(CharacterClassType entityClass, byte level);
}
}
Loading