using System; using System.Collections.Generic; using System.Text; namespace ET { public class SendChatEvent : AEvent { public override async ETTask Run(EventType.SendChat args) { try { Unit sender = args.sender; ChatType chatType = args.chatType; string content = args.content; switch (chatType) { case ChatType.NoneChat: case ChatType.Private: Log.Error($"chatType = {chatType} is invalid"); break; case ChatType.Normal: { foreach (var unit in MapSceneComponent.Instance.GetMap(sender).GetAll()) { if (unit.Id == sender.Id) { continue; } MessageHelper.SendActor(unit, new M2C_SendNormalChat { Id = sender.Id, Type = chatType, Content = content, Name = (await UserComponent.Instance.Query(sender.Id)).NickName }); } } break; case ChatType.Team: { Team team = TeamComponent.Instance.Get(sender.TeamLeaderId); foreach (var unit in team.GetUnits()) { if (unit.Id == sender.Id) { continue; } MessageHelper.SendActor(unit, new M2C_SendNormalChat { Id = sender.Id, Type = chatType, Content = content, Name = (await UserComponent.Instance.Query(sender.Id)).NickName }); } } break; case ChatType.World: { foreach (var unit in MapUnitComponent.Instance.GetAll()) { if (unit.Id == sender.Id) { continue; } MessageHelper.SendActor(unit, new M2C_SendNormalChat { Id = sender.Id, Type = chatType, Content = content, Name = (await UserComponent.Instance.Query(sender.Id)).NickName }); } } break; case ChatType.Family: { User user = await UserComponent.Instance.Query(sender.Id); Family family =await FamilyComponent.Instance.Query(user.Family); if (family == null) return; foreach (var familyMemberId in family.GetAllId()) { if (familyMemberId == sender.Id) { continue; } Unit unit = MapUnitComponent.Instance.Get(familyMemberId); if (unit) { MessageHelper.SendActor(unit, new M2C_SendNormalChat { Id = sender.Id, Type = chatType, Content = content, Name = user.NickName }); } } } break; case ChatType.Camp: { } break; } } catch (Exception e) { Log.Error(e); } await ETTask.CompletedTask; } } }