コード例 #1
0
        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();
        }
コード例 #2
0
        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
                    }
                });
            }
        }
コード例 #3
0
ファイル: FdelPacketHandler.cs プロジェクト: erodem/NosCore
        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)
                });
            }
        }
コード例 #4
0
        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)
                    });
                }
            }
        }
コード例 #5
0
ファイル: BtkPacketHandler.cs プロジェクト: erodem/NosCore
        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);
        }
コード例 #6
0
        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
            });
        }