public void SetState(long characterId, MinilandState state) { if (_minilandIds.ContainsKey(characterId)) { var ml = _minilandIds[characterId]; var miniland = _mapInstanceProvider.GetMapInstance(ml.MapInstanceId); ml.State = state; if (ml.State != MinilandState.Open) { if (ml.State == MinilandState.Private) { List <long> friends = _friendHttpClient.GetListFriends(characterId) .Select(s => s.CharacterId) .ToList(); // Kick all players in miniland except owner and his friends miniland.Kick(o => o.VisualId != characterId && !friends.Contains(o.VisualId)); } else { miniland.Kick(o => o.VisualId != characterId); } } return; } throw new ArgumentException(); }
public static void SendFinfo(this ICharacterEntity visualEntity, IFriendHttpClient friendHttpClient, IPacketHttpClient packetHttpClient, ISerializer packetSerializer, bool isConnected) { var friendlist = friendHttpClient.GetListFriends(visualEntity.VisualId); foreach (var friend in friendlist) { packetHttpClient.BroadcastPacket(new PostedPacket { Packet = packetSerializer.Serialize(new[] { new FinfoPacket { FriendList = new List <FinfoSubPackets> { new FinfoSubPackets { CharacterId = visualEntity.VisualId, IsConnected = isConnected } } } }), ReceiverType = ReceiverType.OnlySomeone, SenderCharacter = new Data.WebApi.Character { Id = visualEntity.VisualId, Name = visualEntity.Name }, ReceiverCharacter = new Data.WebApi.Character { Id = friend.CharacterId, Name = friend.CharacterName } }); } }
public override void Execute(FdelPacket fdelPacket, ClientSession session) { var list = _friendHttpClient.GetListFriends(session.Character.VisualId); var idtorem = list.FirstOrDefault(s => s.CharacterId == fdelPacket.CharacterId); if (idtorem != null) { _friendHttpClient.DeleteFriend(idtorem.CharacterRelationId); session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_DELETED, session.Account.Language) }); var targetCharacter = Broadcaster.Instance.GetCharacter(s => s.VisualId == fdelPacket.CharacterId); if (targetCharacter != null) { targetCharacter.SendPacket(targetCharacter.GenerateFinit(_friendHttpClient, _channelHttpClient, _connectedAccountHttpClient)); } session.Character.SendPacket(session.Character.GenerateFinit(_friendHttpClient, _channelHttpClient, _connectedAccountHttpClient)); } else { session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.NOT_IN_FRIENDLIST, session.Account.Language) }); } }
public override void Execute(MJoinPacket mJoinPacket, ClientSession session) { var target = Broadcaster.Instance.GetCharacter(s => s.VisualId == mJoinPacket.VisualId); var friendList = _friendHttpClient.GetListFriends(session.Character.CharacterId); if (target != null && friendList.Any(s => s.CharacterId == mJoinPacket.VisualId)) { var miniland = _minilandProvider.GetMiniland(mJoinPacket.VisualId); if (miniland.State == MinilandState.Open) { session.ChangeMapInstance(miniland.MapInstanceId, 5, 8); } else { if (miniland.State == MinilandState.Private && friendList.Where(w => w.RelationType != CharacterRelationType.Blocked) .Select(s => s.CharacterId) .ToList() .Contains(target.VisualId)) { session.ChangeMapInstance(miniland.MapInstanceId, 5, 8); return; } session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.MINILAND_CLOSED_BY_FRIEND, session.Account.Language) }); } } }
public override void Execute(BtkPacket btkPacket, ClientSession session) { var friendlist = _friendHttpClient.GetListFriends(session.Character.VisualId); if (!friendlist.Any(s => s.CharacterId == btkPacket.CharacterId)) { _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; } var receiver = _connectedAccountHttpClient.GetCharacter(btkPacket.CharacterId, null); if (receiver.Item2 == null) //TODO: Handle 404 in WebApi { session.SendPacket(new InfoPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_OFFLINE, session.Account.Language) }); return; } _packetHttpClient.BroadcastPacket(new PostedPacket { Packet = _packetSerializer.Serialize(new[] { session.Character.GenerateTalk(message) }), ReceiverCharacter = new Character { Id = btkPacket.CharacterId, Name = receiver.Item2.ConnectedCharacter?.Name }, SenderCharacter = new Character { Name = session.Character.Name, Id = session.Character.CharacterId }, OriginWorldId = MasterClientListSingleton.Instance.ChannelId, ReceiverType = ReceiverType.OnlySomeone }, receiver.Item2.ChannelId); }
public static FinitPacket GenerateFinit(this ICharacterEntity visualEntity, IFriendHttpClient friendHttpClient, IChannelHttpClient channelHttpClient, IConnectedAccountHttpClient connectedAccountHttpClient) { //same canal var servers = channelHttpClient.GetChannels() ?.Where(c => c.Type == ServerType.WorldServer).ToList(); var accounts = new List <ConnectedAccount>(); foreach (var server in servers ?? new List <ChannelInfo>()) { accounts.AddRange( connectedAccountHttpClient.GetConnectedAccount(server)); } var subpackets = new List <FinitSubPacket>(); var friendlist = friendHttpClient.GetListFriends(visualEntity.VisualId); //TODO add spouselist //var spouseList = _webApiAccess.Get<List<CharacterRelationDto>>(WebApiRoute.Spouse, friendServer.WebApi, visualEntity.VisualId) ?? new List<CharacterRelationDto>(); foreach (var relation in friendlist) { var account = accounts.Find(s => (s.ConnectedCharacter != null) && (s.ConnectedCharacter.Id == relation.CharacterId)); subpackets.Add(new FinitSubPacket { CharacterId = relation.CharacterId, RelationType = relation.RelationType, IsOnline = account != null, CharacterName = relation.CharacterName }); } return(new FinitPacket { SubPackets = subpackets }); }