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; }
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); }
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; } }
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); }
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; } } }
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(); }
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(); }