Skip to content

Commit

Permalink
Another battle fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Aragas committed Jun 5, 2023
1 parent b0d0630 commit 64f8403
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 46 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using P3D.Legacy.Common.Data.P3DDatas;

namespace P3D.Legacy.Common.Packets.Battle
{
public sealed record BattleClientDataFromClientPacket() : P3DPacket(P3DPacketType.BattleClientData)
{
public Origin DestinationPlayerOrigin { get => DataItemStorage.GetOrigin(0); init => DataItemStorage.Set(0, value); }
public BattleClientData BattleData { get => new(DataItemStorage.Get(1)); init => DataItemStorage.Set(1, value.ToP3DString()); }

public void Deconstruct(out Origin destinationPlayerOrigin, out BattleClientData battleData)
{
destinationPlayerOrigin = DestinationPlayerOrigin;
battleData = BattleData;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace P3D.Legacy.Common.Packets.Battle
{
public sealed record BattleClientDataPacket() : P3DPacket(P3DPacketType.BattleClientData)
public sealed record BattleClientDataToClientPacket() : P3DPacket(P3DPacketType.BattleClientData)
{
public Origin DestinationPlayerOrigin { get => DataItemStorage.GetOrigin(0); init => DataItemStorage.Set(0, value); }
public BattleClientData BattleData { get => new(DataItemStorage.Get(1)); init => DataItemStorage.Set(1, value.ToP3DString()); }
Expand Down
4 changes: 2 additions & 2 deletions src/P3D.Legacy.Common/Packets/P3DPacketFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class P3DPacketClientFactory : IP3DPacketFactory
P3DPacketType.BattleQuit => new BattleQuitPacket(),
P3DPacketType.BattleOffer => new BattleOfferToClientPacket(),
P3DPacketType.BattleStart => new BattleStartPacket(),
P3DPacketType.BattleClientData => new BattleClientDataPacket(),
P3DPacketType.BattleClientData => new BattleClientDataToClientPacket(),
P3DPacketType.BattleHostData => new BattleHostDataToClientPacket(),
P3DPacketType.BattleEndRoundData => new BattleEndRoundDataToClientPacket(),
P3DPacketType.ServerInfoData => new ServerInfoDataPacket(),
Expand Down Expand Up @@ -75,7 +75,7 @@ public class P3DPacketServerFactory : IP3DPacketFactory
P3DPacketType.BattleQuit => new BattleQuitPacket(),
P3DPacketType.BattleOffer => new BattleOfferFromClientPacket(),
P3DPacketType.BattleStart => new BattleStartPacket(),
P3DPacketType.BattleClientData => new BattleClientDataPacket(),
P3DPacketType.BattleClientData => new BattleClientDataFromClientPacket(),
P3DPacketType.BattleHostData => new BattleHostDataFromClientPacket(),
P3DPacketType.BattleEndRoundData => new BattleEndRoundDataFromClientPacket(),
P3DPacketType.ServerInfoData => new ServerInfoDataPacket(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,41 +143,33 @@ public async Task HandleAsync(IReceiveContext<PlayerSentRawP3DPacketEvent> conte
var (player, p3dPacket) = context.Message;

if (Origin == player.Origin) return;
if (Id.GameJoltIdOrNone.IsNone != player.Id.GameJoltIdOrNone.IsNone)
{
switch (p3dPacket)
{
case BattleRequestPacket:
await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, player, "GameJolt and Non-GameJolt interaction is not supported!"), ct);
await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(player, new BattleQuitPacket { Origin = Origin, DestinationPlayerOrigin = player.Origin }), ct);
break;
case BattleQuitPacket:
await SendPacketAsync(p3dPacket, ct);
break;
}
return;
}

if (p3dPacket is BattleOfferFromClientPacket battleOfferFromClientPacket)
{
if (battleOfferFromClientPacket.DestinationPlayerOrigin != Origin) return;
await SendPacketAsync(new BattleOfferToClientPacket { Origin = battleOfferFromClientPacket.Origin, BattleData = battleOfferFromClientPacket.BattleData }, ct);
return;
}
if (p3dPacket is BattleHostDataFromClientPacket battleHostDataFromClientPacket)
{
if (battleHostDataFromClientPacket.DestinationPlayerOrigin != Origin) return;
await SendPacketAsync(new BattleHostDataToClientPacket { Origin = battleHostDataFromClientPacket.Origin, BattleData = battleHostDataFromClientPacket.BattleData }, ct);
return;
}
if (p3dPacket is BattleEndRoundDataFromClientPacket battleEndRoundDataFromClientPacket)
switch (p3dPacket)
{
if (battleEndRoundDataFromClientPacket.DestinationPlayerOrigin != Origin) return;
await SendPacketAsync(new BattleEndRoundDataToClientPacket { Origin = battleEndRoundDataFromClientPacket.Origin, BattleData = battleEndRoundDataFromClientPacket.BattleData }, ct);
return;
case BattleRequestPacket when Id.GameJoltIdOrNone.IsNone != player.Id.GameJoltIdOrNone.IsNone:
await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, player, "GameJolt and Non-GameJolt interaction is not supported!"), ct);
await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(player, new BattleQuitPacket { Origin = Origin, DestinationPlayerOrigin = player.Origin }), ct);
return;
case BattleOfferFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return;
case BattleOfferFromClientPacket packet:
await SendPacketAsync(new BattleOfferToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct);
return;
case BattleClientDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return;
case BattleClientDataFromClientPacket packet:
await SendPacketAsync(new BattleClientDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct);
return;
case BattleHostDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return;
case BattleHostDataFromClientPacket packet:
await SendPacketAsync(new BattleHostDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct);
return;
case BattleEndRoundDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return;
case BattleEndRoundDataFromClientPacket packet:
await SendPacketAsync(new BattleEndRoundDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct);
return;
default:
await SendPacketAsync(p3dPacket, ct);
return;
}

await SendPacketAsync(p3dPacket, ct);
}

public async Task HandleAsync(IReceiveContext<ServerMessageEvent> context, CancellationToken ct)
Expand Down Expand Up @@ -241,18 +233,17 @@ public async Task HandleAsync(IReceiveContext<PlayerTradeInitiatedEvent> context
{
await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, initiator, "GameJolt and Non-GameJolt interaction is not supported!"), ct);
await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct);
return;
}

if (await _commandDispatcher.DispatchAsync(new TradeOfferCommand(initiator, this), ct) is { IsSuccess: true })
{
await SendPacketAsync(new TradeRequestPacket { Origin = initiator.Origin, DestinationPlayerOrigin = target }, ct);
}
else
{
if (await _commandDispatcher.DispatchAsync(new TradeOfferCommand(initiator, this), ct) is { IsSuccess: true })
{
await SendPacketAsync(new TradeRequestPacket { Origin = initiator.Origin, DestinationPlayerOrigin = target }, ct);
}
else
{
await _commandDispatcher.DispatchAsync(new TradeAbortCommand(initiator, this), ct);
await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct);
}
await _commandDispatcher.DispatchAsync(new TradeAbortCommand(initiator, this), ct);
await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private async Task HandlePacketAsync(P3DPacket? packet, CancellationToken ct)

switch (packet)
{
case BattleClientDataPacket battleClientDataPacket:
case BattleClientDataFromClientPacket battleClientDataPacket:
await HandleBattleClientDataAsync(battleClientDataPacket, ct);
break;
case BattleHostDataFromClientPacket battleHostDataPacket:
Expand Down Expand Up @@ -432,7 +432,7 @@ private async Task HandleTradeStartAsync(TradeStartPacket packet, CancellationTo
await _eventDispatcher.DispatchAsync(new PlayerTradeConfirmedEvent(this, packet.DestinationPlayerOrigin), ct);
}

private async Task HandleBattleClientDataAsync(BattleClientDataPacket packet, CancellationToken ct)
private async Task HandleBattleClientDataAsync(BattleClientDataFromClientPacket packet, CancellationToken ct)
{
if (State != PlayerState.Initialized)
return;
Expand Down

0 comments on commit 64f8403

Please sign in to comment.