server-master/srcs/_plugins/Plugin.FamilyImpl/FamilyListMembersEventHandler.cs
2026-02-10 18:21:30 +01:00

56 lines
No EOL
2.7 KiB
C#

using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Families;
using WingsEmu.Game.Families.Event;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums.Character;
using WingsEmu.Packets.Enums.Chat;
namespace Plugin.FamilyImpl
{
public class FamilyListMembersEventHandler : IAsyncEventProcessor<FamilyListMembersEvent>
{
private readonly IGameLanguageService _gameLanguageService;
private readonly ISessionManager _sessionManager;
public FamilyListMembersEventHandler(IGameLanguageService gameLanguageService, ISessionManager sessionManager)
{
_gameLanguageService = gameLanguageService;
_sessionManager = sessionManager;
}
public async Task HandleAsync(FamilyListMembersEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
if (!session.PlayerEntity.IsInFamily())
{
session.SendInfo(_gameLanguageService.GetLanguage(GameDialogKey.FAMILY_INFO_NOT_IN_FAMILY, e.Sender.UserLanguage));
return;
}
IFamily family = session.PlayerEntity.Family;
session.SendChatMessage($"== Members of {family.Name} ==", ChatMessageColorType.Yellow);
foreach (FamilyMembership member in family.Members.OrderBy(s => s.Authority).ThenBy(s => s.Character.Name))
{
string className = member.Character.Class switch
{
ClassType.Adventurer => _gameLanguageService.GetLanguage(GameDialogKey.CLASS_NAME_ADVENTURER, e.Sender.UserLanguage),
ClassType.Archer => _gameLanguageService.GetLanguage(GameDialogKey.CLASS_NAME_ARCHER, e.Sender.UserLanguage),
ClassType.Magician => _gameLanguageService.GetLanguage(GameDialogKey.CLASS_NAME_MAGE, e.Sender.UserLanguage),
ClassType.Swordman => _gameLanguageService.GetLanguage(GameDialogKey.CLASS_NAME_SWORDSMAN, e.Sender.UserLanguage),
ClassType.Wrestler => _gameLanguageService.GetLanguage(GameDialogKey.CLASS_NAME_MARTIAL_ARTIST, e.Sender.UserLanguage),
_ => ""
};
string state = _sessionManager.IsOnline(member.CharacterId) ? $"ONLINE (Ch. {member.Character.ChannelId})" : "OFFLINE";
session.SendChatMessage($"{member.Character.Name}({_gameLanguageService.GetLanguage(member.Authority.GetMemberLanguageKey(), session.UserLanguage)}) " +
$"- Lv. {member.Character.Level} - {className} - {state}", ChatMessageColorType.Yellow);
}
}
}
}