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

56 lines
No EOL
1.8 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsAPI.Game.Extensions.Groups;
using WingsEmu.Game._enum;
using WingsEmu.Game._i18n;
using WingsEmu.Game._ItemUsage.Configuration;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
namespace WingsEmu.Plugins.BasicImplementations.Event.Characters;
public class VehicleRemoveEventHandler : IAsyncEventProcessor<RemoveVehicleEvent>
{
private readonly IGameLanguageService _gameLanguage;
private readonly ISpPartnerConfiguration _spPartner;
public VehicleRemoveEventHandler(IGameLanguageService gameLanguage, ISpPartnerConfiguration spPartner)
{
_gameLanguage = gameLanguage;
_spPartner = spPartner;
}
public async Task HandleAsync(RemoveVehicleEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
if (!session.PlayerEntity.IsOnVehicle)
{
return;
}
if (e.ShowMates && !session.PlayerEntity.IsInvisible())
{
session.BroadcastInTeamMembers(_gameLanguage, _spPartner);
}
session.PlayerEntity.RandomMapTeleport = null;
session.RefreshParty(_spPartner);
Buff speedBooster = session.PlayerEntity.BuffComponent.GetBuff((short)BuffVnums.SPEED_BOOSTER);
await session.PlayerEntity.RemoveBuffAsync(false, speedBooster);
session.PlayerEntity.IsOnVehicle = false;
await session.EmitEventAsync(new GetDefaultMorphEvent());
session.RefreshStatChar();
session.BroadcastEq();
session.RefreshStat();
session.SendCondPacket();
session.PlayerEntity.LastSpeedChange = DateTime.UtcNow;
}
}