Beispiel #1
0
 // Token: 0x06000310 RID: 784 RVA: 0x0000C28C File Offset: 0x0000A68C
 internal Juego(Cuenta cuenta)
 {
     this.servidor  = new ServidorJuego();
     this.mapa      = new Mapa();
     this.personaje = new PersonajeJuego(cuenta);
     this.manejador = new Manejador(cuenta, this.mapa, this.personaje);
     this.pelea     = new Pelea(cuenta);
 }
Beispiel #2
0
 internal GameClass(Account prmAccount)
 {
     server    = new GameServer();
     map       = new Map();
     character = new CharacterClass(prmAccount);
     manager   = new Manejador(prmAccount, map, character);
     fight     = new Pelea(prmAccount);
 }
Beispiel #3
0
 internal Juego(Cuenta cuenta)
 {
     servidor  = new ServidorJuego();
     mapa      = new Mapa();
     personaje = new PersonajeJuego(cuenta);
     manejador = new Manejador(cuenta, mapa, personaje);
     pelea     = new Pelea(cuenta);
 }
Beispiel #4
0
 public Cuenta(CuentaConf _cuenta_configuracion)
 {
     cuenta_configuracion = _cuenta_configuracion;
     servidor_id          = cuenta_configuracion.get_Servidor_Id();
     logger          = new Logger();
     pelea           = new Pelea(this);
     pelea_extension = new PeleaExtensiones(this);
     conexion        = new ClienteLogin(IPAddress.Parse(GlobalConf.ip_conexion), GlobalConf.puerto_conexion, this);
 }
Beispiel #5
0
 public Cuenta(CuentaConf _cuenta_configuracion)
 {
     cuenta_configuracion = _cuenta_configuracion;
     servidor_id          = cuenta_configuracion.get_Servidor_Id();
     logger          = new Logger();
     pelea           = new Pelea(this);
     juego           = new Juego(this);
     pelea_extension = new PeleaExtensiones(this);
     script          = new ManejadorScript(this);
     conexion        = new ClienteTcp(this);
 }
Beispiel #6
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    mapa.Dispose();
                    personaje.Dispose();
                    manejador.Dispose();
                    pelea.Dispose();
                    servidor.Dispose();
                }

                servidor  = null;
                mapa      = null;
                personaje = null;
                manejador = null;
                pelea     = null;
                disposed  = true;
            }
        }
Beispiel #7
0
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    map.Dispose();
                    character.Dispose();
                    manager.Dispose();
                    fight.Dispose();
                    server.Dispose();
                }

                server    = null;
                map       = null;
                character = null;
                manager   = null;
                fight     = null;
                _disposed = true;
            }
        }
Beispiel #8
0
        // Token: 0x06000314 RID: 788 RVA: 0x0000C370 File Offset: 0x0000A770
        protected virtual void Dispose(bool disposing)
        {
            bool flag = !this.disposed;

            if (flag)
            {
                if (disposing)
                {
                    this.mapa.Dispose();
                    this.personaje.Dispose();
                    this.manejador.Dispose();
                    this.pelea.Dispose();
                    this.servidor.Dispose();
                }
                this.servidor  = null;
                this.mapa      = null;
                this.personaje = null;
                this.manejador = null;
                this.pelea     = null;
                this.disposed  = true;
            }
        }
Beispiel #9
0
        public async Task get_Movimientos_Personajes(TcpClient cliente, string paquete)
        {
            Account cuenta = cliente.account;

            string[] separador_jugadores = paquete.Substring(3).Split('|'), informaciones;
            string   _loc6, nombre_template, tipo;

            for (int i = 0; i < separador_jugadores.Length; ++i)
            {
                _loc6 = separador_jugadores[i];
                if (_loc6.Length != 0)
                {
                    informaciones = _loc6.Substring(1).Split(';');
                    if (_loc6[0].Equals('+'))
                    {
                        Cell  celda = cuenta.game.map.GetCellFromId(short.Parse(informaciones[0]));
                        Pelea pelea = cuenta.game.fight;
                        int   id    = int.Parse(informaciones[3]);
                        nombre_template = informaciones[4];
                        tipo            = informaciones[5];
                        if (tipo.Contains(","))
                        {
                            tipo = tipo.Split(',')[0];
                        }

                        switch (int.Parse(tipo))
                        {
                        case -1:
                        case -2:
                            if (cuenta.accountState == AccountStates.FIGHTING)
                            {
                                int  vida   = int.Parse(informaciones[12]);
                                byte pa     = byte.Parse(informaciones[13]);
                                byte pm     = byte.Parse(informaciones[14]);
                                byte equipo = byte.Parse(informaciones[15]);

                                pelea.get_Agregar_Luchador(new Luchadores(id, true, vida, pa, pm, celda, vida, equipo));
                            }
                            break;

                        case -3:    //monstruos
                            string[] templates = nombre_template.Split(',');
                            string[] niveles   = informaciones[7].Split(',');

                            Monstruos monstruo = new Monstruos(id, int.Parse(templates[0]), celda, int.Parse(niveles[0]));
                            monstruo.lider_grupo = monstruo;

                            for (int m = 1; m < templates.Length; ++m)
                            {
                                monstruo.moobs_dentro_grupo.Add(new Monstruos(id, int.Parse(templates[m]), celda, int.Parse(niveles[m])));
                            }

                            cuenta.game.map.entities.TryAdd(id, monstruo);
                            break;

                        case -4:    //NPC
                            cuenta.game.map.entities.TryAdd(id, new Npcs(id, int.Parse(nombre_template), celda));
                            break;

                        case -5:
                        case -6:
                        case -7:
                        case -8:
                        case -9:
                        case -10:
                            break;

                        default:    // jugador
                            if (cuenta.accountState != AccountStates.FIGHTING)
                            {
                                if (cuenta.game.character.id != id)
                                {
                                    cuenta.game.map.entities.TryAdd(id, new Personajes(id, nombre_template, byte.Parse(informaciones[7].ToString()), celda));
                                }
                                else
                                {
                                    cuenta.game.character.celda = celda;
                                }
                            }
                            else
                            {
                                int  vida   = int.Parse(informaciones[14]);
                                byte pa     = byte.Parse(informaciones[15]);
                                byte pm     = byte.Parse(informaciones[16]);
                                byte equipo = byte.Parse(informaciones[24]);

                                pelea.get_Agregar_Luchador(new Luchadores(id, true, vida, pa, pm, celda, vida, equipo));

                                if (cuenta.game.character.id == id && cuenta.fightExtension.configuracion.posicionamiento != PosicionamientoInicioPelea.INMOVIL)
                                {
                                    await Task.Delay(300);

                                    /** 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.fightExtension.configuracion.posicionamiento == PosicionamientoInicioPelea.CERCA_DE_ENEMIGOS, pelea.celdas_preparacion);
                                    await Task.Delay(300);

                                    if (celda_posicion != celda.cellId)
                                    {
                                        cuenta.connexion.SendPacket("Gp" + celda_posicion, true);
                                    }
                                    else
                                    {
                                        cuenta.connexion.SendPacket("GR1");
                                    }
                                }
                                else if (cuenta.game.character.id == id)
                                {
                                    await Task.Delay(300);

                                    cuenta.connexion.SendPacket("GR1");    //boton listo
                                }
                            }
                            break;
                        }
                    }
                    else if (_loc6[0].Equals('-'))
                    {
                        if (cuenta.accountState != AccountStates.FIGHTING)
                        {
                            int id = int.Parse(_loc6.Substring(1));
                            cuenta.game.map.entities.TryRemove(id, out Entidad entidad);
                        }
                    }
                }
            }
        }
Beispiel #10
0
        public async Task get_Iniciar_Accion(TcpClient cliente, string paquete)
        {
            string[]       separador = paquete.Substring(2).Split(';');
            int            id_accion = int.Parse(separador[1]);
            Account        cuenta    = cliente.account;
            CharacterClass personaje = cuenta.game.character;

            if (id_accion > 0)
            {
                int        id_entidad = int.Parse(separador[2]);
                byte       tipo_gkk_movimiento;
                Cell       celda;
                Luchadores luchador;
                Map        mapa  = cuenta.game.map;
                Pelea      pelea = cuenta.game.fight;

                switch (id_accion)
                {
                case 1:
                    celda = mapa.GetCellFromId(Hash.Get_Cell_From_Hash(separador[3].Substring(separador[3].Length - 2)));

                    if (!cuenta.IsFighting())
                    {
                        if (id_entidad == personaje.id && celda.cellId > 0 && personaje.celda.cellId != celda.cellId)
                        {
                            tipo_gkk_movimiento = byte.Parse(separador[0]);

                            await cuenta.game.manager.movimientos.evento_Movimiento_Finalizado(celda, tipo_gkk_movimiento, true);
                        }
                        else if (mapa.entities.TryGetValue(id_entidad, out Entidad entidad))
                        {
                            entidad.celda = celda;

                            if (GlobalConfig.show_debug_messages)
                            {
                                cuenta.logger.log_informacion("DEBUG", "Mouvement détecté d'une entité vers la cellule : " + celda.cellId);
                            }
                        }
                        mapa.GetEntitiesRefreshEvent();
                    }
                    else
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        if (luchador != null)
                        {
                            luchador.celda = celda;

                            if (luchador.id == personaje.id)
                            {
                                tipo_gkk_movimiento = byte.Parse(separador[0]);

                                await Task.Delay(400 + (100 * personaje.celda.GetDistanceBetweenCells(celda)));

                                cuenta.connexion.SendPacket("GKK" + tipo_gkk_movimiento);
                            }
                        }
                    }
                    break;

                case 4:
                    separador = separador[3].Split(',');
                    celda     = mapa.GetCellFromId(short.Parse(separador[1]));

                    if (!cuenta.IsFighting() && id_entidad == personaje.id && celda.cellId > 0 && personaje.celda.cellId != celda.cellId)
                    {
                        personaje.celda = celda;
                        await Task.Delay(150);

                        cuenta.connexion.SendPacket("GKK1");
                        mapa.GetEntitiesRefreshEvent();
                        cuenta.game.manager.movimientos.movimiento_Actualizado(true);
                    }
                    break;

                case 5:
                    if (cuenta.IsFighting())
                    {
                        separador = separador[3].Split(',');
                        luchador  = pelea.get_Luchador_Por_Id(int.Parse(separador[0]));

                        if (luchador != null)
                        {
                            luchador.celda = mapa.GetCellFromId(short.Parse(separador[1]));
                        }
                    }
                    break;

                case 102:
                    if (cuenta.IsFighting())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        byte pa_utilizados = byte.Parse(separador[3].Split(',')[1].Substring(1));

                        if (luchador != null)
                        {
                            luchador.pa -= pa_utilizados;
                        }
                    }
                    break;

                case 103:
                    if (cuenta.IsFighting())
                    {
                        int id_muerto = int.Parse(separador[3]);

                        luchador = pelea.get_Luchador_Por_Id(id_muerto);
                        if (luchador != null)
                        {
                            luchador.esta_vivo = false;
                        }
                    }
                    break;

                case 129:     //movimiento en pelea con exito
                    if (cuenta.IsFighting())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        byte pm_utilizados = byte.Parse(separador[3].Split(',')[1].Substring(1));

                        if (luchador != null)
                        {
                            luchador.pm -= pm_utilizados;
                        }

                        if (luchador.id == personaje.id)
                        {
                            pelea.get_Movimiento_Exito(true);
                        }
                    }
                    break;

                case 151:    //obstaculos invisibles
                    if (cuenta.IsFighting())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);

                        if (luchador != null && luchador.id == personaje.id)
                        {
                            cuenta.logger.log_Error("INFORMATION", "Il n'est pas possible d'effectuer cette action à cause d'un obstacle invisible.");
                            pelea.get_Hechizo_Lanzado(short.Parse(separador[3]), false);
                        }
                    }
                    break;

                case 181:     //efecto de invocacion (pelea)
                    celda = mapa.GetCellFromId(short.Parse(separador[3].Substring(1)));
                    short id_luchador = short.Parse(separador[6]);
                    short vida        = short.Parse(separador[15]);
                    byte  pa          = byte.Parse(separador[16]);
                    byte  pm          = byte.Parse(separador[17]);
                    byte  equipo      = byte.Parse(separador[25]);

                    pelea.get_Agregar_Luchador(new Luchadores(id_luchador, true, vida, pa, pm, celda, vida, equipo, id_entidad));
                    break;

                case 302:    //fallo critico
                    if (cuenta.IsFighting() && id_entidad == cuenta.game.character.id)
                    {
                        pelea.get_Hechizo_Lanzado(0, false);
                    }
                    break;

                case 300:     //hechizo lanzado con exito
                    if (cuenta.IsFighting() && id_entidad == cuenta.game.character.id)
                    {
                        short celda_id_lanzado = short.Parse(separador[3].Split(',')[1]);
                        pelea.get_Hechizo_Lanzado(celda_id_lanzado, true);
                    }
                    break;

                case 501:
                    int tiempo_recoleccion = int.Parse(separador[3].Split(',')[1]);
                    celda = mapa.GetCellFromId(short.Parse(separador[3].Split(',')[0]));
                    byte tipo_gkk_recoleccion = byte.Parse(separador[0]);

                    await cuenta.game.manager.recoleccion.evento_Recoleccion_Iniciada(id_entidad, tiempo_recoleccion, celda.cellId, tipo_gkk_recoleccion);

                    break;

                case 900:
                    cuenta.connexion.SendPacket("GA902" + id_entidad, true);
                    cuenta.logger.log_informacion("INFORMATION", "Le défi avec le personnage ID : " + id_entidad + " est annulée");
                    break;
                }
            }
        }
        public override string Contraatacar(Pelea pelea)
        {
            //Hacer algo con el contexto

            return "Patada";
        }
Beispiel #12
0
        public async Task get_Iniciar_Accion(ClienteTcp cliente, string paquete)
        {
            string[]       separador = paquete.Substring(2).Split(';');
            int            id_accion = int.Parse(separador[1]);
            Cuenta         cuenta    = cliente.cuenta;
            PersonajeJuego personaje = cuenta.juego.personaje;

            if (id_accion > 0)
            {
                int        id_entidad = int.Parse(separador[2]);
                byte       tipo_gkk_movimiento;
                Celda      celda;
                Luchadores luchador;
                Mapa       mapa  = cuenta.juego.mapa;
                Pelea      pelea = cuenta.juego.pelea;

                switch (id_accion)
                {
                case 1:
                    celda = mapa.get_Celda_Id(Hash.get_Celda_Id_Desde_hash(separador[3].Substring(separador[3].Length - 2)));

                    if (!cuenta.esta_luchando())
                    {
                        if (id_entidad == personaje.id && celda.id > 0 && personaje.celda.id != celda.id)
                        {
                            tipo_gkk_movimiento = byte.Parse(separador[0]);

                            await cuenta.juego.manejador.movimientos.evento_Movimiento_Finalizado(celda, tipo_gkk_movimiento, true);
                        }
                        else if (mapa.entidades.TryGetValue(id_entidad, out Entidad entidad))
                        {
                            entidad.celda = celda;

                            if (GlobalConf.mostrar_mensajes_debug)
                            {
                                cuenta.logger.log_informacion("DEBUG", "movimiento détecté d'une entité vers la cellule : " + celda.id);
                            }
                        }
                        mapa.evento_Entidad_Actualizada();
                    }
                    else
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        if (luchador != null)
                        {
                            luchador.celda = celda;

                            if (luchador.id == personaje.id)
                            {
                                tipo_gkk_movimiento = byte.Parse(separador[0]);

                                await Task.Delay(400 + (100 * personaje.celda.get_Distancia_Entre_Dos_Casillas(celda)));

                                cuenta.conexion.enviar_Paquete("GKK" + tipo_gkk_movimiento);
                            }
                        }
                    }
                    break;

                case 4:
                    separador = separador[3].Split(',');
                    celda     = mapa.get_Celda_Id(short.Parse(separador[1]));

                    if (!cuenta.esta_luchando() && id_entidad == personaje.id && celda.id > 0 && personaje.celda.id != celda.id)
                    {
                        personaje.celda = celda;
                        await Task.Delay(150);

                        cuenta.conexion.enviar_Paquete("GKK1");
                        mapa.evento_Entidad_Actualizada();
                        cuenta.juego.manejador.movimientos.movimiento_Actualizado(true);
                    }
                    break;

                case 5:
                    if (cuenta.esta_luchando())
                    {
                        separador = separador[3].Split(',');
                        luchador  = pelea.get_Luchador_Por_Id(int.Parse(separador[0]));

                        if (luchador != null)
                        {
                            luchador.celda = mapa.get_Celda_Id(short.Parse(separador[1]));
                        }
                    }
                    break;

                case 102:
                    if (cuenta.esta_luchando())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        byte pa_utilizados = byte.Parse(separador[3].Split(',')[1].Substring(1));

                        if (luchador != null)
                        {
                            luchador.pa -= pa_utilizados;
                        }
                    }
                    break;

                case 103:
                    if (cuenta.esta_luchando())
                    {
                        int id_muerto = int.Parse(separador[3]);

                        luchador = pelea.get_Luchador_Por_Id(id_muerto);
                        if (luchador != null)
                        {
                            luchador.esta_vivo = false;
                        }
                    }
                    break;

                case 129:     //movimiento en pelea con exito
                    if (cuenta.esta_luchando())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);
                        byte pm_utilizados = byte.Parse(separador[3].Split(',')[1].Substring(1));

                        if (luchador != null)
                        {
                            luchador.pm -= pm_utilizados;
                        }

                        if (luchador.id == personaje.id)
                        {
                            pelea.get_Movimiento_Exito(true);
                        }
                    }
                    break;

                case 151:    //obstaculos invisibles
                    if (cuenta.esta_luchando())
                    {
                        luchador = pelea.get_Luchador_Por_Id(id_entidad);

                        if (luchador != null && luchador.id == personaje.id)
                        {
                            cuenta.logger.log_Error("INFORMATION", "Il n'est pas possible d'effectuer cette action à cause d'un obstacle invisible.");
                            pelea.get_Hechizo_Lanzado(short.Parse(separador[3]), false);
                        }
                    }
                    break;

                case 181:     //efecto de invocacion (pelea)
                    celda = mapa.get_Celda_Id(short.Parse(separador[3].Substring(1)));
                    short id_luchador = short.Parse(separador[6]);
                    short vida        = short.Parse(separador[15]);
                    byte  pa          = byte.Parse(separador[16]);
                    byte  pm          = byte.Parse(separador[17]);
                    byte  equipo      = byte.Parse(separador[25]);

                    pelea.get_Agregar_Luchador(new Luchadores(id_luchador, true, vida, pa, pm, celda, vida, equipo, id_entidad));
                    break;

                case 302:    //fallo critico
                    if (cuenta.esta_luchando() && id_entidad == cuenta.juego.personaje.id)
                    {
                        pelea.get_Hechizo_Lanzado(0, false);
                    }
                    break;

                case 300:     //hechizo lanzado con exito
                    if (cuenta.esta_luchando() && id_entidad == cuenta.juego.personaje.id)
                    {
                        short celda_id_lanzado = short.Parse(separador[3].Split(',')[1]);
                        pelea.get_Hechizo_Lanzado(celda_id_lanzado, true);
                    }
                    break;

                case 501:
                    int tiempo_recoleccion = int.Parse(separador[3].Split(',')[1]);
                    celda = mapa.get_Celda_Id(short.Parse(separador[3].Split(',')[0]));
                    byte tipo_gkk_recoleccion = byte.Parse(separador[0]);

                    await cuenta.juego.manejador.recoleccion.evento_Recoleccion_Iniciada(id_entidad, tiempo_recoleccion, celda.id, tipo_gkk_recoleccion);

                    break;

                case 900:
                    cuenta.conexion.enviar_Paquete("GA902" + id_entidad, true);
                    cuenta.logger.log_informacion("INFORMATION", "Le défi avec le personnage ID : " + id_entidad + " est annulée");
                    break;
                }
            }
        }
        public async Task get_Movimientos_Personajes(ClienteTcp cliente, string paquete)
        {
            Cuenta cuenta = cliente.cuenta;

            string[] separador_jugadores = paquete.Substring(3).Split(new char[]
            {
                '|'
            });
            int num;

            for (int i = 0; i < separador_jugadores.Length; i = num)
            {
                string _loc6 = separador_jugadores[i];
                bool   flag  = _loc6.Length != 0;
                if (flag)
                {
                    string[] informaciones = _loc6.Substring(1).Split(new char[]
                    {
                        ';'
                    });
                    bool flag2 = _loc6[0].Equals('+');
                    if (flag2)
                    {
                        Celda  celda           = cuenta.juego.mapa.get_Celda_Id(short.Parse(informaciones[0]));
                        Pelea  pelea           = cuenta.juego.pelea;
                        int    id              = int.Parse(informaciones[3]);
                        string nombre_template = informaciones[4];
                        string tipo            = informaciones[5];
                        bool   flag3           = tipo.Contains(",");
                        if (flag3)
                        {
                            tipo = tipo.Split(new char[]
                            {
                                ','
                            })[0];
                        }
                        string[]  templates;
                        string[]  niveles;
                        Monstruos monstruo;
                        switch (int.Parse(tipo))
                        {
                        case -10:
                        case -9:
                        case -8:
                        case -7:
                        case -6:
                        case -5:
                            break;

                        case -4:
                            cuenta.juego.mapa.entidades.TryAdd(id, new Npcs(id, int.Parse(nombre_template), celda));
                            break;

                        case -3:
                            templates = nombre_template.Split(new char[]
                            {
                                ','
                            });
                            niveles = informaciones[7].Split(new char[]
                            {
                                ','
                            });
                            monstruo             = new Monstruos(id, int.Parse(templates[0]), celda, int.Parse(niveles[0]));
                            monstruo.lider_grupo = monstruo;
                            for (int j = 1; j < templates.Length; j = num)
                            {
                                monstruo.moobs_dentro_grupo.Add(new Monstruos(id, int.Parse(templates[j]), celda, int.Parse(niveles[j])));
                                num = j + 1;
                            }
                            cuenta.juego.mapa.entidades.TryAdd(id, monstruo);
                            break;

                        case -2:
                        case -1:
                        {
                            bool flag4 = cuenta.Estado_Cuenta == EstadoCuenta.LUCHANDO;
                            if (flag4)
                            {
                                int  vida   = int.Parse(informaciones[12]);
                                byte pa     = byte.Parse(informaciones[13]);
                                byte pm     = byte.Parse(informaciones[14]);
                                byte equipo = byte.Parse(informaciones[15]);
                                pelea.get_Agregar_Luchador(new Luchadores(id, true, vida, pa, pm, celda, vida, equipo));
                            }
                            break;
                        }

                        default:
                        {
                            bool flag5 = cuenta.Estado_Cuenta != EstadoCuenta.LUCHANDO;
                            if (flag5)
                            {
                                bool flag6 = cuenta.juego.personaje.id != id;
                                if (flag6)
                                {
                                    cuenta.juego.mapa.entidades.TryAdd(id, new Personajes(id, nombre_template, byte.Parse(informaciones[7].ToString()), celda));
                                }
                                else
                                {
                                    cuenta.juego.personaje.celda = celda;
                                }
                            }
                            else
                            {
                                int  vida2   = int.Parse(informaciones[14]);
                                byte pa2     = byte.Parse(informaciones[15]);
                                byte pm2     = byte.Parse(informaciones[16]);
                                byte equipo2 = byte.Parse(informaciones[24]);
                                pelea.get_Agregar_Luchador(new Luchadores(id, true, vida2, pa2, pm2, celda, vida2, equipo2));
                                bool flag7 = cuenta.juego.personaje.id == id && cuenta.pelea_extension.configuracion.posicionamiento != PosicionamientoInicioPelea.INMOVIL;
                                if (flag7)
                                {
                                    await Task.Delay(300);

                                    short celda_posicion = pelea.get_Celda_Mas_Cercana_O_Lejana(cuenta.pelea_extension.configuracion.posicionamiento == PosicionamientoInicioPelea.CERCA_DE_ENEMIGOS, pelea.celdas_preparacion);
                                    if (celda_posicion != celda.id)
                                    {
                                        cuenta.conexion.enviar_Paquete("Gp" + celda_posicion.ToString(), true);
                                    }
                                    else
                                    {
                                        cuenta.conexion.enviar_Paquete("GR1", false);
                                    }
                                }
                                else if (cuenta.juego.personaje.id == id)
                                {
                                    await Task.Delay(300);

                                    cuenta.conexion.enviar_Paquete("GR1", false);
                                }
                            }
                            break;
                        }
                        }
                        templates = null;
                        niveles   = null;
                        monstruo  = null;
                        celda     = null;
                        pelea     = null;
                    }
                    else if (_loc6[0].Equals('-'))
                    {
                        if (cuenta.Estado_Cuenta != EstadoCuenta.LUCHANDO)
                        {
                            int     id2 = int.Parse(_loc6.Substring(1));
                            Entidad entidad;
                            cuenta.juego.mapa.entidades.TryRemove(id2, out entidad);
                            entidad = null;
                        }
                    }
                }
                num = i + 1;
            }
        }
        public static Dictionary <short, MovimientoNodo> get_Celdas_Accesibles(Pelea pelea, Mapa mapa, short celda_actual)
        {
            Dictionary <short, MovimientoNodo> celdas = new Dictionary <short, MovimientoNodo>();

            if (pelea.jugador_luchador.pm <= 0)
            {
                return(celdas);
            }

            Celda[] cuadricula = mapa.celdas;

            short maximos_pm = pelea.jugador_luchador.pm;

            List <NodoPelea> celdas_permitidas = new List <NodoPelea>();
            Dictionary <short, NodoPelea> celdas_prohibidas = new Dictionary <short, NodoPelea>();

            NodoPelea nodo = new NodoPelea(celda_actual, maximos_pm, pelea.jugador_luchador.pa, 1);

            celdas_permitidas.Add(nodo);
            celdas_prohibidas[celda_actual] = nodo;

            while (celdas_permitidas.Count > 0)
            {
                NodoPelea actual = celdas_permitidas.Last();
                celdas_permitidas.Remove(actual);
                Celda        nodo_celda = cuadricula[actual.celda_id];
                List <Celda> adyecentes = get_Celdas_Adyecentes(nodo_celda, cuadricula);

                int i = 0;
                while (i < adyecentes.Count)
                {
                    Luchadores placador = pelea.get_Luchadores.FirstOrDefault(f => f.celda_id == adyecentes[i]?.id);

                    if (adyecentes[i] != null && placador == null)
                    {
                        i++;
                        continue;
                    }

                    adyecentes.RemoveAt(i);
                }

                int  pm_disponibles = actual.pm_disponible - 1;
                int  pa_disponibles = actual.pa_disponible;
                int  distancia      = actual.distancia + 1;
                bool accesible      = pm_disponibles >= 0;

                for (i = 0; i < adyecentes.Count; i++)
                {
                    if (celdas_prohibidas.ContainsKey(adyecentes[i].id))
                    {
                        NodoPelea anterior = celdas_prohibidas[adyecentes[i].id];
                        if (anterior.pm_disponible > pm_disponibles)
                        {
                            continue;
                        }

                        if (anterior.pm_disponible == pm_disponibles && anterior.pm_disponible >= pa_disponibles)
                        {
                            continue;
                        }
                    }

                    if (!cuadricula[adyecentes[i].id].es_Caminable())
                    {
                        continue;
                    }

                    celdas[adyecentes[i].id] = new MovimientoNodo(nodo_celda.id, accesible);
                    nodo = new NodoPelea(adyecentes[i].id, pm_disponibles, pa_disponibles, distancia);
                    celdas_prohibidas[adyecentes[i].id] = nodo;

                    if (actual.distancia < maximos_pm)
                    {
                        celdas_permitidas.Add(nodo);
                    }
                }
            }

            foreach (short celda in celdas.Keys)
            {
                celdas[celda].camino = get_Path_Pelea(celda_actual, celda, celdas);
            }

            return(celdas);
        }
        // Token: 0x060002A6 RID: 678 RVA: 0x0000B164 File Offset: 0x00009564
        public static Dictionary <short, MovimientoNodo> get_Celdas_Accesibles(Pelea pelea, Mapa mapa, Celda celda_actual)
        {
            Dictionary <short, MovimientoNodo> dictionary = new Dictionary <short, MovimientoNodo>();
            bool flag = pelea.jugador_luchador.pm <= 0;
            Dictionary <short, MovimientoNodo> result;

            if (flag)
            {
                result = dictionary;
            }
            else
            {
                short            pm   = (short)pelea.jugador_luchador.pm;
                List <NodoPelea> list = new List <NodoPelea>();
                Dictionary <short, NodoPelea> dictionary2 = new Dictionary <short, NodoPelea>();
                NodoPelea nodoPelea = new NodoPelea(celda_actual, (int)pm, (int)pelea.jugador_luchador.pa, 1);
                list.Add(nodoPelea);
                dictionary2[celda_actual.id] = nodoPelea;
                while (list.Count > 0)
                {
                    NodoPelea nodoPelea2 = list.Last <NodoPelea>();
                    list.Remove(nodoPelea2);
                    Celda        celda      = nodoPelea2.celda;
                    List <Celda> adyecentes = PeleasPathfinder.get_Celdas_Adyecentes(celda, mapa.celdas);
                    int          i          = 0;
                    Func <Luchadores, bool> < > 9__0;
                    while (i < adyecentes.Count)
                    {
                        IEnumerable <Luchadores> get_Luchadores = pelea.get_Luchadores;
                        Func <Luchadores, bool>  predicate;
                        if ((predicate = < > 9__0) == null)
                        {
                            predicate = (< > 9__0 = delegate(Luchadores f)
                            {
                                int id = (int)f.celda.id;
                                Celda celda2 = adyecentes[i];
                                short?num3 = (celda2 != null) ? new short?(celda2.id) : null;
                                int?num4 = (num3 != null) ? new int?((int)num3.GetValueOrDefault()) : null;
                                return(id == num4.GetValueOrDefault() & num4 != null);
                            });
                        }
                        Luchadores luchadores = get_Luchadores.FirstOrDefault(predicate);
                        bool       flag2      = adyecentes[i] != null && luchadores == null;
                        if (flag2)
                        {
                            int j = i;
                            i = j + 1;
                        }
                        else
                        {
                            adyecentes.RemoveAt(i);
                        }
                    }
                    int  num           = nodoPelea2.pm_disponible - 1;
                    int  pa_disponible = nodoPelea2.pa_disponible;
                    int  distancia     = nodoPelea2.distancia + 1;
                    bool alcanzable    = num >= 0;
                    i = 0;
                    while (i < adyecentes.Count)
                    {
                        bool flag3 = dictionary2.ContainsKey(adyecentes[i].id);
                        if (!flag3)
                        {
                            goto IL_20C;
                        }
                        NodoPelea nodoPelea3 = dictionary2[adyecentes[i].id];
                        bool      flag4      = nodoPelea3.pm_disponible > num;
                        if (!flag4)
                        {
                            bool flag5 = nodoPelea3.pm_disponible == num && nodoPelea3.pm_disponible >= pa_disponible;
                            if (!flag5)
                            {
                                goto IL_20C;
                            }
                        }
IL_2BA:
                        int j = i;
                        i     = j + 1;
                        continue;
IL_20C:
                        bool flag6 = !adyecentes[i].es_Caminable();
                        if (flag6)
                        {
                            goto IL_2BA;
                        }
                        dictionary[adyecentes[i].id] = new MovimientoNodo(celda.id, alcanzable);
                        nodoPelea = new NodoPelea(adyecentes[i], num, pa_disponible, distancia);
                        dictionary2[adyecentes[i].id] = nodoPelea;
                        bool flag7 = nodoPelea2.distancia < (int)pm;
                        if (flag7)
                        {
                            list.Add(nodoPelea);
                        }
                        goto IL_2BA;
                    }
                }
                foreach (short num2 in dictionary.Keys)
                {
                    dictionary[num2].camino = PeleasPathfinder.get_Path_Pelea(celda_actual.id, num2, dictionary);
                }
                result = dictionary;
            }
            return(result);
        }
 public StrategyFormClient()
 {
     pelea = new Pelea();
     InitializeComponent();
 }
 public abstract string Contraatacar(Pelea pelea);
Beispiel #18
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
        });
        public async Task get_Iniciar_Accion(ClienteTcp cliente, string paquete)
        {
            string[] separador = paquete.Substring(2).Split(new char[]
            {
                ';'
            });
            int            id_accion = int.Parse(separador[1]);
            Cuenta         cuenta    = cliente.cuenta;
            PersonajeJuego personaje = cuenta.juego.personaje;
            bool           flag      = id_accion > 0;

            if (flag)
            {
                int        id_entidad = int.Parse(separador[2]);
                Mapa       mapa       = cuenta.juego.mapa;
                Pelea      pelea      = cuenta.juego.pelea;
                int        num        = id_accion;
                int        num2       = num;
                int        num3       = num2;
                Celda      celda;
                Luchadores luchador;
                if (num3 <= 151)
                {
                    if (num3 <= 102)
                    {
                        switch (num3)
                        {
                        case 1:
                        {
                            celda = mapa.get_Celda_Id(Hash.get_Celda_Id_Desde_hash(separador[3].Substring(separador[3].Length - 2)));
                            bool flag2 = !cuenta.esta_luchando();
                            if (flag2)
                            {
                                bool flag3 = id_entidad == personaje.id && celda.id > 0 && personaje.celda.id != celda.id;
                                if (flag3)
                                {
                                    byte tipo_gkk_movimiento = byte.Parse(separador[0]);
                                    await cuenta.juego.manejador.movimientos.evento_Movimiento_Finalizado(celda, tipo_gkk_movimiento, true);
                                }
                                else
                                {
                                    Entidad entidad;
                                    if (mapa.entidades.TryGetValue(id_entidad, out entidad))
                                    {
                                        entidad.celda = celda;
                                        if (GlobalConf.mostrar_mensajes_debug)
                                        {
                                            cuenta.logger.log_informacion("DEBUG", "Detectado movimiento de una entidad a la casilla: " + celda.id.ToString());
                                        }
                                    }
                                    entidad = null;
                                }
                                mapa.evento_Entidad_Actualizada();
                            }
                            else
                            {
                                luchador = pelea.get_Luchador_Por_Id(id_entidad);
                                if (luchador != null)
                                {
                                    luchador.celda = celda;
                                    if (luchador.id == personaje.id)
                                    {
                                        byte tipo_gkk_movimiento = byte.Parse(separador[0]);
                                        await Task.Delay(400 + 100 *personaje.celda.get_Distancia_Entre_Dos_Casillas(celda));

                                        cuenta.conexion.enviar_Paquete("GKK" + tipo_gkk_movimiento.ToString(), false);
                                    }
                                }
                            }
                            break;
                        }

                        case 2:
                        case 3:
                            break;

                        case 4:
                            separador = separador[3].Split(new char[]
                            {
                                ','
                            });
                            celda = mapa.get_Celda_Id(short.Parse(separador[1]));
                            if (!cuenta.esta_luchando() && id_entidad == personaje.id && celda.id > 0 && personaje.celda.id != celda.id)
                            {
                                personaje.celda = celda;
                                await Task.Delay(150);

                                cuenta.conexion.enviar_Paquete("GKK1", false);
                                mapa.evento_Entidad_Actualizada();
                                cuenta.juego.manejador.movimientos.movimiento_Actualizado(true);
                            }
                            break;

                        case 5:
                            if (cuenta.esta_luchando())
                            {
                                separador = separador[3].Split(new char[]
                                {
                                    ','
                                });
                                luchador = pelea.get_Luchador_Por_Id(int.Parse(separador[0]));
                                if (luchador != null)
                                {
                                    luchador.celda = mapa.get_Celda_Id(short.Parse(separador[1]));
                                }
                            }
                            break;

                        default:
                            if (num3 == 102)
                            {
                                if (cuenta.esta_luchando())
                                {
                                    luchador = pelea.get_Luchador_Por_Id(id_entidad);
                                    byte pa_utilizados = byte.Parse(separador[3].Split(new char[]
                                    {
                                        ','
                                    })[1].Substring(1));
                                    if (luchador != null)
                                    {
                                        Luchadores luchadores = luchador;
                                        luchadores.pa -= pa_utilizados;
                                    }
                                }
                            }
                            break;
                        }
                    }
                    else if (num3 != 103)
                    {
                        if (num3 != 129)
                        {
                            if (num3 == 151)
                            {
                                if (cuenta.esta_luchando())
                                {
                                    luchador = pelea.get_Luchador_Por_Id(id_entidad);
                                    if (luchador != null && luchador.id == personaje.id)
                                    {
                                        cuenta.logger.log_Error("INFORMATION", "No es posible realizar esta acción por culpa de un obstáculo invisible.");
                                        pelea.get_Hechizo_Lanzado(short.Parse(separador[3]), false);
                                    }
                                }
                            }
                        }
                        else if (cuenta.esta_luchando())
                        {
                            luchador = pelea.get_Luchador_Por_Id(id_entidad);
                            byte pm_utilizados = byte.Parse(separador[3].Split(new char[]
                            {
                                ','
                            })[1].Substring(1));
                            if (luchador != null)
                            {
                                Luchadores luchadores2 = luchador;
                                luchadores2.pm -= pm_utilizados;
                            }
                            if (luchador.id == personaje.id)
                            {
                                pelea.get_Movimiento_Exito(true);
                            }
                        }
                    }
                    else if (cuenta.esta_luchando())
                    {
                        int id_muerto = int.Parse(separador[3]);
                        luchador = pelea.get_Luchador_Por_Id(id_muerto);
                        if (luchador != null)
                        {
                            luchador.esta_vivo = false;
                        }
                    }
                }
                else if (num3 <= 300)
                {
                    if (num3 != 181)
                    {
                        if (num3 == 300)
                        {
                            if (cuenta.esta_luchando() && id_entidad == cuenta.juego.personaje.id)
                            {
                                short celda_id_lanzado = short.Parse(separador[3].Split(new char[]
                                {
                                    ','
                                })[1]);
                                pelea.get_Hechizo_Lanzado(celda_id_lanzado, true);
                            }
                        }
                    }
                    else
                    {
                        celda = mapa.get_Celda_Id(short.Parse(separador[3].Substring(1)));
                        short id_luchador = short.Parse(separador[6]);
                        short vida        = short.Parse(separador[15]);
                        byte  pa          = byte.Parse(separador[16]);
                        byte  pm          = byte.Parse(separador[17]);
                        byte  equipo      = byte.Parse(separador[25]);
                        pelea.get_Agregar_Luchador(new Luchadores((int)id_luchador, true, (int)vida, pa, pm, celda, (int)vida, equipo, id_entidad));
                    }
                }
                else if (num3 != 302)
                {
                    if (num3 != 501)
                    {
                        if (num3 == 900)
                        {
                            cuenta.conexion.enviar_Paquete("GA902" + id_entidad.ToString(), true);
                            cuenta.logger.log_informacion("INFORMATION", "Desafio del personaje id: " + id_entidad.ToString() + " cancelado");
                        }
                    }
                    else
                    {
                        int tiempo_recoleccion = int.Parse(separador[3].Split(new char[]
                        {
                            ','
                        })[1]);
                        celda = mapa.get_Celda_Id(short.Parse(separador[3].Split(new char[]
                        {
                            ','
                        })[0]));
                        byte tipo_gkk_recoleccion = byte.Parse(separador[0]);
                        await cuenta.juego.manejador.recoleccion.evento_Recoleccion_Iniciada(id_entidad, tiempo_recoleccion, celda.id, tipo_gkk_recoleccion);
                    }
                }
                else if (cuenta.esta_luchando() && id_entidad == cuenta.juego.personaje.id)
                {
                    pelea.get_Hechizo_Lanzado(0, false);
                }
                celda    = null;
                luchador = null;
                mapa     = null;
                pelea    = null;
            }
        }