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