// Token: 0x0600019F RID: 415 RVA: 0x00007550 File Offset: 0x00005950
        private async Task <ResultadoLanzandoHechizo> get_Mover_Lanzar_hechizo_Simple(HechizoPelea hechizo_pelea, Luchadores enemigo)
        {
            KeyValuePair <short, MovimientoNodo>?nodo = null;
            int pm_utilizados = 99;

            foreach (KeyValuePair <short, MovimientoNodo> movimiento in PeleasPathfinder.get_Celdas_Accesibles(this.pelea, this.mapa, this.pelea.jugador_luchador.celda))
            {
                bool flag = !movimiento.Value.alcanzable;
                if (!flag)
                {
                    bool flag2 = hechizo_pelea.metodo_lanzamiento == MetodoLanzamiento.CAC && !this.pelea.esta_Cuerpo_A_Cuerpo_Con_Aliado(this.mapa.get_Celda_Id(movimiento.Key));
                    if (!flag2)
                    {
                        bool flag3 = this.pelea.get_Puede_Lanzar_hechizo(hechizo_pelea.id, this.mapa.get_Celda_Id(movimiento.Key), enemigo.celda, this.mapa) > FallosLanzandoHechizo.NINGUNO;
                        if (!flag3)
                        {
                            bool flag4 = movimiento.Value.camino.celdas_accesibles.Count <= pm_utilizados;
                            if (flag4)
                            {
                                nodo          = new KeyValuePair <short, MovimientoNodo>?(movimiento);
                                pm_utilizados = movimiento.Value.camino.celdas_accesibles.Count;
                            }
                            movimiento = default(KeyValuePair <short, MovimientoNodo>);
                        }
                    }
                }
            }
            Dictionary <short, MovimientoNodo> .Enumerator enumerator = default(Dictionary <short, MovimientoNodo> .Enumerator);
            bool flag5 = nodo != null;
            ResultadoLanzandoHechizo result;

            if (flag5)
            {
                await this.cuenta.juego.manejador.movimientos.get_Mover_Celda_Pelea(nodo);

                result = ResultadoLanzandoHechizo.MOVIDO;
            }
            else
            {
                result = ResultadoLanzandoHechizo.NO_LANZADO;
            }
            return(result);
        }
        // Token: 0x060001E6 RID: 486 RVA: 0x000094B4 File Offset: 0x000078B4
        public async Task get_Mover(bool cercano, Luchadores enemigo)
        {
            KeyValuePair <short, MovimientoNodo>?nodo = null;
            Mapa mapa            = this.cuenta.juego.mapa;
            int  distancia       = -1;
            int  distancia_total = this.Get_Total_Distancia_Enemigo(this.pelea.jugador_luchador.celda);

            foreach (KeyValuePair <short, MovimientoNodo> kvp in PeleasPathfinder.get_Celdas_Accesibles(this.pelea, mapa, this.pelea.jugador_luchador.celda))
            {
                bool flag = !kvp.Value.alcanzable;
                if (!flag)
                {
                    int  temporal_distancia = this.Get_Total_Distancia_Enemigo(mapa.get_Celda_Id(kvp.Key));
                    bool flag2 = (cercano && temporal_distancia <= distancia_total) || (!cercano && temporal_distancia >= distancia_total);
                    if (flag2)
                    {
                        if (cercano)
                        {
                            nodo            = new KeyValuePair <short, MovimientoNodo>?(kvp);
                            distancia_total = temporal_distancia;
                        }
                        else
                        {
                            bool flag3 = kvp.Value.camino.celdas_accesibles.Count >= distancia;
                            if (flag3)
                            {
                                nodo            = new KeyValuePair <short, MovimientoNodo>?(kvp);
                                distancia_total = temporal_distancia;
                                distancia       = kvp.Value.camino.celdas_accesibles.Count;
                            }
                        }
                    }
                    kvp = default(KeyValuePair <short, MovimientoNodo>);
                }
            }
            Dictionary <short, MovimientoNodo> .Enumerator enumerator = default(Dictionary <short, MovimientoNodo> .Enumerator);
            bool flag4 = nodo != null;

            if (flag4)
            {
                await this.cuenta.juego.manejador.movimientos.get_Mover_Celda_Pelea(nodo);
            }
        }
示例#3
0
        public async Task get_Mover(bool cercano, Luchadores enemigo)
        {
            KeyValuePair <short, MovimientoNodo>?nodo = null;
            Mapa mapa      = cuenta.juego.mapa;
            int  distancia = -1;

            int distancia_total = Get_Total_Distancia_Enemigo(pelea.jugador_luchador.celda);

            foreach (KeyValuePair <short, MovimientoNodo> kvp in PeleasPathfinder.get_Celdas_Accesibles(pelea, mapa, pelea.jugador_luchador.celda))
            {
                if (!kvp.Value.alcanzable)
                {
                    continue;
                }

                int temporal_distancia = Get_Total_Distancia_Enemigo(mapa.get_Celda_Id(kvp.Key));

                if ((cercano && temporal_distancia <= distancia_total) || (!cercano && temporal_distancia >= distancia_total))
                {
                    if (cercano)
                    {
                        nodo            = kvp;
                        distancia_total = temporal_distancia;
                    }
                    else if (kvp.Value.camino.celdas_accesibles.Count >= distancia)
                    {
                        nodo            = kvp;
                        distancia_total = temporal_distancia;
                        distancia       = kvp.Value.camino.celdas_accesibles.Count;
                    }
                }
            }

            if (nodo != null)
            {
                await cuenta.juego.manejador.movimientos.get_Mover_Celda_Pelea(nodo);
            }
        }
示例#4
0
        private async Task <ResultadoLanzandoHechizo> get_Mover_Lanzar_hechizo_Simple(PeleaHechizos hechizo_pelea, Luchadores enemigo)
        {
            KeyValuePair <short, MovimientoNodo>?nodo = null;
            int pm_utilizados = 99;

            foreach (KeyValuePair <short, MovimientoNodo> movimiento in PeleasPathfinder.get_Celdas_Accesibles(pelea, mapa, pelea.jugador_luchador.celda))
            {
                if (!movimiento.Value.alcanzable)
                {
                    continue;
                }

                if (hechizo_pelea.metodo_lanzamiento == MetodoLanzamiento.CAC && !pelea.esta_Cuerpo_A_Cuerpo_Con_Enemigo(mapa.get_Celda_Id(movimiento.Key)))
                {
                    continue;
                }

                if (pelea.get_Puede_Lanzar_hechizo(hechizo_pelea.id, mapa.get_Celda_Id(movimiento.Key), enemigo.celda, mapa) != FallosLanzandoHechizo.NINGUNO)
                {
                    continue;
                }

                if (movimiento.Value.camino.celdas_accesibles.Count <= pm_utilizados)
                {
                    nodo          = movimiento;
                    pm_utilizados = movimiento.Value.camino.celdas_accesibles.Count;
                }
            }

            if (nodo != null)
            {
                await cuenta.juego.manejador.movimientos.get_Mover_Celda_Pelea(nodo);

                return(ResultadoLanzandoHechizo.MOVIDO);
            }

            return(ResultadoLanzandoHechizo.NO_LANZADO);
        }
        public async Task get_Mover(bool cercano, Luchadores enemigo)
        {
            KeyValuePair <short, MovimientoNodo>?nodo = null;
            int distancia_total = -1;
            int distancia       = -1;

            distancia_total = Get_Total_Distancia_Enemigo(cuenta.pelea.jugador_luchador.celda_id);

            foreach (KeyValuePair <short, MovimientoNodo> kvp in PeleasPathfinder.get_Celdas_Accesibles(cuenta.pelea, cuenta.personaje.mapa, cuenta.pelea.jugador_luchador.celda_id))
            {
                if (!kvp.Value.alcanzable)
                {
                    continue;
                }

                int tempTotalDistances = Get_Total_Distancia_Enemigo(kvp.Key);

                if ((cercano && tempTotalDistances <= distancia_total) || (!cercano && tempTotalDistances >= distancia_total))
                {
                    if (cercano)
                    {
                        nodo            = kvp;
                        distancia_total = tempTotalDistances;
                    }
                    else if (kvp.Value.camino.celdas_accesibles.Count >= distancia)
                    {
                        nodo            = kvp;
                        distancia_total = tempTotalDistances;
                        distancia       = kvp.Value.camino.celdas_accesibles.Count;
                    }
                }
            }

            if (nodo != null)
            {
                await cuenta.personaje.manejador.movimientos.get_Mover_Celda_Pelea(nodo);
            }
        }
示例#6
0
        private async Task <ResultadoLanzandoHechizo> lanzar_Hechizo_AOE(PeleaHechizos hechizo_pelea)
        {
            if (hechizo_pelea.focus == HechizoFocus.ALIADO || hechizo_pelea.focus == HechizoFocus.CELDA_VACIA)
            {
                return(ResultadoLanzandoHechizo.NO_LANZADO);
            }

            if (pelea.get_Puede_Lanzar_hechizo(hechizo_pelea.id) != FallosLanzandoHechizo.NINGUNO)
            {
                return(ResultadoLanzandoHechizo.NO_LANZADO);
            }

            Hechizo          hechizo       = cuenta.juego.personaje.get_Hechizo(hechizo_pelea.id);
            HechizoStats     hechizo_stats = hechizo.get_Stats();
            List <NodoRango> entradas      = new List <NodoRango>();
            NodoRango        entrada;

            //Celda actual del jugador
            entrada = get_Nodo_Rango(pelea.jugador_luchador.celda, null, hechizo_pelea, hechizo_stats);
            if (entrada.enemigos_atacos_en_celda.Count > 0)
            {
                entradas.Add(entrada);
            }

            foreach (KeyValuePair <short, MovimientoNodo> kvp in PeleasPathfinder.get_Celdas_Accesibles(pelea, mapa, pelea.jugador_luchador.celda))
            {
                if (!kvp.Value.alcanzable)
                {
                    continue;
                }

                entrada = get_Nodo_Rango(mapa.get_Celda_Id(kvp.Key), kvp.Value, hechizo_pelea, hechizo_stats);
                if (entrada.enemigos_atacos_en_celda.Count > 0)
                {
                    entradas.Add(entrada);
                }
            }

            short celda_id       = -1;
            short desde_celda_id = -1;
            KeyValuePair <short, MovimientoNodo>?node = null;
            byte enemigos_atacados = 0;
            int  pm_utilizados     = 99;

            foreach (NodoRango nodo in entradas)
            {
                foreach (KeyValuePair <short, byte> kvp in nodo.enemigos_atacos_en_celda)
                {
                    if (hechizo_pelea.metodo_lanzamiento == MetodoLanzamiento.CAC && !pelea.esta_Cuerpo_A_Cuerpo_Con_Enemigo(nodo.celda))
                    {
                        continue;
                    }

                    if (pelea.get_Puede_Lanzar_hechizo(hechizo_pelea.id, nodo.celda, mapa.get_Celda_Id(kvp.Key), mapa) != FallosLanzandoHechizo.NINGUNO)
                    {
                        continue;
                    }

                    if (kvp.Value >= enemigos_atacados)
                    {
                        if (kvp.Value > enemigos_atacados || (kvp.Value == enemigos_atacados && nodo.pm_utilizados <= pm_utilizados))
                        {
                            enemigos_atacados = kvp.Value;
                            celda_id          = kvp.Key;
                            desde_celda_id    = nodo.celda.id;
                            pm_utilizados     = nodo.pm_utilizados;

                            if (nodo.nodo != null)
                            {
                                node = new KeyValuePair <short, MovimientoNodo>(desde_celda_id, nodo.nodo);
                            }
                        }
                    }
                }
            }

            if (celda_id != -1)
            {
                if (node == null)
                {
                    if (GlobalConf.mostrar_mensajes_debug)
                    {
                        cuenta.logger.log_informacion("DEBUG", $"Se ha lanzado el hechizo {hechizo.nombre} atacando a {enemigos_atacados} enemigos en la celda {celda_id}");
                    }

                    await pelea.get_Lanzar_Hechizo(hechizo_pelea.id, celda_id);

                    return(ResultadoLanzandoHechizo.LANZADO);
                }
                else
                {
                    hechizo_para_lanzar = hechizo.id;
                    celda_objetivo      = celda_id;
                    enemigos_tocados    = enemigos_atacados;

                    await cuenta.juego.manejador.movimientos.get_Mover_Celda_Pelea(node);

                    return(ResultadoLanzandoHechizo.MOVIDO);
                }
            }

            return(ResultadoLanzandoHechizo.NO_LANZADO);
        }