1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. namespace WowDBCExample
  5. {
  6. [StructLayout(LayoutKind.Sequential)]
  7. struct AreaTableRec
  8. {
  9. public uint m_ID; // 0
  10. public uint m_ContinentID; // 1
  11. public uint m_ParentAreaID; // 2
  12. public uint m_AreaBit; // 3
  13. public uint m_flags; // 4
  14. public uint m_unk1; // 5
  15. public uint m_SoundProviderPref; // 6
  16. public uint m_SoundProviderPrefUnderwater; // 7
  17. public uint m_AmbienceID; // 8
  18. public uint m_ZoneMusic; // 9
  19. public uint m_AreaNameInternal; // 10
  20. public uint m_IntroSound; // 11
  21. public uint m_ExplorationLevel; // 12
  22. public uint m_AreaName_lang; // 13
  23. public uint m_factionGroupMask; // 14
  24. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  25. public uint[] m_liquidTypeID; // 15-18
  26. public float m_minElevation; // 19
  27. public float m_ambient_multiplier; // 20
  28. public uint m_lightid; // 21
  29. public uint m_field22; // 22
  30. public uint m_field23; // 23
  31. public uint m_field24; // 24
  32. public uint m_field25; // 25
  33. public uint m_field26; // 26
  34. public uint m_field27; // 27
  35. // read area name using our static memory reading helper class
  36. public string AreaName { get { return WowMemory.ReadCString(m_AreaName_lang, 255); } }
  37. };
  38. class Program
  39. {
  40. const uint AREATABLE_DBC = 0x00FBCBF4; // 5.0.4.16016 (not rebased)
  41. static void Main(string[] args)
  42. {
  43. DBC<AreaTableRec> areaTable = new DBC<AreaTableRec>(new IntPtr(AREATABLE_DBC));
  44. // use 1
  45. foreach (var row in areaTable)
  46. {
  47. Console.WriteLine("Area {0}: {1}", row.m_ID, row.AreaName);
  48. }
  49. // use 2
  50. for (var i = areaTable.MinIndex; i <= areaTable.MaxIndex; ++i)
  51. {
  52. if (areaTable.HasRow(i))
  53. Console.WriteLine("Area {0}: {1}", areaTable[i].m_ID, areaTable[i].AreaName);
  54. }
  55. Console.ReadKey();
  56. }
  57. }
  58. }