Example #1
0
        public void OnCharacterListRequest(IncomingPacket packet)
        {
            CharacterListRequest request = new CharacterListRequest(packet);

            // Don't go back to character list, when you're already in there
            if (Authenticated)
            {
                return;
            }

            if (request.BuildDate != (string)ClusterServer.Config.GetSetting("ClientBuildDate"))
            {
                this.Dispose();
                return;
            }

            this.Username = request.Username;

            Account account;

            if (ClusterServer.LoginDatabase.Accounts.ContainsKey(this.Username))
            {
                account = ClusterServer.LoginDatabase.Accounts[this.Username];
            }
            else
            {
                account = SharpFly_Utility_Library.Database.LoginDatabase.Queries.Account.Instance.GetAccount(this.Username);
                if (account == null)
                {
                    this.Dispose();
                    return;
                }
                else
                {
                    ClusterServer.LoginDatabase.Accounts.Add(account.Accountname, account);
                }
            }

            if (account.Password != request.Password)
            {
                this.Dispose();
                return;
            }

            if (account.Banned)
            {
                this.Dispose();
                return;
            }

            if (!account.Verified)
            {
                this.Dispose();
                return;
            }

            Authenticated = true;
            SendServerIp();
            SendCharacterList(0);
        }
Example #2
0
        public async Task CharacterList(CharacterListRequest packet, IRakConnection connection)
        {
            // Remove the player from the zone.
            var session = UchuServer.SessionCache.GetSession(connection.EndPoint);

            if (UchuServer is WorldUchuServer worldUchuServer)
            {
                var player = worldUchuServer.FindPlayer(connection);
                if (player != null)
                {
                    await player.DestroyAsync();
                }
            }

            // Send the character list.
            await SendCharacterList(connection, session.UserId);
        }
        private async Task HandleCharacterList(CharacterListRequest request)
        {
            var response      = new CharacterListResponse();
            var characterList = await ShardSession.GetCharacterList();

            // TODO: this equipment list obviously needs revisited once items are implemented
            var equipmentCount          = Enum.GetValues(typeof(EquipmentSlot)).Length;
            var equipmentDisplayIds     = new int[equipmentCount];
            var equipmentInventoryTypes = new byte[equipmentCount];

            foreach (var character in characterList)
            {
                response.AddCharacter(character.Id, character.Name, character.Race, character.Class, character.Sex, character.Skin, character.Face, character.HairStyle,
                                      character.HairColor, character.FacialHair, character.Level, character.ZoneId, character.MapId, character.Position, 0, 0, true, 0, 0, 0, 0, 0, equipmentDisplayIds, equipmentInventoryTypes);
            }

            ForwardPacket(response);
        }
Example #4
0
        protected virtual void RealmSocket_OnRealmStartupResponse(RealmStartupResponse Packet)
        {
            RealmStartupResult result = Packet.Result;

            checked
            {
                if (result == RealmStartupResult.Success)
                {
                    this.Realm.WriteToLog("[0x" + Conversions.ToString((byte)Packet.PacketID) + "] Connection Successful", Color.Gray);
                    MainForm.BotsConnected++;
                    CharacterListRequest packet = new CharacterListRequest(8);
                    this.Realm.SendPacket(packet);
                }
                else
                {
                    this.Realm.WriteToLog("[0x" + Conversions.ToString((byte)Packet.PacketID) + "] Connection Failed, Reason: " + Packet.Result, Color.Red);
                    this.Realm.Disconnect();
                }
            }
        }
Example #5
0
        public async Task CharacterList(CharacterListRequest packet, IRakConnection connection)
        {
            var session = Server.SessionCache.GetSession(connection.EndPoint);

            await SendCharacterList(connection, session.UserId);
        }
Example #6
0
        public static void HandlePacket(byte[] Data, byte Module, PacketType Type, UInt32 Unk01, TORGameClient Client)
        {
            // TODO: Check for packet drop

            IPacket     iPacket = null;
            ClientState State   = Client.State;

            switch (State)
            {
            case ClientState.CONNECTING:
                switch (Type)
                {
                case PacketType.ConnectionHandshake:
                    iPacket = new ConnectionHandshake();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.CONNECTED:
                switch (Type)
                {
                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.AUTHED:
                switch (Type)
                {
                case PacketType.CreateCharacterRequest:
                    Log.Write(LogLevel.Warning, "\n{0}", Data.ToHEX());
                    iPacket = new CreateCharacterRequest();
                    break;

                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.ServiceRequest:
                    iPacket = new ServiceRequest();
                    break;

                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.TimeRequesterRequest:
                    iPacket = new TimeRequesterRequest();
                    break;

                case PacketType.HackNotifyData:
                    iPacket = new HackNotifyData();
                    break;

                case PacketType.CMsgC26464A9:
                    iPacket = new CMsgC26464A9();
                    break;

                case PacketType.CMsg7CB9A193:
                    iPacket = new CMsg7CB9A193();
                    break;

                case PacketType.ModulesList:
                    iPacket = new ModulesList();
                    break;

                case PacketType.AreaModulesList:
                    iPacket = new AreaModulesList();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.CharacterListRequest:
                    iPacket = new CharacterListRequest();
                    break;

                case PacketType.SelectCharacterRequest:
                    iPacket = new SelectCharacterRequest();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.IN_GAME:
                switch (Type)
                {
                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                // TODO: Implement Game Packets
                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;
            }

            if (iPacket != null)
            {
                iPacket.SetClient(Client);
                iPacket.SetBuffers(Data);
                //Log.Write(LogLevel.EDebug, "{0}", Data.ToHEX());
                iPacket.Read();
                iPacket.Run();
            }
        }