Advertisement
Rochet2

Current enumcode

Oct 18th, 2014
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 21.28 KB | None | 0 0
  1. local enums = {}
  2.  
  3. local coreName = GetCoreName()
  4. local expansion = GetCoreExpansion()
  5. -- Define checks here. These are functions that when called return true or false. The key is the function name tag as string in the enum definitions
  6. local checks = {
  7.     mangos = function() return coreName == "MaNGOS" or coreName == "cMaNGOS" end,
  8.     trinity = function() return coreName == "TrinityCore" end,
  9.    
  10.     added_tbc = function() return expansion >= 1 end,
  11.     added_wotlk = function() return expansion >= 2 end,
  12.     added_cata = function() return expansion >= 3 end,
  13.    
  14.     removed_tbc = function() return expansion < 1 end,
  15.     removed_wotlk = function() return expansion < 2 end,
  16.     removed_cata = function() return expansion < 3 end,
  17. }
  18. -- This function will take a value and then return what it represents.
  19. -- Normally value is returned, but if table is passed the returned value will be any value in the table that is not a key to checks table, assuming any check in the table didnt fail
  20. local function eval(valortbl)
  21.     local val = valortbl
  22.     if type(valortbl) == "table" then
  23.         val = nil
  24.         for k, v in ipairs(valortbl) do
  25.             if type(v) == "table" then
  26.                 -- If we are on a table, evaluate it to some number or nil. Assign it if not nil, inner tables always overwrite lower values.
  27.                 val = eval(v) or val
  28.             elseif checks[v] and not checks[v]() then
  29.                 -- If we are on a tag and it doesn't pass, throw out this item
  30.                 val = nil
  31.                 break
  32.             else
  33.                 -- We are on a value, assign it, but dont overwrite
  34.                 val = val or v
  35.             end
  36.         end
  37.     end
  38.     return val
  39. end
  40. -- local function enum(_enum)
  41. --     for k, v in pairs(_enum) do
  42. --         _enum[k] = eval(v)
  43. --     end
  44. --     return _enum
  45. -- end
  46. local emt = {
  47.     __index = function(t, k)
  48.         error("Attempted to access non-existent enum item "..k, 2)
  49.     end
  50. }
  51. local function makemeta(enums)
  52.     for ename, t in pairs(enums) do
  53.         -- Add a metatable so that accessing a bad value causes an error.
  54.         enums[ename] = setmetatable(t, emt)
  55.     end
  56.     return enums
  57. end
  58. local smt = {
  59.     __newindex = function(self, k, v)
  60.         rawset(self, k, eval(v))
  61.     end
  62. }
  63. local function enum()
  64.     -- Create a table with a metatable that evaluates assigned values automatically
  65.     return setmetatable({}, smt)
  66. end
  67.  
  68. enums.CorpseType = enum()
  69. enums.CorpseType.CORPSE_BONES               = 0
  70. enums.CorpseType.CORPSE_RESURRECTABLE_PVE   = 1
  71. enums.CorpseType.CORPSE_RESURRECTABLE_PVP   = 2
  72.  
  73. enums.GOState = enum()
  74. enums.GOState.GO_STATE_ACTIVE               = 0 -- show in world as used and not reset (closed door open)
  75. enums.GOState.GO_STATE_READY                = 1 -- show in world as ready (closed door close)
  76. enums.GOState.GO_STATE_ACTIVE_ALTERNATIVE   = 2 -- show in world as used in alt way and not reset (closed door open by cannon fire)
  77.  
  78. enums.LootState = enum()
  79. enums.LootState.GO_NOT_READY                = 0
  80. enums.LootState.GO_READY                    = 1 -- can be ready but despawned, and then not possible activate until spawn
  81. enums.LootState.GO_ACTIVATED                = 2
  82. enums.LootState.GO_JUST_DEACTIVATED         = 3
  83.  
  84. enums.QuestFlags = enum()
  85. enums.QuestFlags.QUEST_FLAGS_NONE                       = 0x00000000
  86. enums.QuestFlags.QUEST_FLAGS_STAY_ALIVE                 = 0x00000001 -- Not used currently
  87. enums.QuestFlags.QUEST_FLAGS_PARTY_ACCEPT               = 0x00000002 -- Not used currently. If player in party, all players that can accept this quest will receive confirmation box to accept quest CMSG_QUEST_CONFIRM_ACCEPT/SMSG_QUEST_CONFIRM_ACCEPT
  88. enums.QuestFlags.QUEST_FLAGS_EXPLORATION                = 0x00000004 -- Not used currently
  89. enums.QuestFlags.QUEST_FLAGS_SHARABLE                   = 0x00000008 -- Can be shared: Player::CanShareQuest()
  90. enums.QuestFlags.QUEST_FLAGS_HAS_CONDITION              = 0x00000010 -- Not used currently
  91. enums.QuestFlags.QUEST_FLAGS_HIDE_REWARD_POI            = 0x00000020 -- Not used currently: Unsure of content
  92. enums.QuestFlags.QUEST_FLAGS_RAID                       = 0x00000040 -- Not used currently
  93. enums.QuestFlags.QUEST_FLAGS_TBC                        = {0x00000080, "added_tbc"} -- Not used currently: Available if TBC expansion enabled only
  94. enums.QuestFlags.QUEST_FLAGS_NO_MONEY_FROM_XP           = 0x00000100 -- Not used currently: Experience is not converted to gold at max level
  95. enums.QuestFlags.QUEST_FLAGS_HIDDEN_REWARDS             = 0x00000200 -- Items and money rewarded only sent in SMSG_QUESTGIVER_OFFER_REWARD (not in SMSG_QUESTGIVER_QUEST_DETAILS or in client quest log(SMSG_QUEST_QUERY_RESPONSE))
  96. enums.QuestFlags.QUEST_FLAGS_TRACKING                   = 0x00000400 -- These quests are automatically rewarded on quest complete and they will never appear in quest log client side.
  97. enums.QuestFlags.QUEST_FLAGS_DEPRECATE_REPUTATION       = {0x00000800, "added_tbc"} -- Not used currently
  98. enums.QuestFlags.QUEST_FLAGS_DAILY                      = {0x00001000, "added_tbc"} -- Used to know quest is Daily one
  99. enums.QuestFlags.QUEST_FLAGS_FLAGS_PVP                  = {0x00002000, "added_wotlk"} -- Having this quest in log forces PvP flag
  100. enums.QuestFlags.QUEST_FLAGS_UNAVAILABLE                = {0x00004000, "added_wotlk"} -- Used on quests that are not generically available
  101. enums.QuestFlags.QUEST_FLAGS_WEEKLY                     = {0x00008000, "added_wotlk"}
  102. enums.QuestFlags.QUEST_FLAGS_AUTOCOMPLETE               = {0x00010000, "added_wotlk"} -- Quests with this flag player submit automatically by special button in player gui
  103. enums.QuestFlags.QUEST_FLAGS_DISPLAY_ITEM_IN_TRACKER    = {0x00020000, "added_wotlk"} -- Displays usable item in quest tracker
  104. enums.QuestFlags.QUEST_FLAGS_OBJ_TEXT                   = {0x00040000, "added_wotlk"} -- use Objective text as Complete text
  105. enums.QuestFlags.QUEST_FLAGS_AUTO_ACCEPT                = {0x00080000, "added_wotlk"} -- The client recognizes this flag as auto-accept. However, NONE of the current quests (3.3.5a) have this flag. Maybe blizz used to use it, or will use it in the future.
  106. enums.QuestFlags.QUEST_FLAGS_UNK1                       = {0x00100000, "added_cata"}
  107. enums.QuestFlags.QUEST_FLAGS_AUTO_TAKE                  = {0x00200000, "added_cata"} -- Automatically suggestion of accepting quest. Not from npc.
  108. -- enums.QuestFlags.QUEST_FLAGS_UNK2                    = {0x00400000, "added_cata"}
  109. -- enums.QuestFlags.QUEST_FLAGS_UNK3                    = {0x00800000, "added_cata"} -- Found in quest 14069
  110. -- enums.QuestFlags.QUEST_FLAGS_UNK4                    = {0x01000000, "added_cata"}
  111. -- ... 4.x added flags up to 0x80000000 - all unknown for now
  112.  
  113. enums.RemoveMethod = enum()
  114. enums.RemoveMethod.GROUP_REMOVEMETHOD_DEFAULT       = 0
  115. enums.RemoveMethod.GROUP_REMOVEMETHOD_KICK          = 1
  116. enums.RemoveMethod.GROUP_REMOVEMETHOD_LEAVE         = 2
  117. enums.RemoveMethod.GROUP_REMOVEMETHOD_KICK_LFG      = 3
  118.  
  119. enums.SelectAggroTarget = enum()
  120. enums.SelectAggroTarget.SELECT_TARGET_RANDOM        = 0 -- Just selects a random target
  121. enums.SelectAggroTarget.SELECT_TARGET_TOPAGGRO      = 1 -- Selects targes from top aggro to bottom
  122. enums.SelectAggroTarget.SELECT_TARGET_BOTTOMAGGRO   = 2 -- Selects targets from bottom aggro to top
  123. enums.SelectAggroTarget.SELECT_TARGET_NEAREST       = 3
  124. enums.SelectAggroTarget.SELECT_TARGET_FARTHEST      = 4
  125.  
  126. enums.SpellSchools = enum()
  127. enums.SpellSchools.SPELL_SCHOOL_NORMAL              = 0 -- Physical, Armor
  128. enums.SpellSchools.SPELL_SCHOOL_HOLY                = 1
  129. enums.SpellSchools.SPELL_SCHOOL_FIRE                = 2
  130. enums.SpellSchools.SPELL_SCHOOL_NATURE              = 3
  131. enums.SpellSchools.SPELL_SCHOOL_FROST               = 4
  132. enums.SpellSchools.SPELL_SCHOOL_SHADOW              = 5
  133. enums.SpellSchools.SPELL_SCHOOL_ARCANE              = 6
  134.  
  135. enums.SpellSchoolMask = enum()
  136. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NONE        = 0x00 -- not exist
  137. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NORMAL      = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_NORMAL) -- PHYSICAL (Armor)
  138. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_HOLY        = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_HOLY)
  139. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FIRE        = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_FIRE)
  140. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NATURE      = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_NATURE)
  141. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FROST       = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_FROST)
  142. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SHADOW      = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_SHADOW)
  143. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_ARCANE      = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_ARCANE)
  144.  
  145. -- unions
  146. -- 124, not include normal and holy damage
  147. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SPELL       = (enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FIRE + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NATURE + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FROST + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SHADOW + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_ARCANE)
  148. -- 126
  149. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_MAGIC       = (enums.SpellSchoolMask.SPELL_SCHOOL_MASK_HOLY + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SPELL)
  150. -- 127
  151. enums.SpellSchoolMask.SPELL_SCHOOL_MASK_ALL         = (enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NORMAL + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_MAGIC)
  152.  
  153. enums.TeamId = enum()
  154. enums.TeamId.TEAM_ALLIANCE                  = 0
  155. enums.TeamId.TEAM_HORDE                     = 1
  156. enums.TeamId.TEAM_NEUTRAL                   = 2
  157.  
  158. enums.WeatherType = enum()
  159. enums.WeatherType.WEATHER_TYPE_FINE         = 0
  160. enums.WeatherType.WEATHER_TYPE_RAIN         = 1
  161. enums.WeatherType.WEATHER_TYPE_SNOW         = 2
  162. enums.WeatherType.WEATHER_TYPE_STORM        = 3
  163. enums.WeatherType.WEATHER_TYPE_THUNDERS     = 86
  164. enums.WeatherType.WEATHER_TYPE_BLACKRAIN    = 90
  165.  
  166. enums.UnitState = enum() -- had TC UNIT_STAT_ or mangos UNIT_STATE_ prefix
  167. -- persistent state (applied by aura/etc until expire)
  168. enums.UnitState.MELEE_ATTACKING             = {{0x00000001, "trinity"}, 0x00000002} -- unit is melee attacking someone Unit::Attack
  169. enums.UnitState.ATTACK_PLAYER               = {{0x00000002, "trinity"}, 0x00004000} -- unit attack player or player's controlled unit and have contested pvpv timer setup, until timer expire, combat end and etc, player is melee attacking someone
  170. -- enums.UnitState.MELEE_ATTACK_BY          = {0x00000004, "mangos"} -- player is melee attack by someone
  171. enums.UnitState.CASTING                     = {0x00008000, "mangos"}
  172. enums.UnitState.DIED                        = {{0x00000004, "trinity"}, 0x00000001} -- Unit::SetFeignDeath, player has fake death aura
  173. enums.UnitState.STUNNED                     = 0x00000008 -- Aura::HandleAuraModStun
  174. enums.UnitState.ROOT                        = {{0x00000010, "trinity"}, 0x00000400} -- Aura::HandleAuraModRoot
  175. enums.UnitState.ISOLATED                    = {{0x00000020, "trinity"}, 0x00002000} -- area auras do not affect other players, Aura::HandleAuraModSchoolImmunity
  176.  
  177. -- persistent movement generator state (all time while movement generator applied to unit (independent from top state of movegen)
  178. enums.UnitState.TAXI_FLIGHT                 = {{0x00000080, "trinity"}, 0x00000100} -- player is in flight mode (in fact interrupted at far teleport until next map telport landing) -- IN_FLIGHT
  179. enums.UnitState.DISTRACTED                  = {{0x00000100, "trinity"}, 0x00001000} -- DistractedMovementGenerator active
  180.  
  181. -- persistent movement generator state with non-persistent mirror states for stop support
  182. -- (can be removed temporary by stop command or another movement generator apply)
  183. -- not use _MOVE versions for generic movegen state, it can be removed temporary for unit stop and etc
  184. enums.UnitState.CONFUSED                    = {{0x00000200, "trinity"}, 0x00000800} -- ConfusedMovementGenerator active/onstack
  185. enums.UnitState.CONFUSED_MOVE               = {{0x00000400, "trinity"}, 0x01000000}
  186. enums.UnitState.ROAMING                     = {{0x00000800, "trinity"}, 0x00000010} -- RandomMovementGenerator/PointMovementGenerator/WaypointMovementGenerator active (now always set)
  187. enums.UnitState.ROAMING_MOVE                = {{0x00001000, "trinity"}, 0x00800000}
  188. enums.UnitState.CHASE                       = {{0x00002000, "trinity"}, 0x00000020} -- ChaseMovementGenerator active
  189. enums.UnitState.CHASE_MOVE                  = {{0x00004000, "trinity"}, 0x04000000}
  190. enums.UnitState.FOLLOW                      = {{0x00008000, "trinity"}, 0x00000200} -- FollowMovementGenerator active
  191. enums.UnitState.FOLLOW_MOVE                 = {{0x00010000, "trinity"}, 0x08000000}
  192. enums.UnitState.FLEEING                     = {{0x00020000, "trinity"}, 0x00000080} -- FleeMovementGenerator/TimedFleeingMovementGenerator active/onstack
  193. enums.UnitState.FLEEING_MOVE                = {{0x00040000, "trinity"}, 0x02000000}
  194. -- More room for other MMGens
  195.  
  196. enums.UnitState.CONTROLLED                  = {{0x00000040, "trinity"}, {(enums.UnitState.CONFUSED + enums.UnitState.STUNNED + enums.UnitState.FLEEING), "mangos"}} -- Aura::HandleAuraModPossess
  197.  
  198. -- High-Level states (usually only with Creatures)
  199. enums.UnitState.NO_COMBAT_MOVEMENT          = {0x01000000, "trinity"} -- Combat Movement for MoveChase stopped
  200. enums.UnitState.RUNNING                     = {0x02000000, "trinity"} -- SetRun for waypoints and such
  201. enums.UnitState.WAYPOINT_PAUSED             = {0x04000000, "trinity"} -- Waypoint-Movement paused genericly (ie by script)
  202. enums.UnitState.IGNORE_PATHFINDING          = {{0x10000000, "trinity"}, 0x10000000} -- do not use pathfinding in any MovementGenerator
  203.  
  204. -- enums.UnitState.SEARCHING                = {0x00000040, "mangos"}
  205. enums.UnitState.POSSESSED                   = {0x00010000, "mangos"}
  206. enums.UnitState.CHARGING                    = {0x00020000, "mangos"}
  207. enums.UnitState.JUMPING                     = {0x00040000, "mangos"}
  208. enums.UnitState.MOVE                        = {0x00100000, "mangos"}
  209. enums.UnitState.ROTATING                    = {0x00200000, "mangos"}
  210. enums.UnitState.EVADE                       = {0x00400000, "mangos"}
  211. enums.UnitState.UNATTACKABLE                = {enums.UnitState.TAXI_FLIGHT, "mangos"}
  212.  
  213. enums.UnitState.MOVING                      = {enums.UnitState.ROAMING_MOVE + enums.UnitState.CONFUSED_MOVE + enums.UnitState.FLEEING_MOVE + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE, "mangos"}
  214. enums.UnitState.ALL_STATE_SUPPORTED         = {enums.UnitState.DIED + enums.UnitState.MELEE_ATTACKING + enums.UnitState.STUNNED + enums.UnitState.ROAMING + enums.UnitState.CHASE
  215.                                             + enums.UnitState.FLEEING + enums.UnitState.IN_FLIGHT + enums.UnitState.FOLLOW + enums.UnitState.ROOT + enums.UnitState.CONFUSED
  216.                                             + enums.UnitState.DISTRACTED + enums.UnitState.ISOLATED + enums.UnitState.ATTACK_PLAYER + enums.UnitState.CASTING
  217.                                             + enums.UnitState.POSSESSED + enums.UnitState.CHARGING + enums.UnitState.JUMPING + enums.UnitState.MOVE + enums.UnitState.ROTATING
  218.                                             + enums.UnitState.EVADE + enums.UnitState.ROAMING_MOVE + enums.UnitState.CONFUSED_MOVE + enums.UnitState.FLEEING_MOVE
  219.                                             + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE + enums.UnitState.IGNORE_PATHFINDING
  220.                                             "mangos"}
  221. enums.UnitState.SIGHTLESS                   = {(enums.UnitState.LOST_CONTROL + enums.UnitState.EVADE), "mangos"}
  222. enums.UnitState.CANNOT_AUTOATTACK           = ({enums.UnitState.LOST_CONTROL + enums.UnitState.CASTING), "mangos"}
  223. enums.UnitState.CANNOT_TURN                 = {(enums.UnitState.LOST_CONTROL + enums.UnitState.ROTATING), "mangos"}
  224.  
  225. -- masks (only for check)
  226.  
  227. -- can't move currently
  228. enums.UnitState.CAN_NOT_MOVE                = {enums.UnitState.ROOT + enums.UnitState.STUNNED + enums.UnitState.DIED, "trinity"}
  229.  
  230. -- stay by different reasons
  231. enums.UnitState.NOT_MOVE                    = {{enums.UnitState.ROOT + enums.UnitState.STUNNED + enums.UnitState.DIED + enums.UnitState.DISTRACTED, "trinity"}, {enums.UnitState.ROOT + enums.UnitState.STUNNED + enums.UnitState.DIED + enums.UnitState.DISTRACTED, "mangos"}}
  232.  
  233. -- stay or scripted movement for effect( = in player case you can't move by client command)
  234. enums.UnitState.NO_FREE_MOVE                = {enums.UnitState.ROOT + enums.UnitState.STUNNED + enums.UnitState.DIED + enums.UnitState.TAXI_FLIGHT + enums.UnitState.CONFUSED + enums.UnitState.FLEEING, "trinity"}
  235.  
  236. -- not react at move in sight or other
  237. enums.UnitState.CAN_NOT_REACT               = {enums.UnitState.STUNNED + enums.UnitState.DIED + enums.UnitState.CONFUSED + enums.UnitState.FLEEING, "trinity"}
  238.  
  239. -- AI disabled by some reason
  240. enums.UnitState.LOST_CONTROL                = {{enums.UnitState.FLEEING + enums.UnitState.CONTROLLED, "trinity"}, {(enums.UnitState.CONTROLLED + enums.UnitState.JUMPING + enums.UnitState.CHARGING), "mangos"}}
  241.  
  242. -- above 2 state cases
  243. enums.UnitState.CAN_NOT_REACT_OR_LOST_CONTROL  = {enums.UnitState.CAN_NOT_REACT + enums.UnitState.LOST_CONTROL, "trinity"}
  244.  
  245. -- masks (for check or reset)
  246.  
  247. -- for real move using movegen check and stop (except unstoppable flight)
  248. enums.UnitState.MOVING                      = {enums.UnitState.ROAMING_MOVE + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE + enums.UnitState.FLEEING_MOVE, "trinity"}
  249.  
  250. enums.UnitState.RUNNING_STATE               = {enums.UnitState.CHASE_MOVE + enums.UnitState.FLEEING_MOVE + enums.UnitState.RUNNING, "trinity"}
  251.  
  252. enums.UnitState.ALL_STATE                   = 0xFFFFFFFF --(STOPPED + MOVING + IN_COMBAT + IN_FLIGHT)
  253. enums.UnitState.ALL_DYN_STATES              = {bit_and(enums.UnitState.ALL_STATE, bit_not(enums.UnitState.NO_COMBAT_MOVEMENT + enums.UnitState.RUNNING + enums.UnitState.WAYPOINT_PAUSED + enums.UnitState.IGNORE_PATHFINDING)), "trinity"}
  254. -- }
  255. -- else
  256. -- enums.UnitState =
  257. -- {
  258. --     DIED            = 0x00000001,                     -- player has fake death aura
  259. --     MELEE_ATTACKING = 0x00000002,                     -- player is melee attacking someone
  260. --     --MELEE_ATTACK_BY = 0x00000004,                     -- player is melee attack by someone
  261. --     STUNNED         = 0x00000008,
  262. --     ROAMING         = 0x00000010,
  263. --     CHASE           = 0x00000020,
  264. --     --SEARCHING       = 0x00000040,
  265. --     FLEEING         = 0x00000080,
  266. --     IN_FLIGHT       = 0x00000100,                     -- player is in flight mode
  267. --     FOLLOW          = 0x00000200,
  268. --     ROOT            = 0x00000400,
  269. --     CONFUSED        = 0x00000800,
  270. --     DISTRACTED      = 0x00001000,
  271. --     ISOLATED        = 0x00002000,                     -- area auras do not affect other players
  272. --     ATTACK_PLAYER   = 0x00004000,
  273. --     CASTING         = 0x00008000,
  274. --     POSSESSED       = 0x00010000,
  275. --     CHARGING        = 0x00020000,
  276. --     JUMPING         = 0x00040000,
  277. --     MOVE            = 0x00100000,
  278. --     ROTATING        = 0x00200000,
  279. --     EVADE           = 0x00400000,
  280. --     ROAMING_MOVE    = 0x00800000,
  281. --     CONFUSED_MOVE   = 0x01000000,
  282. --     FLEEING_MOVE    = 0x02000000,
  283. --     CHASE_MOVE      = 0x04000000,
  284. --     FOLLOW_MOVE     = 0x08000000,
  285. --     IGNORE_PATHFINDING = 0x10000000,                 -- do not use pathfinding in any MovementGenerator
  286. --     ALL_STATE_SUPPORTED = DIED + MELEE_ATTACKING + STUNNED + ROAMING + CHASE
  287. --                                    + FLEEING + IN_FLIGHT + FOLLOW + ROOT + CONFUSED
  288. --                                    + DISTRACTED + ISOLATED + ATTACK_PLAYER + CASTING
  289. --                                    + POSSESSED + CHARGING + JUMPING + MOVE + ROTATING
  290. --                                    + EVADE + ROAMING_MOVE + CONFUSED_MOVE + FLEEING_MOVE
  291. --                                    + CHASE_MOVE + FOLLOW_MOVE + IGNORE_PATHFINDING,
  292. --     UNATTACKABLE    = IN_FLIGHT,
  293. --     -- for real move using movegen check and stop (except unstoppable flight)
  294. --     MOVING          = ROAMING_MOVE + CONFUSED_MOVE + FLEEING_MOVE + CHASE_MOVE + FOLLOW_MOVE,
  295. --     CONTROLLED      = (CONFUSED + STUNNED + FLEEING),
  296. --     LOST_CONTROL    = (CONTROLLED + JUMPING + CHARGING),
  297. --     SIGHTLESS       = (LOST_CONTROL + EVADE),
  298. --     CANNOT_AUTOATTACK     = (LOST_CONTROL + CASTING),
  299. --     CANNOT_TURN     = (LOST_CONTROL + ROTATING),
  300. --     -- stay by different reasons
  301. --     NOT_MOVE        = ROOT + STUNNED + DIED + DISTRACTED,
  302. --     ALL_STATE       = 0xffffffff                      --(STOPPED + MOVING + IN_COMBAT + IN_FLIGHT)
  303. -- }
  304. -- end
  305.  
  306. for ename, v in pairs(makemeta(enums)) do
  307.     _G[ename] = v
  308. end
  309.  
  310. -- -- This is how you would use the enum function.
  311. -- SpellSchoolMask = enum({
  312. --     NONE = 0,  -- This comment is for the NONE value.
  313. --     NORMAL = 1,
  314. --     HOLY = 2,
  315. --     FIRE = {4, "removed_cata"}, -- Tagged as available before Cataclysm.
  316. --     NATURE = {8, "mangos"},  -- Tagged as only available on MaNGOS.
  317. --     FROST = {16, "trinity"},  -- Tagged as only available on TrinityCore.
  318. --     SHADOW = {32, "added_tbc"},  -- Tagged as not available before TBC.
  319. --     ARCANE = {64, "trinity", "removed_wotlk"}  -- Tags can be combined.
  320. -- })
  321. --
  322. -- -- Print out the results.
  323. -- -- Try playing with GetCoreName and GetCoreExpansion for different results.
  324. -- for k, v in pairs(SpellSchoolMask) do
  325. --     print(k, v)
  326. -- end
  327. --
  328. -- -- Accessing a non-existent value will cause an error.
  329. -- print(SpellSchoolMask.FIRE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement