server-master/srcs/_plugins/WingsEmu.Plugins.PacketHandling/Game/ScriptedInstance/MkRaidPacketHandler.cs
2026-02-10 18:21:30 +01:00

59 lines
No EOL
2.2 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using WingsAPI.Packets.Enums;
using WingsEmu.Game;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Raids.Events;
using WingsEmu.Packets.ClientPackets;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.PacketHandling.Game.ScriptedInstance;
public class MkRaidPacketHandler : GenericGamePacketHandlerBase<MkraidPacket>
{
private readonly IGameLanguageService _gameLanguage;
public MkRaidPacketHandler(IGameLanguageService gameLanguage) => _gameLanguage = gameLanguage;
protected override async Task HandlePacketAsync(IClientSession session, MkraidPacket packet)
{
if (!session.PlayerEntity.IsInRaidParty)
{
session.SendChatMessage(_gameLanguage.GetLanguage(GameDialogKey.RAID_CHATMESSAGE_START_NOT_IN_RAID_PARTY, session.UserLanguage), ChatMessageColorType.PlayerSay);
return;
}
if (!session.PlayerEntity.IsRaidLeader(session.PlayerEntity.Id))
{
session.SendChatMessage(_gameLanguage.GetLanguage(GameDialogKey.RAID_CHATMESSAGE_START_IS_NOT_LEADER, session.UserLanguage), ChatMessageColorType.PlayerSay);
return;
}
if (session.PlayerEntity.Raid.Started)
{
return;
}
IPortalEntity portal = session.CurrentMapInstance.Portals.FirstOrDefault(s =>
session.PlayerEntity.PositionY >= s.PositionY - 1 &&
session.PlayerEntity.PositionY <= s.PositionY + 1 &&
session.PlayerEntity.PositionX >= s.PositionX - 1 &&
session.PlayerEntity.PositionX <= s.PositionX + 1);
if (portal == null || portal.Type != PortalType.Raid || portal.RaidType == null)
{
return;
}
if (session.PlayerEntity.Raid.Type != (RaidType)portal.RaidType.Value)
{
session.SendChatMessage(_gameLanguage.GetLanguage(GameDialogKey.RAID_CHATMESSAGE_START_RAID_TYPE_IS_WRONG, session.UserLanguage), ChatMessageColorType.PlayerSay);
return;
}
await session.EmitEventAsync(new RaidInstanceStartEvent());
}
}