using System.Net; using AcDream.Core.Combat; using AcDream.Core.Net; using AcDream.Core.Net.Messages; namespace AcDream.Core.Net.Tests; public sealed class WorldSessionCombatTests { private static WorldSession NewSession() { var ep = new IPEndPoint(IPAddress.Loopback, 65000); return new WorldSession(ep); } [Fact] public void SendChangeCombatMode_UsesSequenceAndRetailModeValue() { using var session = NewSession(); byte[]? captured = null; session.GameActionCapture = body => captured = body; session.SendChangeCombatMode(CombatMode.Magic); Assert.NotNull(captured); Assert.Equal(CharacterActions.BuildChangeCombatMode( 1, CharacterActions.CombatMode.Magic), captured); } [Fact] public void SendMeleeAttack_UsesRetailMeleeBuilder() { using var session = NewSession(); byte[]? captured = null; session.GameActionCapture = body => captured = body; session.SendMeleeAttack(0x50000002u, AttackHeight.High, 0.75f); Assert.NotNull(captured); Assert.Equal(AttackTargetRequest.BuildMelee( 1, 0x50000002u, (uint)AttackHeight.High, 0.75f), captured); } [Fact] public void SendMissileAttack_UsesRetailMissileBuilder() { using var session = NewSession(); byte[]? captured = null; session.GameActionCapture = body => captured = body; session.SendMissileAttack(0x50000003u, AttackHeight.Low, 0.5f); Assert.NotNull(captured); Assert.Equal(AttackTargetRequest.BuildMissile( 1, 0x50000003u, (uint)AttackHeight.Low, 0.5f), captured); } [Fact] public void SendCancelAttack_UsesRetailCancelBuilder() { using var session = NewSession(); byte[]? captured = null; session.GameActionCapture = body => captured = body; session.SendCancelAttack(); Assert.NotNull(captured); Assert.Equal(AttackTargetRequest.BuildCancel(1), captured); } }