server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Exchange/ExchangeJoinEventHandler.cs
2026-02-10 18:21:30 +01:00

54 lines
No EOL
2 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.Game.Configurations;
using WingsEmu.Game.Exchange;
using WingsEmu.Game.Exchange.Event;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
namespace WingsEmu.Plugins.BasicImplementations.Event.Exchange;
public class ExchangeJoinEventHandler : IAsyncEventProcessor<ExchangeJoinEvent>
{
private readonly IBankReputationConfiguration _bankReputationConfiguration;
private readonly IRankingManager _rankingManager;
private readonly IReputationConfiguration _reputationConfiguration;
public ExchangeJoinEventHandler(IReputationConfiguration reputationConfiguration, IBankReputationConfiguration bankReputationConfiguration, IRankingManager rankingManager)
{
_reputationConfiguration = reputationConfiguration;
_bankReputationConfiguration = bankReputationConfiguration;
_rankingManager = rankingManager;
}
public async Task HandleAsync(ExchangeJoinEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
IClientSession target = e.Target;
if (session.PlayerEntity.IsInExchange())
{
return;
}
if (target.PlayerEntity.IsInExchange())
{
return;
}
var senderExchange = new PlayerExchange(session.PlayerEntity.Id, target.PlayerEntity.Id);
var targetExchange = new PlayerExchange(target.PlayerEntity.Id, session.PlayerEntity.Id);
session.PlayerEntity.SetExchange(senderExchange);
target.PlayerEntity.SetExchange(targetExchange);
session.SendEmptyExchangeWindow(target.PlayerEntity.Id);
target.SendEmptyExchangeWindow(session.PlayerEntity.Id);
session.SendGbexPacket(_reputationConfiguration, _bankReputationConfiguration, _rankingManager.TopReputation);
target.SendGbexPacket(_reputationConfiguration, _bankReputationConfiguration, _rankingManager.TopReputation);
}
}