/// <summary> /// btk packet /// </summary> /// <param name="btkPacket"></param> public void FriendTalk(BtkPacket btkPacket) { string message = btkPacket.Message; if (message.Length > 60) { message = message.Substring(0, 60); } message = message.Trim(); var receiverSession = ServerManager.Instance.Sessions.Values.FirstOrDefault(s => s.Character.CharacterId == btkPacket.CharacterId); if (receiverSession != null) { receiverSession.SendPacket(Session.Character.GenerateTalk(message)); return; } ConnectedAccount receiver = null; List <WorldServerInfo> servers = WebApiAccess.Instance.Get <List <WorldServerInfo> >("api/channels"); foreach (var server in servers) { var accounts = WebApiAccess.Instance .Get <List <ConnectedAccount> >($"api/connectedAccount", server.WebApi); if (accounts.Any(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId)) { receiver = accounts.First(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId); } } if (receiver == null) { Session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_OFFLINE, Session.Account.Language) }); return; } ServerManager.Instance.BroadcastPacket(new PostedPacket { Packet = PacketFactory.Serialize(Session.Character.GenerateTalk(message)), ReceiverCharacter = new Data.WebApi.Character() { Id = btkPacket.CharacterId, Name = receiver.Name }, SenderCharacter = new Data.WebApi.Character() { Name = Session.Character.Name, Id = Session.Character.CharacterId }, OriginWorldId = MasterClientListSingleton.Instance.ChannelId, ReceiverType = ReceiverType.OnlySomeone }, receiver.ChannelId); }
/// <summary> /// btk packet /// </summary> /// <param name="btkPacket"></param> public void FriendTalk(BtkPacket btkPacket) { if (!Session.Character.CharacterRelations.Values.Any(s => s.RelatedCharacterId == btkPacket.CharacterId && s.RelationType != CharacterRelationType.Blocked)) { _logger.Error(Language.Instance.GetMessageFromKey(LanguageKey.USER_IS_NOT_A_FRIEND, Session.Account.Language)); return; } var message = btkPacket.Message; if (message.Length > 60) { message = message.Substring(0, 60); } message = message.Trim(); var receiverSession = Broadcaster.Instance.GetCharacter(s => s.VisualId == btkPacket.CharacterId); if (receiverSession != null) { receiverSession.SendPacket(Session.Character.GenerateTalk(message)); return; } ConnectedAccount receiver = null; var servers = WebApiAccess.Instance.Get <List <WorldServerInfo> >("api/channels"); foreach (var server in servers) { var accounts = WebApiAccess.Instance .Get <List <ConnectedAccount> >("api/connectedAccount", server.WebApi); if (accounts.Any(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId)) { receiver = accounts.First(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId); } } if (receiver == null) { Session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_OFFLINE, Session.Account.Language) }); return; } WebApiAccess.Instance.BroadcastPacket(new PostedPacket { Packet = PacketFactory.Serialize(new[] { Session.Character.GenerateTalk(message) }), ReceiverCharacter = new Character { Id = btkPacket.CharacterId, Name = receiver.ConnectedCharacter?.Name }, SenderCharacter = new Character { Name = Session.Character.Name, Id = Session.Character.CharacterId }, OriginWorldId = MasterClientListSingleton.Instance.ChannelId, ReceiverType = ReceiverType.OnlySomeone }, receiver.ChannelId); }