Esempio n. 1
0
 public Region(int x, int y, int width, int height, int startZ, int endZ, RegionWorld world)
 {
     this.m_X = x;
     this.m_Y = y;
     this.m_Width = width;
     this.m_Height = height;
     this.m_StartZ = startZ;
     this.m_EndZ = endZ;
     this.m_World = world;
 }
Esempio n. 2
0
 public Region(int x, int y, int width, int height, int startZ, int endZ, RegionWorld world)
 {
     this.m_X      = x;
     this.m_Y      = y;
     this.m_Width  = width;
     this.m_Height = height;
     this.m_StartZ = startZ;
     this.m_EndZ   = endZ;
     this.m_World  = world;
 }
Esempio n. 3
0
        public static Region Find(Region[] regs, int x, int y, int z, int w)
        {
            for (int i = 0; i < regs.Length; i++)
            {
                Region      region = regs[i];
                RegionWorld world  = region.m_World;
                bool        flag   = false;
                switch (world)
                {
                case RegionWorld.Britannia:
                    flag = (w == 0) || (w == 1);
                    break;

                case RegionWorld.Felucca:
                    flag = w == 0;
                    break;

                case RegionWorld.Trammel:
                    flag = w == 1;
                    break;

                case RegionWorld.Ilshenar:
                    flag = w == 2;
                    break;

                case RegionWorld.Malas:
                    flag = w == 3;
                    break;

                case RegionWorld.Tokuno:
                    flag = w == 4;
                    break;
                }
                if (((flag && (((ulong)(x - region.m_X)) < region.m_Width)) && ((((ulong)(y - region.m_Y)) < region.m_Height) && (z >= region.m_StartZ))) && (z <= region.m_EndZ))
                {
                    return(region);
                }
            }
            return(null);
        }
Esempio n. 4
0
        public Region(string line)
        {
            string[] strArray = line.Split(' ');
            this.m_X      = int.Parse(strArray[0]);
            this.m_Y      = int.Parse(strArray[1]);
            this.m_Width  = int.Parse(strArray[2]);
            this.m_Height = int.Parse(strArray[3]);
            this.m_StartZ = int.Parse(strArray[4]);
            this.m_EndZ   = int.Parse(strArray[5]);
            if (strArray.Length < 7)
            {
                return;
            }
            switch (strArray[6])
            {
            case "B":
                this.m_World = RegionWorld.Britannia;
                break;

            case "F":
                this.m_World = RegionWorld.Felucca;
                break;

            case "T":
                this.m_World = RegionWorld.Trammel;
                break;

            case "I":
                this.m_World = RegionWorld.Ilshenar;
                break;

            case "M":
                this.m_World = RegionWorld.Malas;
                break;

            case "K":
                this.m_World = RegionWorld.Tokuno;
                break;
            }
        }
Esempio n. 5
0
        public static Region Find(Region[] regs, int x, int y, int z, int w)
        {
            for (int index = 0; index < regs.Length; ++index)
            {
                Region      region      = regs[index];
                RegionWorld regionWorld = region.m_World;
                bool        flag        = false;
                switch (regionWorld)
                {
                case RegionWorld.Britannia:
                    flag = w == 0 || w == 1;
                    break;

                case RegionWorld.Felucca:
                    flag = w == 0;
                    break;

                case RegionWorld.Trammel:
                    flag = w == 1;
                    break;

                case RegionWorld.Ilshenar:
                    flag = w == 2;
                    break;

                case RegionWorld.Malas:
                    flag = w == 3;
                    break;

                case RegionWorld.Tokuno:
                    flag = w == 4;
                    break;
                }
                if (flag && (long)(uint)(x - region.m_X) < (long)region.m_Width && ((long)(uint)(y - region.m_Y) < (long)region.m_Height && z >= region.m_StartZ) && z <= region.m_EndZ)
                {
                    return(region);
                }
            }
            return((Region)null);
        }
Esempio n. 6
0
        public Region(string line)
        {
            string[] strArray = line.Split(new char[] { ' ' });
            this.m_X = int.Parse(strArray[0]);
            this.m_Y = int.Parse(strArray[1]);
            this.m_Width = int.Parse(strArray[2]);
            this.m_Height = int.Parse(strArray[3]);
            this.m_StartZ = int.Parse(strArray[4]);
            this.m_EndZ = int.Parse(strArray[5]);
            if (strArray.Length >= 7)
            {
                switch (strArray[6])
                {
                    case "B":
                        this.m_World = RegionWorld.Britannia;
                        break;

                    case "F":
                        this.m_World = RegionWorld.Felucca;
                        break;

                    case "T":
                        this.m_World = RegionWorld.Trammel;
                        break;

                    case "I":
                        this.m_World = RegionWorld.Ilshenar;
                        break;

                    case "M":
                        this.m_World = RegionWorld.Malas;
                        break;

                    case "K":
                        this.m_World = RegionWorld.Tokuno;
                        break;
                }
            }
        }
Esempio n. 7
0
        private static unsafe void Load(int x, int y, int w, int h, int world, Texture tex)
        {
            if (m_Colors == null)
            {
                LoadColors();
            }
            if ((m_StrongReferences == null) || (m_StrongReferences.Length != (w * h)))
            {
                m_StrongReferences = new MapBlock[w * h];
            }
            if ((m_Guarded == null) || (m_Guarded.Length != ((w * h) * 0x40)))
            {
                m_Guarded = new BitArray((w * h) * 0x40);
            }
            else
            {
                m_Guarded.SetAll(false);
            }
            Region[] guardedRegions = Region.GuardedRegions;
            int      num            = x * 8;
            int      num2           = y * 8;
            int      num3           = w * 8;
            int      num4           = h * 8;

            for (int i = 0; i < guardedRegions.Length; i++)
            {
                Region      region = guardedRegions[i];
                RegionWorld world2 = region.World;
                bool        flag   = false;
                switch (world2)
                {
                case RegionWorld.Britannia:
                    flag = (world == 0) || (world == 1);
                    break;

                case RegionWorld.Felucca:
                    flag = world == 0;
                    break;

                case RegionWorld.Trammel:
                    flag = world == 1;
                    break;

                case RegionWorld.Ilshenar:
                    flag = world == 2;
                    break;

                case RegionWorld.Malas:
                    flag = world == 3;
                    break;

                case RegionWorld.Tokuno:
                    flag = world == 4;
                    break;
                }
                if (flag)
                {
                    int num6 = region.X - num;
                    int num7 = region.Y - num2;
                    if (((num6 < num3) && (num7 < num4)) && ((num6 > -region.Width) && (num7 > -region.Height)))
                    {
                        int num8 = num6 + region.Width;
                        int num9 = num7 + region.Height;
                        if (num6 < 0)
                        {
                            num6 = 0;
                        }
                        if (num7 < 0)
                        {
                            num7 = 0;
                        }
                        for (int j = num6; (j < num8) && (j < num3); j++)
                        {
                            for (int k = num7; (k < num9) && (k < num4); k++)
                            {
                                m_Guarded[(k * num3) + j] = true;
                            }
                        }
                    }
                }
            }
            TileMatrix matrix = Map.GetMatrix(world);
            LockData   data   = tex.Lock(LockFlags.WriteOnly);
            int        num12  = data.Pitch >> 1;

            fixed(short *numRef = m_Colors)
            {
                for (int m = 0; m < w; m++)
                {
                    short *numPtr = (short *)(data.pvSrc + ((m << 3) * 2));
                    for (int num14 = 0; num14 < h; num14++)
                    {
                        MapBlock block = matrix.GetBlock(x + m, y + num14);
                        m_StrongReferences[(num14 * w) + m] = block;
                        HuedTile[][][] tileArray  = (block == null) ? matrix.EmptyStaticBlock : block.m_StaticTiles;
                        Tile[]         tileArray2 = (block == null) ? matrix.InvalidLandBlock : block.m_LandTiles;
                        int            index      = 0;
                        for (int num16 = 0; index < 8; num16 += 8)
                        {
                            for (int num17 = 0; num17 < 8; num17++)
                            {
                                int num18 = -255;
                                int num19 = -255;
                                int num20 = 0;
                                int hue   = 0;
                                for (int num24 = 0; num24 < tileArray[num17][index].Length; num24++)
                                {
                                    HuedTile tile = tileArray[num17][index][num24];
                                    int      iD   = tile.ID;
                                    switch (iD)
                                    {
                                    case 0x4001:
                                    case 0x5796:
                                    case 0x61a4:
                                    case 0x6198:
                                    case 0x61bc:
                                    case 0x6199:
                                        break;

                                    default:
                                    {
                                        int z     = tile.Z;
                                        int num23 = z + Map.GetHeight(iD);
                                        if ((num23 > num18) || ((z > num19) && (num23 >= num18)))
                                        {
                                            num18 = num23;
                                            num19 = z;
                                            num20 = iD;
                                            hue   = tile.Hue;
                                        }
                                        break;
                                    }
                                    }
                                }
                                if ((tileArray2[num16 + num17].Z > num18) && (tileArray2[num16 + num17].ID != 2))
                                {
                                    num20 = tileArray2[num16 + num17].ID;
                                    hue   = 0;
                                }
                                int num26 = ((((num14 << 3) + index) * num3) + (m << 3)) + num17;
                                if (m_Guarded[num26] && ((((num26 >= 1) && !m_Guarded[num26 - 1]) || ((num26 >= num3) && !m_Guarded[num26 - num3])) || (((num26 < (m_Guarded.Length - 1)) && !m_Guarded[num26 + 1]) || ((num26 < (m_Guarded.Length - num3)) && !m_Guarded[num26 + num3]))))
                                {
                                    numPtr[num17] = -31776;
                                }
                                else if (hue == 0)
                                {
                                    numPtr[num17] = numRef[num20];
                                }
                                else
                                {
                                    numPtr[num17] = (short)Hues.Load((hue & 0x3fff) | 0x8000).Pixel((ushort)numRef[num20]);
                                }
                            }
                            numPtr += num12;
                            index++;
                        }
                    }
                }
                ArrayList items = Engine.Multis.Items;

                for (int n = 0; n < items.Count; n++)
                {
                    Item item = (Item)items[n];
                    if (item.InWorld && item.Visible)
                    {
                        CustomMultiEntry customMulti = CustomMultiLoader.GetCustomMulti(item.Serial, item.Revision);
                        Multi            multi       = null;
                        if (customMulti != null)
                        {
                            multi = customMulti.Multi;
                        }
                        if (multi == null)
                        {
                            multi = item.Multi;
                        }
                        if (multi != null)
                        {
                            short[][] radar = multi.Radar;
                            if (radar != null)
                            {
                                int num28;
                                int num29;
                                int num30;
                                int num31;
                                multi.GetBounds(out num28, out num29, out num30, out num31);
                                int num32 = 0;
                                for (int num33 = (item.Y - (y << 3)) + num29; num32 < radar.Length; num33++)
                                {
                                    if ((num33 >= 0) && (num33 < (h << 3)))
                                    {
                                        short * numPtr2   = (short *)(data.pvSrc + ((num33 * num12) * 2));
                                        short[] numArray2 = radar[num32];
                                        int     num34     = 0;
                                        for (int num35 = (item.X - (x << 3)) + num28; num34 < numArray2.Length; num35++)
                                        {
                                            if (((num35 >= 0) && (num35 < (w << 3))) && (numArray2[num34] != 0))
                                            {
                                                numPtr2[num35] = numRef[numArray2[num34]];
                                            }
                                            num34++;
                                        }
                                    }
                                    num32++;
                                }
                            }
                        }
                    }
                }
            }

            tex.Unlock();
        }
Esempio n. 8
0
        private static unsafe void Load(int x, int y, int w, int h, int world, Texture tex)
        {
            if (GRadar.m_Colors == null)
            {
                GRadar.LoadColors();
            }
            if (GRadar.m_StrongReferences == null || GRadar.m_StrongReferences.Length != w * h)
            {
                GRadar.m_StrongReferences = new MapBlock[w * h];
            }
            if (GRadar.m_Guarded == null || GRadar.m_Guarded.Length != w * h * 64)
            {
                GRadar.m_Guarded = new BitArray(w * h * 64);
            }
            else
            {
                GRadar.m_Guarded.SetAll(false);
            }
            Region[] guardedRegions = Region.GuardedRegions;
            int      num1           = x * 8;
            int      num2           = y * 8;
            int      num3           = w * 8;
            int      num4           = h * 8;

            for (int index1 = 0; index1 < guardedRegions.Length; ++index1)
            {
                Region      region = guardedRegions[index1];
                RegionWorld world1 = region.World;
                bool        flag   = false;
                switch (world1)
                {
                case RegionWorld.Britannia:
                    flag = world == 0 || world == 1;
                    break;

                case RegionWorld.Felucca:
                    flag = world == 0;
                    break;

                case RegionWorld.Trammel:
                    flag = world == 1;
                    break;

                case RegionWorld.Ilshenar:
                    flag = world == 2;
                    break;

                case RegionWorld.Malas:
                    flag = world == 3;
                    break;

                case RegionWorld.Tokuno:
                    flag = world == 4;
                    break;
                }
                if (flag)
                {
                    int num5 = region.X - num1;
                    int num6 = region.Y - num2;
                    if (num5 < num3 && num6 < num4 && (num5 > -region.Width && num6 > -region.Height))
                    {
                        int num7 = num5 + region.Width;
                        int num8 = num6 + region.Height;
                        if (num5 < 0)
                        {
                            num5 = 0;
                        }
                        if (num6 < 0)
                        {
                            num6 = 0;
                        }
                        for (int index2 = num5; index2 < num7 && index2 < num3; ++index2)
                        {
                            for (int index3 = num6; index3 < num8 && index3 < num4; ++index3)
                            {
                                GRadar.m_Guarded[index3 * num3 + index2] = true;
                            }
                        }
                    }
                }
            }
            TileMatrix matrix   = Map.GetMatrix(world);
            LockData   lockData = tex.Lock(LockFlags.WriteOnly);
            int        num9     = lockData.Pitch >> 1;

            fixed(short *numPtr1 = GRadar.m_Colors)
            {
                for (int index1 = 0; index1 < w; ++index1)
                {
                    short *numPtr2 = (short *)((IntPtr)lockData.pvSrc + (index1 << 3) * 2);
                    for (int index2 = 0; index2 < h; ++index2)
                    {
                        MapBlock block = matrix.GetBlock(x + index1, y + index2);
                        GRadar.m_StrongReferences[index2 * w + index1] = block;
                        HuedTile[][][] huedTileArray = block == null ? matrix.EmptyStaticBlock : block.m_StaticTiles;
                        Tile[]         tileArray     = block == null ? matrix.InvalidLandBlock : block.m_LandTiles;
                        int            index3        = 0;
                        int            num5          = 0;
                        while (index3 < 8)
                        {
                            for (int index4 = 0; index4 < 8; ++index4)
                            {
                                int num6   = -255;
                                int num7   = -255;
                                int index5 = 0;
                                int num8   = 0;
                                for (int index6 = 0; index6 < huedTileArray[index4][index3].Length; ++index6)
                                {
                                    HuedTile huedTile = huedTileArray[index4][index3][index6];
                                    int      num10    = 16384 + (int)huedTile.itemId;
                                    switch (num10)
                                    {
                                    case 16385:
                                    case 22422:
                                    case 24996:
                                    case 24984:
                                    case 25020:
                                    case 24985:
                                        goto case 16385;

                                    default:
                                        int num11 = (int)huedTile.z;
                                        int num12 = num11 + (int)Map.GetItemHeight(huedTile.itemId);
                                        if (num12 > num6 || num11 > num7 && num12 >= num6)
                                        {
                                            num6   = num12;
                                            num7   = num11;
                                            index5 = num10;
                                            num8   = (int)huedTile.hueId;
                                            goto case 16385;
                                        }
                                        else
                                        {
                                            goto case 16385;
                                        }
                                    }
                                }
                                if ((int)tileArray[num5 + index4].z > num6 && tileArray[num5 + index4].Visible)
                                {
                                    index5 = (int)tileArray[num5 + index4].landId;
                                    num8   = 0;
                                }
                                numPtr2[index4] = num8 != 0 ? (short)Hues.Load(num8 & 16383 | 32768).Pixel((ushort)numPtr1[index5]) : numPtr1[index5];
                            }
                            numPtr2 += num9;
                            ++index3;
                            num5 += 8;
                        }
                    }
                }
                ArrayList items = Engine.Multis.Items;

                for (int index1 = 0; index1 < items.Count; ++index1)
                {
                    Item obj = (Item)items[index1];
                    if (obj.InWorld)
                    {
                        CustomMultiEntry customMulti = CustomMultiLoader.GetCustomMulti(obj.Serial, obj.Revision);
                        Multi            multi       = (Multi)null;
                        if (customMulti != null)
                        {
                            multi = customMulti.Multi;
                        }
                        if (multi == null)
                        {
                            multi = obj.Multi;
                        }
                        if (multi != null)
                        {
                            short[][] radar = multi.Radar;
                            if (radar != null)
                            {
                                int xMin;
                                int yMin;
                                int xMax;
                                int yMax;
                                multi.GetBounds(out xMin, out yMin, out xMax, out yMax);
                                int index2 = 0;
                                int num5   = obj.Y - (y << 3) + yMin;
                                while (index2 < radar.Length)
                                {
                                    if (num5 >= 0 && num5 < h << 3)
                                    {
                                        short * numPtr2  = (short *)((IntPtr)lockData.pvSrc + (num5 * num9) * 2);
                                        short[] numArray = radar[index2];
                                        int     index3   = 0;
                                        int     index4   = obj.X - (x << 3) + xMin;
                                        while (index3 < numArray.Length)
                                        {
                                            if (index4 >= 0 && index4 < w << 3 && (int)numArray[index3] != 0)
                                            {
                                                numPtr2[index4] = numPtr1[16384 + (int)numArray[index3]];
                                            }
                                            ++index3;
                                            ++index4;
                                        }
                                    }
                                    ++index2;
                                    ++num5;
                                }
                            }
                        }
                    }
                }
            }

            tex.Unlock();
        }