예제 #1
0
        public Task get_Key_Bienvenida_Login(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta         = cliente.cuenta;
            cuenta.key_bienvenida = paquete.Substring(2);

            await cliente.enviar_Paquete_Async(GlobalConf.version_dofus);
            await cliente.enviar_Paquete_Async($"{cliente.cuenta.configuracion.nombre_cuenta}\n{Hash.encriptar_Password(cliente.cuenta.configuracion.password, cliente.cuenta.key_bienvenida)}");
            await cliente.enviar_Paquete_Async("Af");
        });
예제 #2
0
        public Task get_Personaje_Seleccionado(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta            = cliente.cuenta;
            PersonajeJuego personaje = cuenta.juego.personaje;
            string[] _loc4           = paquete.Substring(4).Split('|');

            int id        = int.Parse(_loc4[0]);
            string nombre = _loc4[1];
            byte nivel    = byte.Parse(_loc4[2]);
            byte raza_id  = byte.Parse(_loc4[3]);
            byte sexo     = byte.Parse(_loc4[4]);

            personaje.set_Datos_Personaje(id, nombre, nivel, sexo, raza_id);
            personaje.esta_conectado = true;
            personaje.inventario.agregar_Objetos(_loc4[9]);

            cuenta.juego.personaje.timer_afk.Change(1200000, 1200000);
            cuenta.pelea_extension.configuracion.cargar();
            cuenta.juego.personaje.evento_Personaje_Seleccionado();

            await cliente.enviar_Paquete_Async("GC1");

            if (cuenta.es_lider_grupo && cuenta.tiene_grupo)
            {
                await cuenta.grupo.get_Esperar_Miembros_Conectados();
                cuenta.grupo.get_Invitar_Grupo_Miembros();
            }
        });
예제 #3
0
        public Task get_Lista_Personajes(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta   = cliente.cuenta;
            string[] _loc6_ = paquete.Substring(3).Split('|');
            int contador    = 2, id_personaje = 0;
            bool encontrado = false;

            while (contador < _loc6_.Length && !encontrado)
            {
                string[] _loc11_ = _loc6_[contador].Split(';');
                id_personaje     = int.Parse(_loc11_[0]);
                string nombre    = _loc11_[1];

                if (nombre.ToLower().Equals(cuenta.configuracion.nombre_personaje.ToLower()) || string.IsNullOrEmpty(cuenta.configuracion.nombre_personaje))
                {
                    encontrado = true;
                }

                contador++;
            }

            await Task.Delay(1000);

            if (!cuenta.juego.personaje.esta_conectado && encontrado)
            {
                await cliente.enviar_Paquete_Async("AS" + id_personaje, true);
            }
        });
예제 #4
0
        public Task get_Lista_Servidores(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta          = cliente.cuenta;
            ServidorJuego servidor = cuenta.juego.servidor;
            string[] loc5          = paquete.Substring(3).Split('|');
            int contador           = 1;
            bool seleccionado      = false;

            while (contador < loc5.Length && !seleccionado)
            {
                string[] _loc10_ = loc5[contador].Split(',');
                int id           = int.Parse(_loc10_[0]);

                if (id == servidor.id)
                {
                    if (servidor.estado == EstadosServidor.CONECTADO)
                    {
                        seleccionado = true;
                        cuenta.juego.personaje.evento_Servidor_Seleccionado();
                    }
                    else
                    {
                        cuenta.logger.log_Error("LOGIN", "Servidor no accesible cuando este accesible se re-conectara");
                    }
                }
                contador++;
            }

            if (seleccionado)
            {
                await cliente.enviar_Paquete_Async($"AX{servidor.id}", true);
            }
        });
예제 #5
0
        public Task get_Servidor_Estado(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta = cliente.cuenta;
            string[] separado_servidores = paquete.Substring(2).Split('|');
            ServidorJuego servidor       = cuenta.juego.servidor;
            bool primera_vez             = true;

            foreach (string sv in separado_servidores)
            {
                string[] separador = sv.Split(';');

                int id = int.Parse(separador[0]);
                EstadosServidor estado = (EstadosServidor)byte.Parse(separador[1]);
                string nombre          = cuenta.configuracion.get_Servidor_Nombre(id);

                if (nombre.Equals(cuenta.configuracion.servidor))
                {
                    servidor.actualizar_Datos(id, nombre, estado);
                    cuenta.logger.log_informacion("LOGIN", $"El servidor {nombre} esta {estado}");

                    if (estado != EstadosServidor.CONECTADO)
                    {
                        primera_vez = false;
                    }
                }
            }

            if (!primera_vez && servidor.estado == EstadosServidor.CONECTADO)
            {
                await cliente.enviar_Paquete_Async("Ax");
            }
        });
예제 #6
0
        public Task get_Pregunta_Secreta(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            while (cliente.cuenta.juego.servidor.estado != EstadosServidor.CONECTADO)
            {
                await Task.Delay(500);
            }

            await cliente.enviar_Paquete_Async("Ax", true);
        });
예제 #7
0
        public Task get_Combate_Turno_Listo(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta = cliente.cuenta;
            int id        = int.Parse(paquete.Substring(3));

            if (cuenta.juego.personaje.id == id)
            {
                cuenta.juego.pelea.get_Turno_Acabado();
            }

            await Task.Delay(200);
            await cliente.enviar_Paquete_Async("GT");
        });
예제 #8
0
        public Task get_Peticion_Grupo(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta           = cliente.cuenta;
            string nombre_invitador = paquete.Substring(3).Split('|')[0];

            if (nombre_invitador.Equals(cuenta.juego.personaje.nombre))
            {
                return;
            }

            if (cuenta.tiene_grupo)
            {
                cuenta.grupo.get_Esta_En_Grupo(nombre_invitador);
                await cliente.enviar_Paquete_Async("PA");
            }
            else
            {
                await cliente.enviar_Paquete_Async("PR");
            }

            cliente.cuenta.logger.log_informacion("Grupo", $"Nueva invitación de grupo del personaje: {nombre_invitador}");
        });
예제 #9
0
        public Task get_Verificar_Archivo(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            string[] separador = paquete.Substring(2).Split(';');
            int id             = int.Parse(separador[0]), bytes = -1;
            string archivo     = separador[1];

            if (archivo.Contains("core.swf"))
            {
                bytes = GlobalConf.peso_core;
            }
            else if (archivo.Contains("loader.swf"))
            {
                bytes = GlobalConf.peso_loader;
            }

            await cliente.enviar_Paquete_Async($"BC{id};{bytes}", false);
            cliente.cuenta.logger.log_Error("ANTI-BOT", $"Se ha revisado el archivo: {archivo}");
        });
예제 #10
0
        public Task get_Combate_Celdas_Posicion(ClienteTcp cliente, string paquete) => Task.Run(async() =>
        {
            Cuenta cuenta = cliente.cuenta;
            Mapa mapa     = cuenta.juego.mapa;
            Pelea pelea   = cuenta.juego.pelea;

            if (!cuenta.esta_Luchando() || pelea.estado_pelea != 2)
            {
                return;
            }

            await Task.Delay(1000);

            if (cuenta.pelea_extension.configuracion.posicionamiento != PosicionamientoInicioPelea.INMOVIL)
            {
                string[] _loc3 = paquete.Substring(2).Split('|');
                List <Celda> celdas_preparacion = new List <Celda>();

                for (int a = 0; a < _loc3[0].Length; a += 2)
                {
                    celdas_preparacion.Add(mapa.get_Celda_Id((short)((Hash.get_Hash(_loc3[0][a]) << 6) + Hash.get_Hash(_loc3[0][a + 1]))));
                }

                List <Celda> celdas_preparacion_disponibles = celdas_preparacion.Except(cuenta.juego.pelea.get_Aliados.Select(aliado => aliado.celda)).ToList();

                /** la posicion es aleatoria pero el paquete GP siempre aparecera primero el team donde esta el pj **/
                short celda_posicion = pelea.get_Celda_Mas_Cercana_O_Lejana(cuenta.pelea_extension.configuracion.posicionamiento == PosicionamientoInicioPelea.CERCA_DE_ENEMIGOS, celdas_preparacion_disponibles);

                if (celda_posicion != pelea.jugador_luchador.celda.id)
                {
                    await cliente.enviar_Paquete_Async("Gp" + celda_posicion, true);
                    await Task.Delay(300);
                }
            }

            if (cuenta.tiene_grupo && cuenta.es_lider_grupo)
            {
                await cliente.enviar_Paquete_Async("fP");
                await cuenta.grupo.get_Esperar_Miembros_Unirse_Pelea();

                if (pelea.pelea_iniciada)
                {
                    return;
                }
            }

            await Task.Delay(300);

            if (cuenta.pelea_extension.configuracion.desactivar_espectador)
            {
                await cliente.enviar_Paquete_Async("fS");
            }

            await Task.Delay(300);

            if (cuenta.puede_utilizar_dragopavo)
            {
                if (cuenta.pelea_extension.configuracion.utilizar_dragopavo && !cuenta.juego.personaje.esta_utilizando_dragopavo)
                {
                    await cliente.enviar_Paquete_Async("Rr");
                    cuenta.juego.personaje.esta_utilizando_dragopavo = true;
                }
            }

            await Task.Delay(300);
            await cliente.enviar_Paquete_Async("GR1");//boton listo
        });
예제 #11
0
 public Task get_Combate_Finalizado(ClienteTcp cliente, string paquete) => Task.Run(async() =>
 {
     cliente.cuenta.juego.pelea.get_Combate_Acabado();
     await cliente.enviar_Paquete_Async("GC1");
 });
예제 #12
0
 public Task get_Stats_Actualizados(ClienteTcp cliente, string paquete) => Task.Run(async() =>
 {
     cliente.cuenta.juego.personaje.actualizar_Caracteristicas(paquete);
     await cliente.enviar_Paquete_Async("BD");
 });
예제 #13
0
 public Task get_Peticion_Intercambio(ClienteTcp cliente, string paquete) => Task.Run(async() =>
 {
     cliente.cuenta.logger.log_informacion("INFORMACIÓN", "Invitación de intercambio recibida, rechazando");
     await cliente.enviar_Paquete_Async("EV", true);
 });
예제 #14
0
 public Task get_Idioma_Core(ClienteTcp cliente, string paquete) => Task.Run(async() =>
 {
     await cliente.enviar_Paquete_Async("Ages");
     await cliente.enviar_Paquete_Async("AL");
     await cliente.enviar_Paquete_Async("Af");
 });
예제 #15
0
 public Task resultado_Servidor_Seleccion(ClienteTcp cliente, string paquete) => Task.Run(async() =>
 {
     await cliente.enviar_Paquete_Async("Ak0");
     await cliente.enviar_Paquete_Async("AV");
 });
예제 #16
0
 public Task get_Bienvenida_juego(ClienteTcp cliente, string paquete) => Task.Run(async() => await cliente.enviar_Paquete_Async("AT" + cliente.cuenta.tiquet_game));