69 lines
2.5 KiB
C#
69 lines
2.5 KiB
C#
using System;
|
|
using System.Buffers.Binary;
|
|
using AcDream.Core.Net.Messages;
|
|
using Xunit;
|
|
|
|
namespace AcDream.Core.Net.Tests.Messages;
|
|
|
|
public sealed class CharacterActionsTests
|
|
{
|
|
[Fact]
|
|
public void BuildRaiseAttribute_HasOpcode0x0045AndXp64()
|
|
{
|
|
byte[] body = CharacterActions.BuildRaiseAttribute(seq: 1, attrId: 5, xpSpent: 12345678);
|
|
Assert.Equal(24, body.Length);
|
|
Assert.Equal(CharacterActions.RaiseAttributeOpcode,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8)));
|
|
Assert.Equal(5u,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(12)));
|
|
Assert.Equal(12345678u,
|
|
BinaryPrimitives.ReadUInt64LittleEndian(body.AsSpan(16)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildRaiseVital_HasOpcode0x0044()
|
|
{
|
|
byte[] body = CharacterActions.BuildRaiseVital(seq: 1, vitalId: 1, xpSpent: 100);
|
|
Assert.Equal(CharacterActions.RaiseVitalOpcode,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildRaiseSkill_HasOpcode0x0046()
|
|
{
|
|
byte[] body = CharacterActions.BuildRaiseSkill(seq: 1, skillId: 8, xpSpent: 500);
|
|
Assert.Equal(CharacterActions.RaiseSkillOpcode,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildTrainSkill_U32CreditsNotU64()
|
|
{
|
|
byte[] body = CharacterActions.BuildTrainSkill(seq: 1, skillId: 8, credits: 4);
|
|
Assert.Equal(20, body.Length); // 12 + 4 + 4 vs 16 for 4+8
|
|
Assert.Equal(CharacterActions.TrainSkillOpcode,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8)));
|
|
Assert.Equal(4u,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(16)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildChangeCombatMode_EnumSerialises()
|
|
{
|
|
byte[] body = CharacterActions.BuildChangeCombatMode(
|
|
seq: 1, CharacterActions.CombatMode.Melee);
|
|
Assert.Equal(CharacterActions.ChangeCombatModeOpcode,
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8)));
|
|
Assert.Equal(2u, // Melee = 2
|
|
BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(12)));
|
|
}
|
|
|
|
[Fact]
|
|
public void CombatMode_UsesRetailAceBitValues()
|
|
{
|
|
Assert.Equal(1u, (uint)CharacterActions.CombatMode.NonCombat);
|
|
Assert.Equal(2u, (uint)CharacterActions.CombatMode.Melee);
|
|
Assert.Equal(4u, (uint)CharacterActions.CombatMode.Missile);
|
|
Assert.Equal(8u, (uint)CharacterActions.CombatMode.Magic);
|
|
}
|
|
}
|