Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local enums = {}
- local coreName = GetCoreName()
- local expansion = GetCoreExpansion()
- -- 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
- local checks = {
- mangos = function() return coreName == "MaNGOS" or coreName == "cMaNGOS" end,
- trinity = function() return coreName == "TrinityCore" end,
- added_tbc = function() return expansion >= 1 end,
- added_wotlk = function() return expansion >= 2 end,
- added_cata = function() return expansion >= 3 end,
- removed_tbc = function() return expansion < 1 end,
- removed_wotlk = function() return expansion < 2 end,
- removed_cata = function() return expansion < 3 end,
- }
- -- This function will take a value and then return what it represents.
- -- 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
- local function eval(valortbl)
- local val = valortbl
- if type(valortbl) == "table" then
- val = nil
- for k, v in ipairs(valortbl) do
- if type(v) == "table" then
- -- If we are on a table, evaluate it to some number or nil. Assign it if not nil, inner tables always overwrite lower values.
- val = eval(v) or val
- elseif checks[v] and not checks[v]() then
- -- If we are on a tag and it doesn't pass, throw out this item
- val = nil
- break
- else
- -- We are on a value, assign it, but dont overwrite
- val = val or v
- end
- end
- end
- return val
- end
- -- local function enum(_enum)
- -- for k, v in pairs(_enum) do
- -- _enum[k] = eval(v)
- -- end
- -- return _enum
- -- end
- local emt = {
- __index = function(t, k)
- error("Attempted to access non-existent enum item "..k, 2)
- end
- }
- local function makemeta(enums)
- for ename, t in pairs(enums) do
- -- Add a metatable so that accessing a bad value causes an error.
- enums[ename] = setmetatable(t, emt)
- end
- return enums
- end
- local smt = {
- __newindex = function(self, k, v)
- rawset(self, k, eval(v))
- end
- }
- local function enum()
- -- Create a table with a metatable that evaluates assigned values automatically
- return setmetatable({}, smt)
- end
- enums.CorpseType = enum()
- enums.CorpseType.CORPSE_BONES = 0
- enums.CorpseType.CORPSE_RESURRECTABLE_PVE = 1
- enums.CorpseType.CORPSE_RESURRECTABLE_PVP = 2
- enums.GOState = enum()
- enums.GOState.GO_STATE_ACTIVE = 0 -- show in world as used and not reset (closed door open)
- enums.GOState.GO_STATE_READY = 1 -- show in world as ready (closed door close)
- enums.GOState.GO_STATE_ACTIVE_ALTERNATIVE = 2 -- show in world as used in alt way and not reset (closed door open by cannon fire)
- enums.LootState = enum()
- enums.LootState.GO_NOT_READY = 0
- enums.LootState.GO_READY = 1 -- can be ready but despawned, and then not possible activate until spawn
- enums.LootState.GO_ACTIVATED = 2
- enums.LootState.GO_JUST_DEACTIVATED = 3
- enums.QuestFlags = enum()
- enums.QuestFlags.QUEST_FLAGS_NONE = 0x00000000
- enums.QuestFlags.QUEST_FLAGS_STAY_ALIVE = 0x00000001 -- Not used currently
- 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
- enums.QuestFlags.QUEST_FLAGS_EXPLORATION = 0x00000004 -- Not used currently
- enums.QuestFlags.QUEST_FLAGS_SHARABLE = 0x00000008 -- Can be shared: Player::CanShareQuest()
- enums.QuestFlags.QUEST_FLAGS_HAS_CONDITION = 0x00000010 -- Not used currently
- enums.QuestFlags.QUEST_FLAGS_HIDE_REWARD_POI = 0x00000020 -- Not used currently: Unsure of content
- enums.QuestFlags.QUEST_FLAGS_RAID = 0x00000040 -- Not used currently
- enums.QuestFlags.QUEST_FLAGS_TBC = {0x00000080, "added_tbc"} -- Not used currently: Available if TBC expansion enabled only
- enums.QuestFlags.QUEST_FLAGS_NO_MONEY_FROM_XP = 0x00000100 -- Not used currently: Experience is not converted to gold at max level
- 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))
- enums.QuestFlags.QUEST_FLAGS_TRACKING = 0x00000400 -- These quests are automatically rewarded on quest complete and they will never appear in quest log client side.
- enums.QuestFlags.QUEST_FLAGS_DEPRECATE_REPUTATION = {0x00000800, "added_tbc"} -- Not used currently
- enums.QuestFlags.QUEST_FLAGS_DAILY = {0x00001000, "added_tbc"} -- Used to know quest is Daily one
- enums.QuestFlags.QUEST_FLAGS_FLAGS_PVP = {0x00002000, "added_wotlk"} -- Having this quest in log forces PvP flag
- enums.QuestFlags.QUEST_FLAGS_UNAVAILABLE = {0x00004000, "added_wotlk"} -- Used on quests that are not generically available
- enums.QuestFlags.QUEST_FLAGS_WEEKLY = {0x00008000, "added_wotlk"}
- enums.QuestFlags.QUEST_FLAGS_AUTOCOMPLETE = {0x00010000, "added_wotlk"} -- Quests with this flag player submit automatically by special button in player gui
- enums.QuestFlags.QUEST_FLAGS_DISPLAY_ITEM_IN_TRACKER = {0x00020000, "added_wotlk"} -- Displays usable item in quest tracker
- enums.QuestFlags.QUEST_FLAGS_OBJ_TEXT = {0x00040000, "added_wotlk"} -- use Objective text as Complete text
- 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.
- enums.QuestFlags.QUEST_FLAGS_UNK1 = {0x00100000, "added_cata"}
- enums.QuestFlags.QUEST_FLAGS_AUTO_TAKE = {0x00200000, "added_cata"} -- Automatically suggestion of accepting quest. Not from npc.
- -- enums.QuestFlags.QUEST_FLAGS_UNK2 = {0x00400000, "added_cata"}
- -- enums.QuestFlags.QUEST_FLAGS_UNK3 = {0x00800000, "added_cata"} -- Found in quest 14069
- -- enums.QuestFlags.QUEST_FLAGS_UNK4 = {0x01000000, "added_cata"}
- -- ... 4.x added flags up to 0x80000000 - all unknown for now
- enums.RemoveMethod = enum()
- enums.RemoveMethod.GROUP_REMOVEMETHOD_DEFAULT = 0
- enums.RemoveMethod.GROUP_REMOVEMETHOD_KICK = 1
- enums.RemoveMethod.GROUP_REMOVEMETHOD_LEAVE = 2
- enums.RemoveMethod.GROUP_REMOVEMETHOD_KICK_LFG = 3
- enums.SelectAggroTarget = enum()
- enums.SelectAggroTarget.SELECT_TARGET_RANDOM = 0 -- Just selects a random target
- enums.SelectAggroTarget.SELECT_TARGET_TOPAGGRO = 1 -- Selects targes from top aggro to bottom
- enums.SelectAggroTarget.SELECT_TARGET_BOTTOMAGGRO = 2 -- Selects targets from bottom aggro to top
- enums.SelectAggroTarget.SELECT_TARGET_NEAREST = 3
- enums.SelectAggroTarget.SELECT_TARGET_FARTHEST = 4
- enums.SpellSchools = enum()
- enums.SpellSchools.SPELL_SCHOOL_NORMAL = 0 -- Physical, Armor
- enums.SpellSchools.SPELL_SCHOOL_HOLY = 1
- enums.SpellSchools.SPELL_SCHOOL_FIRE = 2
- enums.SpellSchools.SPELL_SCHOOL_NATURE = 3
- enums.SpellSchools.SPELL_SCHOOL_FROST = 4
- enums.SpellSchools.SPELL_SCHOOL_SHADOW = 5
- enums.SpellSchools.SPELL_SCHOOL_ARCANE = 6
- enums.SpellSchoolMask = enum()
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NONE = 0x00 -- not exist
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NORMAL = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_NORMAL) -- PHYSICAL (Armor)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_HOLY = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_HOLY)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FIRE = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_FIRE)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NATURE = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_NATURE)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_FROST = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_FROST)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SHADOW = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_SHADOW)
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_ARCANE = bit_lshift(1, enums.SpellSchools.SPELL_SCHOOL_ARCANE)
- -- unions
- -- 124, not include normal and holy damage
- 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)
- -- 126
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_MAGIC = (enums.SpellSchoolMask.SPELL_SCHOOL_MASK_HOLY + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_SPELL)
- -- 127
- enums.SpellSchoolMask.SPELL_SCHOOL_MASK_ALL = (enums.SpellSchoolMask.SPELL_SCHOOL_MASK_NORMAL + enums.SpellSchoolMask.SPELL_SCHOOL_MASK_MAGIC)
- enums.TeamId = enum()
- enums.TeamId.TEAM_ALLIANCE = 0
- enums.TeamId.TEAM_HORDE = 1
- enums.TeamId.TEAM_NEUTRAL = 2
- enums.WeatherType = enum()
- enums.WeatherType.WEATHER_TYPE_FINE = 0
- enums.WeatherType.WEATHER_TYPE_RAIN = 1
- enums.WeatherType.WEATHER_TYPE_SNOW = 2
- enums.WeatherType.WEATHER_TYPE_STORM = 3
- enums.WeatherType.WEATHER_TYPE_THUNDERS = 86
- enums.WeatherType.WEATHER_TYPE_BLACKRAIN = 90
- enums.UnitState = enum() -- had TC UNIT_STAT_ or mangos UNIT_STATE_ prefix
- -- persistent state (applied by aura/etc until expire)
- enums.UnitState.MELEE_ATTACKING = {{0x00000001, "trinity"}, 0x00000002} -- unit is melee attacking someone Unit::Attack
- 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
- -- enums.UnitState.MELEE_ATTACK_BY = {0x00000004, "mangos"} -- player is melee attack by someone
- enums.UnitState.CASTING = {0x00008000, "mangos"}
- enums.UnitState.DIED = {{0x00000004, "trinity"}, 0x00000001} -- Unit::SetFeignDeath, player has fake death aura
- enums.UnitState.STUNNED = 0x00000008 -- Aura::HandleAuraModStun
- enums.UnitState.ROOT = {{0x00000010, "trinity"}, 0x00000400} -- Aura::HandleAuraModRoot
- enums.UnitState.ISOLATED = {{0x00000020, "trinity"}, 0x00002000} -- area auras do not affect other players, Aura::HandleAuraModSchoolImmunity
- -- persistent movement generator state (all time while movement generator applied to unit (independent from top state of movegen)
- 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
- enums.UnitState.DISTRACTED = {{0x00000100, "trinity"}, 0x00001000} -- DistractedMovementGenerator active
- -- persistent movement generator state with non-persistent mirror states for stop support
- -- (can be removed temporary by stop command or another movement generator apply)
- -- not use _MOVE versions for generic movegen state, it can be removed temporary for unit stop and etc
- enums.UnitState.CONFUSED = {{0x00000200, "trinity"}, 0x00000800} -- ConfusedMovementGenerator active/onstack
- enums.UnitState.CONFUSED_MOVE = {{0x00000400, "trinity"}, 0x01000000}
- enums.UnitState.ROAMING = {{0x00000800, "trinity"}, 0x00000010} -- RandomMovementGenerator/PointMovementGenerator/WaypointMovementGenerator active (now always set)
- enums.UnitState.ROAMING_MOVE = {{0x00001000, "trinity"}, 0x00800000}
- enums.UnitState.CHASE = {{0x00002000, "trinity"}, 0x00000020} -- ChaseMovementGenerator active
- enums.UnitState.CHASE_MOVE = {{0x00004000, "trinity"}, 0x04000000}
- enums.UnitState.FOLLOW = {{0x00008000, "trinity"}, 0x00000200} -- FollowMovementGenerator active
- enums.UnitState.FOLLOW_MOVE = {{0x00010000, "trinity"}, 0x08000000}
- enums.UnitState.FLEEING = {{0x00020000, "trinity"}, 0x00000080} -- FleeMovementGenerator/TimedFleeingMovementGenerator active/onstack
- enums.UnitState.FLEEING_MOVE = {{0x00040000, "trinity"}, 0x02000000}
- -- More room for other MMGens
- enums.UnitState.CONTROLLED = {{0x00000040, "trinity"}, {(enums.UnitState.CONFUSED + enums.UnitState.STUNNED + enums.UnitState.FLEEING), "mangos"}} -- Aura::HandleAuraModPossess
- -- High-Level states (usually only with Creatures)
- enums.UnitState.NO_COMBAT_MOVEMENT = {0x01000000, "trinity"} -- Combat Movement for MoveChase stopped
- enums.UnitState.RUNNING = {0x02000000, "trinity"} -- SetRun for waypoints and such
- enums.UnitState.WAYPOINT_PAUSED = {0x04000000, "trinity"} -- Waypoint-Movement paused genericly (ie by script)
- enums.UnitState.IGNORE_PATHFINDING = {{0x10000000, "trinity"}, 0x10000000} -- do not use pathfinding in any MovementGenerator
- -- enums.UnitState.SEARCHING = {0x00000040, "mangos"}
- enums.UnitState.POSSESSED = {0x00010000, "mangos"}
- enums.UnitState.CHARGING = {0x00020000, "mangos"}
- enums.UnitState.JUMPING = {0x00040000, "mangos"}
- enums.UnitState.MOVE = {0x00100000, "mangos"}
- enums.UnitState.ROTATING = {0x00200000, "mangos"}
- enums.UnitState.EVADE = {0x00400000, "mangos"}
- enums.UnitState.UNATTACKABLE = {enums.UnitState.TAXI_FLIGHT, "mangos"}
- enums.UnitState.MOVING = {enums.UnitState.ROAMING_MOVE + enums.UnitState.CONFUSED_MOVE + enums.UnitState.FLEEING_MOVE + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE, "mangos"}
- enums.UnitState.ALL_STATE_SUPPORTED = {enums.UnitState.DIED + enums.UnitState.MELEE_ATTACKING + enums.UnitState.STUNNED + enums.UnitState.ROAMING + enums.UnitState.CHASE
- + enums.UnitState.FLEEING + enums.UnitState.IN_FLIGHT + enums.UnitState.FOLLOW + enums.UnitState.ROOT + enums.UnitState.CONFUSED
- + enums.UnitState.DISTRACTED + enums.UnitState.ISOLATED + enums.UnitState.ATTACK_PLAYER + enums.UnitState.CASTING
- + enums.UnitState.POSSESSED + enums.UnitState.CHARGING + enums.UnitState.JUMPING + enums.UnitState.MOVE + enums.UnitState.ROTATING
- + enums.UnitState.EVADE + enums.UnitState.ROAMING_MOVE + enums.UnitState.CONFUSED_MOVE + enums.UnitState.FLEEING_MOVE
- + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE + enums.UnitState.IGNORE_PATHFINDING
- "mangos"}
- enums.UnitState.SIGHTLESS = {(enums.UnitState.LOST_CONTROL + enums.UnitState.EVADE), "mangos"}
- enums.UnitState.CANNOT_AUTOATTACK = ({enums.UnitState.LOST_CONTROL + enums.UnitState.CASTING), "mangos"}
- enums.UnitState.CANNOT_TURN = {(enums.UnitState.LOST_CONTROL + enums.UnitState.ROTATING), "mangos"}
- -- masks (only for check)
- -- can't move currently
- enums.UnitState.CAN_NOT_MOVE = {enums.UnitState.ROOT + enums.UnitState.STUNNED + enums.UnitState.DIED, "trinity"}
- -- stay by different reasons
- 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"}}
- -- stay or scripted movement for effect( = in player case you can't move by client command)
- 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"}
- -- not react at move in sight or other
- enums.UnitState.CAN_NOT_REACT = {enums.UnitState.STUNNED + enums.UnitState.DIED + enums.UnitState.CONFUSED + enums.UnitState.FLEEING, "trinity"}
- -- AI disabled by some reason
- enums.UnitState.LOST_CONTROL = {{enums.UnitState.FLEEING + enums.UnitState.CONTROLLED, "trinity"}, {(enums.UnitState.CONTROLLED + enums.UnitState.JUMPING + enums.UnitState.CHARGING), "mangos"}}
- -- above 2 state cases
- enums.UnitState.CAN_NOT_REACT_OR_LOST_CONTROL = {enums.UnitState.CAN_NOT_REACT + enums.UnitState.LOST_CONTROL, "trinity"}
- -- masks (for check or reset)
- -- for real move using movegen check and stop (except unstoppable flight)
- enums.UnitState.MOVING = {enums.UnitState.ROAMING_MOVE + enums.UnitState.CHASE_MOVE + enums.UnitState.FOLLOW_MOVE + enums.UnitState.FLEEING_MOVE, "trinity"}
- enums.UnitState.RUNNING_STATE = {enums.UnitState.CHASE_MOVE + enums.UnitState.FLEEING_MOVE + enums.UnitState.RUNNING, "trinity"}
- enums.UnitState.ALL_STATE = 0xFFFFFFFF --(STOPPED + MOVING + IN_COMBAT + IN_FLIGHT)
- 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"}
- -- }
- -- else
- -- enums.UnitState =
- -- {
- -- DIED = 0x00000001, -- player has fake death aura
- -- MELEE_ATTACKING = 0x00000002, -- player is melee attacking someone
- -- --MELEE_ATTACK_BY = 0x00000004, -- player is melee attack by someone
- -- STUNNED = 0x00000008,
- -- ROAMING = 0x00000010,
- -- CHASE = 0x00000020,
- -- --SEARCHING = 0x00000040,
- -- FLEEING = 0x00000080,
- -- IN_FLIGHT = 0x00000100, -- player is in flight mode
- -- FOLLOW = 0x00000200,
- -- ROOT = 0x00000400,
- -- CONFUSED = 0x00000800,
- -- DISTRACTED = 0x00001000,
- -- ISOLATED = 0x00002000, -- area auras do not affect other players
- -- ATTACK_PLAYER = 0x00004000,
- -- CASTING = 0x00008000,
- -- POSSESSED = 0x00010000,
- -- CHARGING = 0x00020000,
- -- JUMPING = 0x00040000,
- -- MOVE = 0x00100000,
- -- ROTATING = 0x00200000,
- -- EVADE = 0x00400000,
- -- ROAMING_MOVE = 0x00800000,
- -- CONFUSED_MOVE = 0x01000000,
- -- FLEEING_MOVE = 0x02000000,
- -- CHASE_MOVE = 0x04000000,
- -- FOLLOW_MOVE = 0x08000000,
- -- IGNORE_PATHFINDING = 0x10000000, -- do not use pathfinding in any MovementGenerator
- -- ALL_STATE_SUPPORTED = DIED + MELEE_ATTACKING + STUNNED + ROAMING + CHASE
- -- + FLEEING + IN_FLIGHT + FOLLOW + ROOT + CONFUSED
- -- + DISTRACTED + ISOLATED + ATTACK_PLAYER + CASTING
- -- + POSSESSED + CHARGING + JUMPING + MOVE + ROTATING
- -- + EVADE + ROAMING_MOVE + CONFUSED_MOVE + FLEEING_MOVE
- -- + CHASE_MOVE + FOLLOW_MOVE + IGNORE_PATHFINDING,
- -- UNATTACKABLE = IN_FLIGHT,
- -- -- for real move using movegen check and stop (except unstoppable flight)
- -- MOVING = ROAMING_MOVE + CONFUSED_MOVE + FLEEING_MOVE + CHASE_MOVE + FOLLOW_MOVE,
- -- CONTROLLED = (CONFUSED + STUNNED + FLEEING),
- -- LOST_CONTROL = (CONTROLLED + JUMPING + CHARGING),
- -- SIGHTLESS = (LOST_CONTROL + EVADE),
- -- CANNOT_AUTOATTACK = (LOST_CONTROL + CASTING),
- -- CANNOT_TURN = (LOST_CONTROL + ROTATING),
- -- -- stay by different reasons
- -- NOT_MOVE = ROOT + STUNNED + DIED + DISTRACTED,
- -- ALL_STATE = 0xffffffff --(STOPPED + MOVING + IN_COMBAT + IN_FLIGHT)
- -- }
- -- end
- for ename, v in pairs(makemeta(enums)) do
- _G[ename] = v
- end
- -- -- This is how you would use the enum function.
- -- SpellSchoolMask = enum({
- -- NONE = 0, -- This comment is for the NONE value.
- -- NORMAL = 1,
- -- HOLY = 2,
- -- FIRE = {4, "removed_cata"}, -- Tagged as available before Cataclysm.
- -- NATURE = {8, "mangos"}, -- Tagged as only available on MaNGOS.
- -- FROST = {16, "trinity"}, -- Tagged as only available on TrinityCore.
- -- SHADOW = {32, "added_tbc"}, -- Tagged as not available before TBC.
- -- ARCANE = {64, "trinity", "removed_wotlk"} -- Tags can be combined.
- -- })
- --
- -- -- Print out the results.
- -- -- Try playing with GetCoreName and GetCoreExpansion for different results.
- -- for k, v in pairs(SpellSchoolMask) do
- -- print(k, v)
- -- end
- --
- -- -- Accessing a non-existent value will cause an error.
- -- print(SpellSchoolMask.FIRE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement