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

189 lines
No EOL
9.8 KiB
C#

using System.Threading.Tasks;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Groups;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Networking.Broadcasting;
using WingsEmu.Packets.ClientPackets;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Character;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.PacketHandling.Game.Basic;
public class CharacterOptionPacketHandler : GenericGamePacketHandlerBase<CharacterOptionPacket>
{
private readonly IGameLanguageService _language;
private readonly ISessionManager _sessionManager;
public CharacterOptionPacketHandler(IGameLanguageService language, ISessionManager sessionManager)
{
_language = language;
_sessionManager = sessionManager;
}
protected override async Task HandlePacketAsync(IClientSession session, CharacterOptionPacket characterOptionPacket)
{
if (characterOptionPacket == null)
{
return;
}
switch (characterOptionPacket.Option)
{
case CharacterOption.BuffBlocked:
session.PlayerEntity.BuffBlocked = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.BuffBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_BUFF_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_BUFF_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.EmoticonsBlocked:
session.PlayerEntity.EmoticonsBlocked = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.EmoticonsBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_EMOTE_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_EMOTE_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.ExchangeBlocked:
session.PlayerEntity.ExchangeBlocked = !characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.ExchangeBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_TRADE_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_TRADE_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.FriendRequestBlocked:
session.PlayerEntity.FriendRequestBlocked = !characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.FriendRequestBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_FRIEND_REQUESTS_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_FRIEND_REQUESTS_ENABLED,
session.UserLanguage), MsgMessageType.Middle);
break;
case CharacterOption.GroupRequestBlocked:
session.PlayerEntity.GroupRequestBlocked = !characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.GroupRequestBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_GROUP_REQUESTS_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_GROUP_REQUESTS_ENABLED,
session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.PetAutoRelive:
session.PlayerEntity.IsPetAutoRelive = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.IsPetAutoRelive ? GameDialogKey.OPTIONS_SHOUTMESSAGE_PET_AUTO_RELIVE_ENABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_PET_AUTO_RELIVE_DISABLED,
session.UserLanguage), MsgMessageType.Middle);
break;
case CharacterOption.PartnerAutoRelive:
session.PlayerEntity.IsPartnerAutoRelive = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.IsPartnerAutoRelive ? GameDialogKey.OPTIONS_SHOUTMESSAGE_PARTNER_AUTO_RELIVE_ENABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_PARTNER_AUTO_RELIVE_DISABLED,
session.UserLanguage), MsgMessageType.Middle);
break;
case CharacterOption.HeroChatBlocked:
session.PlayerEntity.HeroChatBlocked = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.HeroChatBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_SPEAKERS_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_SPEAKERS_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.HpBlocked:
session.PlayerEntity.HpBlocked = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.HpBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_HP_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_HP_ENABLED, session.UserLanguage), MsgMessageType.Middle);
break;
case CharacterOption.MinilandInviteBlocked:
session.PlayerEntity.MinilandInviteBlocked = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.MinilandInviteBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_MINILAND_INVITES_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_MINILAND_INVITES_ENABLED,
session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.MouseAimLock:
session.PlayerEntity.MouseAimLock = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.MouseAimLock ? GameDialogKey.OPTIONS_SHOUTMESSAGE_MOUSE_ENABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_MOUSE_DISABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.QuickGetUp:
session.PlayerEntity.QuickGetUp = characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.QuickGetUp ? GameDialogKey.OPTIONS_SHOUTMESSAGE_QUICK_GET_UP_ENABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_QUICK_GET_UP_DISABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.WhisperBlocked:
session.PlayerEntity.WhisperBlocked = !characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.WhisperBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_WHISPER_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_WHISPER_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.FamilyRequestBlocked:
session.PlayerEntity.FamilyRequestBlocked = !characterOptionPacket.IsActive;
session.SendMsg(_language.GetLanguage(
session.PlayerEntity.FamilyRequestBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_FAMILY_REQUESTS_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_FAMILY_REQUESTS_ENABLED,
session.UserLanguage), MsgMessageType.Middle);
break;
case CharacterOption.HideHat:
session.PlayerEntity.HideHat = !characterOptionPacket.IsActive;
session.SendMsg(
_language.GetLanguage(session.PlayerEntity.HideHat ? GameDialogKey.OPTIONS_SHOUTMESSAGE_HIDE_HAT_ENABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_HIDE_HAT_DISABLED,
session.UserLanguage), MsgMessageType.Middle);
session.BroadcastEq();
break;
case CharacterOption.UiBlocked:
session.PlayerEntity.UiBlocked = !characterOptionPacket.IsActive;
session.SendMsg(
_language.GetLanguage(session.PlayerEntity.UiBlocked ? GameDialogKey.OPTIONS_SHOUTMESSAGE_UI_DISABLED : GameDialogKey.OPTIONS_SHOUTMESSAGE_UI_ENABLED, session.UserLanguage),
MsgMessageType.Middle);
break;
case CharacterOption.GroupSharing:
if (!session.PlayerEntity.IsInGroup())
{
return;
}
PlayerGroup grp = session.PlayerEntity.GetGroup();
if (!session.PlayerEntity.IsLeaderOfGroup(session.PlayerEntity.Id))
{
session.SendMsg(_language.GetLanguage(GameDialogKey.GROUP_SHOUTMESSAGE_YOU_ARE_NOT_LEADER, session.UserLanguage), MsgMessageType.Middle);
return;
}
if (characterOptionPacket.IsActive == false)
{
grp.SharingMode = GroupSharingType.Everyone;
await _sessionManager.BroadcastAsync(async g =>
{
string message = _language.GetLanguage(GameDialogKey.GROUP_SHOUTMESSAGE_SHARING, g.UserLanguage);
return g.GenerateMsgPacket(message, MsgMessageType.Middle);
}, new GroupBroadcast(grp));
}
else
{
grp.SharingMode = GroupSharingType.ByOrder;
await _sessionManager.BroadcastAsync(async g =>
{
string message = _language.GetLanguage(GameDialogKey.GROUP_SHOUTMESSAGE_SHARING_BY_ORDER, g.UserLanguage);
return g.GenerateMsgPacket(message, MsgMessageType.Middle);
}, new GroupBroadcast(grp));
}
break;
}
session.RefreshStat();
}
}