示例#1
0
        // Desconecta o cliente
        public void Close( )
        {
            if (this.Active)
            {
                // Define que o cliente está inativo
                this.Active = false;

                // Atualiza o status do cliente
                this.Status = ClientStatus.Disconnect;

                // Log
                Log.Conn(this, false);

                // Fecha a conexão com o emulador
                this.Socket.Close(2000);
                this.Socket = null;

                // Verifica se está no mundo
                if (this.Status == ClientStatus.Game)
                {
                    Functions.RemoveFromWorld(this);
                }

                // Remove o cliente do canal
                this.Channel.Clients.Remove(this);

                //Salva as modificoes da conta
                UserAccountDAO.CreateOrUpdateAccount(this.Account);
                UserMobDAO.CreateOrUpdateChar(this.Character);
            }
        }
示例#2
0
        // Controlador
        public static void Controller(Client client, P_211 rcv)
        {
            if (!Regex.IsMatch(rcv.Name, @"^[A-Za-z0-9-]{4,12}$"))
            {
                client.Close("Nome inválido!");
            }
            else if (rcv.Slot < 0 || rcv.Slot > 3)
            {
                client.Close();
            }
            else if (!Regex.IsMatch(rcv.Password, @"^[A-Za-z0-9]{4,10}$"))
            {
                client.Close();
            }
            else
            {
                Character character = client.Account.Characters[rcv.Slot];

                // Verifica se está vaziu
                if (character == null)
                {
                    client.Close();
                }
                else if (client.Account.Numeric.Equals(rcv.Password))
                {
                    if (UserMobDAO.DeleteCharFile(character))
                    {
                        client.Character = null;
                        client.Account.Characters[rcv.Slot] = null;

                        UserAccountDAO.CreateOrUpdateAccount(client.Account);

                        // Envia os pacotes de apagar personagem
                        client.Send(P_112.New(client));
                        client.Send(P_101.New($"Personagem [{rcv.Name}] deletado!"));
                    }
                    else
                    {
                        client.Send(P_101.New($"Erro ao deletar o personagem [{rcv.Name}]!"));
                    }
                }
                else
                {
                    client.Send(P_101.New($"Senha numérica invalida!"));
                }
            }
        }
示例#3
0
        // Controlador
        public static void Controller(Client client, P_FDE rcv)
        {
            if (!Regex.IsMatch(rcv.Numeric, @"^[0-9]{4,6}$"))
            {
                client.Close("Senha numérica inválida!");
            }
            else
            {
                Log.Information($"Numeric: {rcv.Numeric}, {rcv.Numeric.Length}");

                if (client.Status == ClientStatus.Numeric)
                {
                    if (client.Account.Numeric == string.Empty)
                    {
                        client.Account.Numeric = rcv.Numeric;
                        UserAccountDAO.CreateOrUpdateAccount(client.Account);
                    }
                    if (rcv.Numeric != client.Account.Numeric)
                    {
                        client.Send(SHeader.New(0x0FDF, Marshal.SizeOf <SHeader>(), 0));
                        client.Send(P_101.New($"Senha numérica inválida!"));
                    }
                    else
                    {
                        client.Send(SHeader.New(0x0FDE, Marshal.SizeOf <SHeader>(), 0));
                        client.Send(P_101.New("Seja bem-vindo ao Open WYD Server!"));

                        client.Status = ClientStatus.Characters;
                    }
                }
                else if (client.Status == ClientStatus.Characters)
                {
                    if (rcv.Change != 1)
                    {
                        client.Close();
                    }
                    else
                    {
                        client.Send(P_101.New("Alterar senha numérica em desenvolvimento!"));
                    }
                }
                else
                {
                    client.Close();
                }
            }
        }
示例#4
0
        // Controlador
        public static void Controller(Client client, P_20F rcv)
        {
            if (!Regex.IsMatch(rcv.Name, @"^[A-Za-z0-9-]{4,12}$"))
            {
                client.Send(P_101.New("Somente letras e números no nome. 4 a 12 caracteres."));
            }
            else if (rcv.Slot < 0 || rcv.Slot > 3)
            {
                client.Close( );
            }
            else if (rcv.ClassInfo < 0 || rcv.ClassInfo > 3)
            {
                client.Close( );
            }
            else
            {
                // Retorna character da conta
                ref Character character = ref client.Account.Characters[rcv.Slot];

                // Verifica se não está vaziu
                if (character != null)
                {
                    client.Close( );
                }
                else
                {
                    character               = new Character(SMob.New());
                    character.Mob.Name      = rcv.Name;
                    character.Mob.ClassInfo = (ClassInfo)rcv.ClassInfo;
                    character               = UserMobDAO.CreateOrUpdateChar(character);

                    if (character != null)
                    {
                        //Atualiza o xml da account para salvar o novo char criado
                        UserAccountDAO.CreateOrUpdateAccount(client.Account);

                        // Envia os pacotes de criação de personagem
                        client.Send(P_110.New(client));
                        client.Send(P_101.New($"Personagem [{character.Mob.Name}] criado! Bom jogo!"));
                    }
                    else
                    {
                        client.Send(P_101.New($"Erro ao criar o personagem, contate o suporte!"));
                    }
                }
            }
示例#5
0
        // Controlador
        public static void Controller(Client client, P_20D rcv)
        {
            if (!Regex.IsMatch(rcv.UserName, @"^[A-Za-z0-9]{4,12}$"))
            {
                client.Close("Somente letras e números no login. 4 a 12 caracteres.");
            }
            else if (!Regex.IsMatch(rcv.Password, @"^[A-Za-z0-9]{4,10}$"))
            {
                client.Close("Somente letras e números na senha. 4 a 10 caracteres.");
            }
            else
            {
                Account account = UserAccountDAO.loadAccount(rcv.UserName, rcv.Password);

                //TODO: remover apos finalizar o emulador
                if (account == null)
                {
                    UserAccountDAO.CreateOrUpdateAccount(new Account(rcv.UserName, rcv.Password));
                    account = UserAccountDAO.loadAccount(rcv.UserName, rcv.Password);
                }

                if (account != null)
                {
                    client.Account = account;
                    // Prepara o pacote de login
                    P_10A p010A = P_10A.New(client);

                    p010A.UserName = rcv.UserName;

                    // Envia os pacotes pro login
                    client.Send(p010A);
                    client.Send(P_101.New($"Entre com sua senha numérica!"));

                    // Atualiza o status do cliente
                    client.Status = ClientStatus.Numeric;
                }
                else
                {
                    client.Send(P_101.New($"Usuario ou Senha invalida!"));
                }
            }
        }