예제 #1
0
        // Token: 0x060001CD RID: 461 RVA: 0x000084D4 File Offset: 0x000068D4
        public List <short> get_Rango_hechizo(Celda celda_personaje, HechizoStats datos_hechizo, Mapa mapa)
        {
            List <short> list = new List <short>();

            foreach (Celda celda in HechizoShape.Get_Lista_Celdas_Rango_Hechizo(celda_personaje, datos_hechizo, this.cuenta.juego.mapa, this.cuenta.juego.personaje.caracteristicas.alcanze.total_stats))
            {
                bool flag = celda == null || list.Contains(celda.id);
                if (!flag)
                {
                    bool flag2 = datos_hechizo.es_celda_vacia && this.get_Celdas_Ocupadas.Contains(celda.id);
                    if (!flag2)
                    {
                        bool flag3 = celda.tipo != TipoCelda.NO_CAMINABLE || celda.tipo != TipoCelda.OBJETO_INTERACTIVO;
                        if (flag3)
                        {
                            list.Add(celda.id);
                        }
                    }
                }
            }
            bool es_lanzado_con_vision = datos_hechizo.es_lanzado_con_vision;

            if (es_lanzado_con_vision)
            {
                for (int i = list.Count - 1; i >= 0; i--)
                {
                    bool flag4 = Pelea.get_Linea_Obstruida(mapa, celda_personaje, mapa.get_Celda_Id(list[i]), this.get_Celdas_Ocupadas);
                    if (flag4)
                    {
                        list.RemoveAt(i);
                    }
                }
            }
            return(list);
        }
예제 #2
0
        // Token: 0x060001CE RID: 462 RVA: 0x0000861C File Offset: 0x00006A1C
        public static bool get_Linea_Obstruida(Mapa mapa, Celda celda_inicial, Celda celda_destino, List <short> celdas_ocupadas)
        {
            double num   = (double)celda_inicial.x + 0.5;
            double num2  = (double)celda_inicial.y + 0.5;
            double num3  = (double)celda_destino.x + 0.5;
            double num4  = (double)celda_destino.y + 0.5;
            double lastX = (double)celda_inicial.x;
            double lastY = (double)celda_inicial.y;
            bool   flag  = Math.Abs(num - num3) == Math.Abs(num2 - num4);
            double num5;
            double num6;
            double num7;
            int    num8;

            if (flag)
            {
                num5 = Math.Abs(num - num3);
                num6 = (double)((num3 > num) ? 1 : -1);
                num7 = (double)((num4 > num2) ? 1 : -1);
                num8 = 1;
            }
            else
            {
                bool flag2 = Math.Abs(num - num3) > Math.Abs(num2 - num4);
                if (flag2)
                {
                    num5  = Math.Abs(num - num3);
                    num6  = (double)((num3 > num) ? 1 : -1);
                    num7  = (num4 - num2) / num5;
                    num7 *= 100.0;
                    num7  = Math.Ceiling(num7) / 100.0;
                    num8  = 2;
                }
                else
                {
                    num5  = Math.Abs(num2 - num4);
                    num6  = (num3 - num) / num5;
                    num6 *= 100.0;
                    num6  = Math.Ceiling(num6) / 100.0;
                    num7  = (double)((num4 > num2) ? 1 : -1);
                    num8  = 3;
                }
            }
            int num9  = Convert.ToInt32(Math.Round(Math.Floor(Convert.ToDouble(3.0 + num5 / 2.0))));
            int num10 = Convert.ToInt32(Math.Round(Math.Floor(Convert.ToDouble(97.0 - num5 / 2.0))));
            int num11 = 0;

            while ((double)num11 < num5)
            {
                double num12 = num + num6;
                double num13 = num2 + num7;
                int    num14 = num8;
                int    num15 = num14;
                if (num15 != 2)
                {
                    if (num15 != 3)
                    {
                        bool flag3 = Pelea.get_Es_Celda_Obstruida(Math.Floor(num12), Math.Floor(num13), mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                        if (flag3)
                        {
                            return(true);
                        }
                        lastX = Math.Floor(num12);
                        lastY = Math.Floor(num13);
                    }
                    else
                    {
                        double num16 = Math.Ceiling(num * 100.0 + num6 * 50.0) / 100.0;
                        double num17 = Math.Floor(num * 100.0 + num6 * 150.0) / 100.0;
                        double num18 = Math.Floor(Math.Abs(Math.Floor(num16) * 100.0 - num16 * 100.0)) / 100.0;
                        double num19 = Math.Ceiling(Math.Abs(Math.Ceiling(num17) * 100.0 - num17 * 100.0)) / 100.0;
                        double num20 = Math.Floor(num13);
                        bool   flag4 = Math.Floor(num16) == Math.Floor(num17);
                        if (flag4)
                        {
                            double num21 = Math.Floor(num12);
                            bool   flag5 = (num16 == num21 && num17 < num21) || (num17 == num21 && num16 < num21);
                            if (flag5)
                            {
                                num21 = Math.Ceiling(num12);
                            }
                            bool flag6 = Pelea.get_Es_Celda_Obstruida(num21, num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                            if (flag6)
                            {
                                return(true);
                            }
                            lastX = num21;
                            lastY = num20;
                        }
                        else
                        {
                            bool flag7 = Math.Ceiling(num16) == Math.Ceiling(num17);
                            if (flag7)
                            {
                                double num21 = Math.Ceiling(num12);
                                bool   flag8 = (num16 == num21 && num17 < num21) || (num17 == num21 && num16 < num21);
                                if (flag8)
                                {
                                    num21 = Math.Floor(num12);
                                }
                                bool flag9 = Pelea.get_Es_Celda_Obstruida(num21, num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                if (flag9)
                                {
                                    return(true);
                                }
                                lastX = num21;
                                lastY = num20;
                            }
                            else
                            {
                                bool flag10 = Math.Floor(num18 * 100.0) <= (double)num9;
                                if (flag10)
                                {
                                    bool flag11 = Pelea.get_Es_Celda_Obstruida(Math.Floor(num17), num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                    if (flag11)
                                    {
                                        return(true);
                                    }
                                    lastX = Math.Floor(num17);
                                    lastY = num20;
                                }
                                else
                                {
                                    bool flag12 = Math.Floor(num19 * 100.0) >= (double)num10;
                                    if (flag12)
                                    {
                                        bool flag13 = Pelea.get_Es_Celda_Obstruida(Math.Floor(num16), num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                        if (flag13)
                                        {
                                            return(true);
                                        }
                                        lastX = Math.Floor(num16);
                                        lastY = num20;
                                    }
                                    else
                                    {
                                        bool flag14 = Pelea.get_Es_Celda_Obstruida(Math.Floor(num16), num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                        if (flag14)
                                        {
                                            return(true);
                                        }
                                        lastX = Math.Floor(num16);
                                        lastY = num20;
                                        bool flag15 = Pelea.get_Es_Celda_Obstruida(Math.Floor(num17), num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                        if (flag15)
                                        {
                                            return(true);
                                        }
                                        lastX = Math.Floor(num17);
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    double num22  = Math.Ceiling(num2 * 100.0 + num7 * 50.0) / 100.0;
                    double num23  = Math.Floor(num2 * 100.0 + num7 * 150.0) / 100.0;
                    double num24  = Math.Floor(Math.Abs(Math.Floor(num22) * 100.0 - num22 * 100.0)) / 100.0;
                    double num25  = Math.Ceiling(Math.Abs(Math.Ceiling(num23) * 100.0 - num23 * 100.0)) / 100.0;
                    double num21  = Math.Floor(num12);
                    bool   flag16 = Math.Floor(num22) == Math.Floor(num23);
                    if (flag16)
                    {
                        double num20  = Math.Floor(num13);
                        bool   flag17 = (num22 == num20 && num23 < num20) || (num23 == num20 && num22 < num20);
                        if (flag17)
                        {
                            num20 = Math.Ceiling(num13);
                        }
                        bool flag18 = Pelea.get_Es_Celda_Obstruida(num21, num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                        if (flag18)
                        {
                            return(true);
                        }
                        lastX = num21;
                        lastY = num20;
                    }
                    else
                    {
                        bool flag19 = Math.Ceiling(num22) == Math.Ceiling(num23);
                        if (flag19)
                        {
                            double num20  = Math.Ceiling(num13);
                            bool   flag20 = (num22 == num20 && num23 < num20) || (num23 == num20 && num22 < num20);
                            if (flag20)
                            {
                                num20 = Math.Floor(num13);
                            }
                            bool flag21 = Pelea.get_Es_Celda_Obstruida(num21, num20, mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                            if (flag21)
                            {
                                return(true);
                            }
                            lastX = num21;
                            lastY = num20;
                        }
                        else
                        {
                            bool flag22 = Math.Floor(num24 * 100.0) <= (double)num9;
                            if (flag22)
                            {
                                bool flag23 = Pelea.get_Es_Celda_Obstruida(num21, Math.Floor(num23), mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                if (flag23)
                                {
                                    return(true);
                                }
                                lastX = num21;
                                lastY = Math.Floor(num23);
                            }
                            else
                            {
                                bool flag24 = Math.Floor(num25 * 100.0) >= (double)num10;
                                if (flag24)
                                {
                                    bool flag25 = Pelea.get_Es_Celda_Obstruida(num21, Math.Floor(num22), mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                    if (flag25)
                                    {
                                        return(true);
                                    }
                                    lastX = num21;
                                    lastY = Math.Floor(num22);
                                }
                                else
                                {
                                    bool flag26 = Pelea.get_Es_Celda_Obstruida(num21, Math.Floor(num22), mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                    if (flag26)
                                    {
                                        return(true);
                                    }
                                    lastX = num21;
                                    lastY = Math.Floor(num22);
                                    bool flag27 = Pelea.get_Es_Celda_Obstruida(num21, Math.Floor(num23), mapa, celdas_ocupadas, (int)celda_destino.id, lastX, lastY);
                                    if (flag27)
                                    {
                                        return(true);
                                    }
                                    lastY = Math.Floor(num23);
                                }
                            }
                        }
                    }
                }
                num  = (num * 100.0 + num6 * 100.0) / 100.0;
                num2 = (num2 * 100.0 + num7 * 100.0) / 100.0;
                num11++;
            }
            return(false);
        }