feat: 实现地面技能智能释放、极速交互完成与雇员探险一键重派三项业务扩展

This commit is contained in:
2026-10-14 01:10:58 +08:00
parent bddff722dc
commit a6cccdbc43
4 changed files with 279 additions and 33 deletions
+25
View File
@@ -160,6 +160,31 @@ public static class AuditedPacketEncoder
: null);
}
public static EncodedGamePacket EncodeActionSendPos(OpcodeMap map, string version, uint actionId, byte actionKind,
ushort requestId, System.Numerics.Vector3 position, ushort facing = 0, ushort targetFacing = 0)
{
RequireAuditedVersion(version);
if (actionId == 0) throw new ArgumentException("技能 ID 不能为 0", nameof(actionId));
if (requestId == 0) throw new ArgumentException("请求序号 RequestId 必须大于 0", nameof(requestId));
if (!float.IsFinite(position.X) || !float.IsFinite(position.Y) || !float.IsFinite(position.Z))
throw new ArgumentException("地面目标坐标包含无效浮点数", nameof(position));
var opcode = RequireOpcode(map, version, PacketDirection.Up, "UP_ActionSendPos");
var responseOpcode = map.ResolveOpcode(version, PacketDirection.Down, "DOWN_Effect");
var payload = new byte[0x18];
BinaryPrimitives.WriteUInt32LittleEndian(payload.AsSpan(0, 4), actionId);
payload[5] = actionKind;
BinaryPrimitives.WriteUInt16LittleEndian(payload.AsSpan(6, 2), requestId);
BinaryPrimitives.WriteUInt16LittleEndian(payload.AsSpan(8, 2), facing);
BinaryPrimitives.WriteUInt16LittleEndian(payload.AsSpan(10, 2), targetFacing);
BinaryPrimitives.WriteSingleLittleEndian(payload.AsSpan(12, 4), position.X);
BinaryPrimitives.WriteSingleLittleEndian(payload.AsSpan(16, 4), position.Y);
BinaryPrimitives.WriteSingleLittleEndian(payload.AsSpan(20, 4), position.Z);
return new("UP_ActionSendPos", opcode, payload, NativeSendPacket.BuildBuffer(opcode, payload), responseOpcode,
responseOpcode.HasValue
? p => p.Length == 0x7C && BinaryPrimitives.ReadUInt16LittleEndian(p.Slice(0x18, 2)) == requestId
: null);
}
private static (string Name, int Capacity, int Length) SelectEventTier(string prefix, int argCount) => argCount switch
{
< 0 or > 255 => throw new ArgumentOutOfRangeException(nameof(argCount), "事件参数数量超出 0..255 范围"),