Пример #1
0
        public override NetworkObject ToNetworkObject()
        {
            NetworkObject class2 = new NetworkObject();

            class2.AddField(0, NetworkObjectField.CreateStringField(this.string_0));
            return(class2);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        private void AddAccount(string account)
        {
            if (friendList.ContainsKey(account))
            {
                return;
            }

            friendList.Add(account, new List <CharacterObject>());

            IEnumerable <Session> sessions = NetworkManager.FindSession(account);

            foreach (Session session in sessions)
            {
                friendList[account].Add(session.Character);

                NetworkObject characterAdd = new NetworkObject();
                characterAdd.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.Add));
                characterAdd.AddField(1, NetworkObjectField.CreateStringField(account));
                characterAdd.AddField(2, NetworkObjectField.CreateBoolField(true));
                characterAdd.AddField(3, NetworkObjectField.CreateObjectField(session.Character.ToNetworkObject()));
                owner.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.FriendList, characterAdd, false));
            }

            if (friendList[account].Count == 0)
            {
                NetworkObject accountAdd = new NetworkObject();
                accountAdd.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.Add));
                accountAdd.AddField(1, NetworkObjectField.CreateStringField(account));
                accountAdd.AddField(2, NetworkObjectField.CreateBoolField(false));
                owner.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.FriendList, accountAdd, false));
            }
        }
Пример #3
0
        public static void HandleChannel(Session session, NetworkObject networkObject)
        {
            string channelName = NetworkObjectField.ReadStringField(networkObject.GetField(1));

            if (string.IsNullOrWhiteSpace(channelName))
            {
                return;
            }

            ClientChannelAction action = (ClientChannelAction)NetworkObjectField.ReadIntField(networkObject.GetField(0));

            switch (action)
            {
            case ClientChannelAction.Join:
            {
                Channel channel = ChannelManager.GetChannel(channelName);
                channel.AddMember(session.Character);
                break;
            }

            case ClientChannelAction.Leave:
            {
                Channel channel = ChannelManager.GetChannel(channelName);
                channel?.RemoveMember(session.Character);
                break;
            }

            case ClientChannelAction.Message:
            {
                Channel channel = ChannelManager.GetChannel(channelName);
                channel.BroadcastMessage(session.Character, NetworkObjectField.ReadStringField(networkObject.GetField(2)));
                break;
            }
            }
        }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        public override void AddMember(Session member)
        {
            NetworkObject fellowshipJoin = new NetworkObject();

            fellowshipJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Join));
            fellowshipJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            member.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipJoin);

            // send existing members to new member
            foreach (CharacterObject character in members)
            {
                NetworkObject fellowshipMemberJoin2 = new NetworkObject();
                fellowshipMemberJoin2.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin));
                fellowshipMemberJoin2.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
                fellowshipMemberJoin2.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject()));
                member.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipMemberJoin2);
            }

            base.AddMember(member);
            member.Fellowships.Add(this);

            // send new member to existing members
            NetworkObject fellowshipMemberJoin = new NetworkObject();

            fellowshipMemberJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin));
            fellowshipMemberJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            fellowshipMemberJoin.AddField(2, NetworkObjectField.CreateObjectField(member.Character.ToNetworkObject()));
            BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberJoin);
        }
Пример #5
0
        public static void SendMessage(Session sender, string recipient, string message)
        {
            List <Session> recipientSessions = NetworkManager.FindSession(recipient).ToList();

            if (recipientSessions.Count == 0)
            {
                var conversationError = new NetworkObject();
                conversationError.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.NotOnline));
                conversationError.AddField(1, NetworkObjectField.CreateStringField(recipient));
                sender.EnqueueMessage(ObjectOpcode.Conversation, conversationError);
                return;
            }

            foreach (Session session in recipientSessions)
            {
                var receiveTell = new NetworkObject();
                receiveTell.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.ReceiveTell));
                receiveTell.AddField(1, NetworkObjectField.CreateStringField(sender.Account.Username));
                receiveTell.AddField(2, NetworkObjectField.CreateStringField(message));
                session.EnqueueMessage(ObjectOpcode.Conversation, receiveTell);
            }

            List <Session> senderSessions = NetworkManager.FindSession(sender.Account.Username).ToList();

            foreach (Session session in senderSessions)
            {
                var sendTell = new NetworkObject();
                sendTell.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.SendTell));
                sendTell.AddField(1, NetworkObjectField.CreateStringField(recipient));
                sendTell.AddField(2, NetworkObjectField.CreateStringField(message));
                session.EnqueueMessage(ObjectOpcode.Conversation, sendTell);
            }
        }
Пример #6
0
 public WorldLocationStructure(NetworkObject class63_0)
 {
     this.X      = NetworkObjectField.ReadDoubleField(class63_0.GetField(0));
     this.Y      = NetworkObjectField.ReadDoubleField(class63_0.GetField(1));
     this.Z      = NetworkObjectField.ReadDoubleField(class63_0.GetField(2));
     this.CellId = smethod_3(this.X, this.Y);
     this.bool_0 = false;
 }
Пример #7
0
        public override NetworkObject ToNetworkObject()
        {
            var fellowship = new NetworkObject();

            fellowship.AddField(0, NetworkObjectField.CreateStringField(Name));
            fellowship.AddField(1, NetworkObjectField.CreateIntField((int)Unknown1));
            return(fellowship);
        }
Пример #8
0
        public static void Handle08(Session session, NetworkObject networkObject)
        {
            NetworkObjectField.ReadIntField(networkObject.GetField(0));
            string recipient = NetworkObjectField.ReadStringField(networkObject.GetField(1));
            string message   = NetworkObjectField.ReadStringField(networkObject.GetField(2));

            ConversationManager.SendMessage(session, recipient, message);
        }
Пример #9
0
        public NetworkObject method_2()
        {
            NetworkObject class2 = new NetworkObject();

            class2.AddField(0, NetworkObjectField.CreateDoubleField(this.X));
            class2.AddField(1, NetworkObjectField.CreateDoubleField(this.Y));
            class2.AddField(2, NetworkObjectField.CreateDoubleField(this.Z));
            return(class2);
        }
Пример #10
0
        public override void FromNetworkObject(NetworkObject networkObject)
        {
            Server   = NetworkObjectField.ReadStringField(networkObject.GetField(0));
            Name     = NetworkObjectField.ReadStringField(networkObject.GetField(1));
            Guid     = (uint)NetworkObjectField.ReadIntField(networkObject.GetField(2));
            Sequence = (uint)NetworkObjectField.ReadLongField(networkObject.GetField(3));
            Unknown1 = NetworkObjectField.ReadStringField(networkObject.GetField(4));

            Unknown1 = Name; // ??
        }
Пример #11
0
        public override NetworkObject ToNetworkObject()
        {
            NetworkObject networkObject = new NetworkObject();

            networkObject.AddField(0, NetworkObjectField.CreateStringField(Server));
            networkObject.AddField(1, NetworkObjectField.CreateStringField(Name));
            networkObject.AddField(2, NetworkObjectField.CreateIntField((int)Guid));
            networkObject.AddField(3, NetworkObjectField.CreateLongField(Sequence));
            networkObject.AddField(4, NetworkObjectField.CreateStringField(Unknown1));
            return(networkObject);
        }
Пример #12
0
        /// <summary>
        ///
        /// </summary>
        public override void RemoveMember(Session member)
        {
            base.AddMember(member);
            member.Channels.Remove(this);

            var channelLeave = new NetworkObject();

            channelLeave.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Leave));
            channelLeave.AddField(1, NetworkObjectField.CreateStringField(name));
            channelLeave.AddField(2, NetworkObjectField.CreateStringField(GetShortcut()));
            member.EnqueueMessage(ObjectOpcode.Channel, channelLeave);
        }
Пример #13
0
        /// <summary>
        ///
        /// </summary>
        public override void AddMember(Session member)
        {
            base.AddMember(member);
            member.Channels.Add(this);

            var channelJoin = new NetworkObject();

            channelJoin.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Join));
            channelJoin.AddField(1, NetworkObjectField.CreateStringField(name));
            channelJoin.AddField(2, NetworkObjectField.CreateStringField(GetShortcut()));
            member.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.Channel, channelJoin, false));
        }
Пример #14
0
        /// <summary>
        ///
        /// </summary>
        public void RemoveAccount(string account)
        {
            if (!friendList.ContainsKey(account))
            {
                return;
            }

            friendList.Remove(account);

            NetworkObject networkObject = new NetworkObject();

            networkObject.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.Remove));
            networkObject.AddField(1, NetworkObjectField.CreateStringField(account));
            owner.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.FriendList, networkObject, false));
        }
Пример #15
0
        /// <summary>
        ///
        /// </summary>
        public void CharacterSignOut(string account, CharacterObject character)
        {
            if (!friendList.ContainsKey(account))
            {
                return;
            }

            friendList[account].Remove(character);

            NetworkObject characterSignOut = new NetworkObject();

            characterSignOut.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.SignOut));
            characterSignOut.AddField(1, NetworkObjectField.CreateStringField(account));
            characterSignOut.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject()));
            owner.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.FriendList, characterSignOut, false));
        }
Пример #16
0
        /// <summary>
        ///
        /// </summary>
        public void CharacterSignIn(string account, CharacterObject character)
        {
            if (!friendList.ContainsKey(account))
            {
                return;
            }

            friendList[account].Add(character);

            NetworkObject characterSignIn = new NetworkObject();

            characterSignIn.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.SignIn));
            characterSignIn.AddField(1, NetworkObjectField.CreateStringField(account));
            characterSignIn.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject()));
            owner.EnqueueMessage(ObjectOpcode.FriendList, characterSignIn);
        }
Пример #17
0
        /// <summary>
        /// Broadcast text message from <see cref="CharacterObject"/> to all members.
        /// </summary>
        public void BroadcastMessage(CharacterObject character, string message)
        {
            if (!HasMember(character))
            {
                return;
            }

            var channelMessage = new NetworkObject();

            channelMessage.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Message));
            channelMessage.AddField(1, NetworkObjectField.CreateObjectField(character.ToNetworkObject()));
            channelMessage.AddField(2, NetworkObjectField.CreateStringField(name));
            channelMessage.AddField(3, NetworkObjectField.CreateStringField(message));
            channelMessage.AddField(4, NetworkObjectField.CreateStringField(GetShortcut()));
            BroadcastMessage(ObjectOpcode.Channel, channelMessage);
        }
Пример #18
0
        protected override void OnRemoveMember(CharacterObject character)
        {
            Session session = NetworkManager.FindSessionByCharacter(character);

            if (session != null)
            {
                session.Channels.Remove(this);

                var channelLeave = new NetworkObject();
                channelLeave.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Leave));
                channelLeave.AddField(1, NetworkObjectField.CreateStringField(name));
                channelLeave.AddField(2, NetworkObjectField.CreateStringField(GetShortcut()));
                session.EnqueueMessage(ObjectOpcode.Channel, channelLeave);
            }

            members.Remove(character.Sequence);
        }
Пример #19
0
        /// <summary>
        ///
        /// </summary>
        public override void RemoveMember(Session member)
        {
            NetworkObject fellowshipMemberLeave = new NetworkObject();

            fellowshipMemberLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberLeave));
            fellowshipMemberLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            fellowshipMemberLeave.AddField(2, NetworkObjectField.CreateUShortField((ushort)member.Character.Sequence));
            BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberLeave);

            base.RemoveMember(member);
            member.Fellowships.Remove(this);

            NetworkObject fellowshipLeave = new NetworkObject();

            fellowshipLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Leave));
            fellowshipLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            member.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipLeave);
        }
Пример #20
0
        /// <summary>
        ///
        /// </summary>
        public void BroadcastMessage(Session member, string message)
        {
            if (!HasMember(member.Character))
            {
                return;
            }

            DatabaseManager.Database.LogConversation(name, member.Account.Username, message, member.Remote.Address.ToString());

            var channelMessage = new NetworkObject();

            channelMessage.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Message));
            channelMessage.AddField(1, NetworkObjectField.CreateObjectField(member.Character.ToNetworkObject()));
            channelMessage.AddField(2, NetworkObjectField.CreateStringField(name));
            channelMessage.AddField(3, NetworkObjectField.CreateStringField(message));
            channelMessage.AddField(4, NetworkObjectField.CreateStringField(GetShortcut()));
            BroadcastMessage(new ServerObjectPacket(ObjectOpcode.Channel, channelMessage, false));
        }
Пример #21
0
        public static void Handle0C(Session session, NetworkObject networkObject)
        {
            int action = NetworkObjectField.ReadIntField(networkObject.GetField(0));

            switch (action)
            {
            case 7:
            {
                break;
            }

            case 9:
            {
                ushort landblockId = NetworkObjectField.ReadUShortField(networkObject.GetField(1));
                break;
            }
            }
        }
Пример #22
0
        public static void HandleFriendList(Session session, NetworkObject networkObject)
        {
            ClientFriendAction action = (ClientFriendAction)NetworkObjectField.ReadIntField(networkObject.GetField(0));

            switch (action)
            {
            case ClientFriendAction.Create:
                session.FriendManager.AddAccountAll(NetworkObjectField.ReadStringField(networkObject.GetField(1)));
                break;

            case ClientFriendAction.Remove:
                session.FriendManager.RemoveAccountAll(NetworkObjectField.ReadStringField(networkObject.GetField(1)));
                break;

            default:
                log.Warn($"[{session.Account.Username}] Invalid FriendAction {action}!");
                break;
            }
        }
Пример #23
0
        protected override void OnAddMember(CharacterObject character)
        {
            Session session = NetworkManager.FindSessionByCharacter(character);

            if (session == null)
            {
                return;
            }

            session.Channels.Add(this);

            var channelJoin = new NetworkObject();

            channelJoin.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Join));
            channelJoin.AddField(1, NetworkObjectField.CreateStringField(name));
            channelJoin.AddField(2, NetworkObjectField.CreateStringField(GetShortcut()));
            session.EnqueueMessage(ObjectOpcode.Channel, channelJoin);

            members.Add(character.Sequence, character);
        }
Пример #24
0
        public static void SendMessage(Session sender, string recipient, string message)
        {
            List <Session> recipientSessions = NetworkManager.FindSession(recipient).ToList();

            if (recipientSessions.Count == 0)
            {
                var conversationError = new NetworkObject();
                conversationError.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.NotOnline));
                conversationError.AddField(1, NetworkObjectField.CreateStringField(recipient));
                sender.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.Conversation, conversationError, false));
                return;
            }

            foreach (Session session in recipientSessions)
            {
                var receiveTell = new NetworkObject();
                receiveTell.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.ReceiveTell));
                receiveTell.AddField(1, NetworkObjectField.CreateStringField(sender.Account.Username));
                receiveTell.AddField(2, NetworkObjectField.CreateStringField(message));
                session.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.Conversation, receiveTell, false));
            }

            List <Session> senderSessions = NetworkManager.FindSession(sender.Account.Username).ToList();

            foreach (Session session in senderSessions)
            {
                var sendTell = new NetworkObject();
                sendTell.AddField(0, NetworkObjectField.CreateIntField((int)ConversationAction.SendTell));
                sendTell.AddField(1, NetworkObjectField.CreateStringField(recipient));
                sendTell.AddField(2, NetworkObjectField.CreateStringField(message));
                session.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.Conversation, sendTell, false));
            }

            if (!sender.Account.Username.Equals(recipient, StringComparison.InvariantCultureIgnoreCase))
            {
                DatabaseManager.Database.LogConversation(sender.Account.Username, recipient, message,
                                                         sender.Remote.Address.ToString(), recipientSessions[0].Remote.Address.ToString());
            }
        }
Пример #25
0
        public override byte[] Construct(PacketEncryptor encryptor)
        {
            var packet = new NetworkObject();

            packet.AddField(0, NetworkObjectField.CreateIntField((int)opcode));
            packet.AddField(1, NetworkObjectField.CreateObjectField(networkObject));

            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write(0u);
                    writer.WritePackedUInt32((uint)flags);
                    writer.Write(NetworkObject.Pack(packet));

                    int length = (int)stream.Length - sizeof(int);
                    writer.Seek(0, SeekOrigin.Begin);
                    writer.Write(length);

                    return(stream.ToArray());
                }
            }
        }
Пример #26
0
        protected override void OnRemoveMember(CharacterObject character)
        {
            NetworkObject fellowshipMemberLeave = new NetworkObject();

            fellowshipMemberLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberLeave));
            fellowshipMemberLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            fellowshipMemberLeave.AddField(2, NetworkObjectField.CreateUShortField((ushort)character.Sequence));
            BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberLeave);

            members.Remove(character.Sequence);

            Session session = NetworkManager.FindSessionByCharacter(character);

            if (session != null)
            {
                session.Fellowships.Remove(this);

                NetworkObject fellowshipLeave = new NetworkObject();
                fellowshipLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Leave));
                fellowshipLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
                session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipLeave);
            }
        }
Пример #27
0
        protected override void OnAddMember(CharacterObject character)
        {
            Session session = NetworkManager.FindSessionByCharacter(character);

            if (session == null)
            {
                return;
            }

            NetworkObject fellowshipJoin = new NetworkObject();

            fellowshipJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Join));
            fellowshipJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipJoin);

            // send existing members to new member
            foreach (CharacterObject existingCharacter in members.Values)
            {
                NetworkObject fellowshipMemberJoinExisting = new NetworkObject();
                fellowshipMemberJoinExisting.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin));
                fellowshipMemberJoinExisting.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
                fellowshipMemberJoinExisting.AddField(2, NetworkObjectField.CreateObjectField(existingCharacter.ToNetworkObject()));
                session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipMemberJoinExisting);
            }

            members.Add(character.Sequence, character);
            session.Fellowships.Add(this);

            // send new member to existing members
            NetworkObject fellowshipMemberJoin = new NetworkObject();

            fellowshipMemberJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin));
            fellowshipMemberJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject()));
            fellowshipMemberJoin.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject()));
            BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberJoin);
        }
Пример #28
0
        public static void HandleFellowship(Session session, NetworkObject networkObject)
        {
            FellowshipAction action         = (FellowshipAction)NetworkObjectField.ReadIntField(networkObject.GetField(0));
            FellowshipObject fellowshipInfo = new FellowshipObject();

            fellowshipInfo.FromNetworkObject(networkObject.GetField(1).ReadObject());

            switch (action)
            {
            case FellowshipAction.Join:
            {
                Fellowship fellowship = FellowshipManager.GetFellowship(fellowshipInfo);
                fellowship.AddMember(session);
                break;
            }

            case FellowshipAction.Leave:
            {
                Fellowship fellowship = FellowshipManager.GetFellowship(fellowshipInfo);
                fellowship?.RemoveMember(session);
                break;
            }
            }
        }
Пример #29
0
 public override void FromNetworkObject(NetworkObject class63_0)
 {
     this.string_0 = NetworkObjectField.ReadStringField(class63_0.GetField(0));
 }
Пример #30
0
 public override void FromNetworkObject(NetworkObject fellowship)
 {
     Name     = NetworkObjectField.ReadStringField(fellowship.GetField(0));
     Unknown1 = (Enum16)NetworkObjectField.ReadIntField(fellowship.GetField(1));
 }