// 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); } }
// 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!")); } } }
// 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(); } } }
// 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!")); } } }
// 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!")); } } }